[instagram] detect empty story listings faster
This commit is contained in:
@@ -345,8 +345,7 @@ class InstagramExtractor(Extractor):
|
|||||||
"full_name": user["full_name"],
|
"full_name": user["full_name"],
|
||||||
})
|
})
|
||||||
|
|
||||||
def _extract_shared_data(self, url):
|
def _extract_shared_data(self, page):
|
||||||
page = self.request(url).text
|
|
||||||
shared_data, pos = text.extract(
|
shared_data, pos = text.extract(
|
||||||
page, "window._sharedData =", ";</script>")
|
page, "window._sharedData =", ";</script>")
|
||||||
additional_data, pos = text.extract(
|
additional_data, pos = text.extract(
|
||||||
@@ -359,13 +358,15 @@ class InstagramExtractor(Extractor):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
def _extract_profile_page(self, url):
|
def _extract_profile_page(self, url):
|
||||||
data = self._extract_shared_data(url)["entry_data"]
|
page = self.request(url).text
|
||||||
|
data = self._extract_shared_data(page)["entry_data"]
|
||||||
if "HttpErrorPage" in data:
|
if "HttpErrorPage" in data:
|
||||||
raise exception.NotFoundError("user")
|
raise exception.NotFoundError("user")
|
||||||
return data["ProfilePage"][0]["graphql"]["user"]
|
return data["ProfilePage"][0]["graphql"]["user"]
|
||||||
|
|
||||||
def _extract_post_page(self, url):
|
def _extract_post_page(self, url):
|
||||||
data = self._extract_shared_data(url)["entry_data"]
|
page = self.request(url).text
|
||||||
|
data = self._extract_shared_data(page)["entry_data"]
|
||||||
if "HttpErrorPage" in data:
|
if "HttpErrorPage" in data:
|
||||||
raise exception.NotFoundError("post")
|
raise exception.NotFoundError("post")
|
||||||
return data["PostPage"][0]
|
return data["PostPage"][0]
|
||||||
@@ -534,7 +535,8 @@ class InstagramTagExtractor(InstagramExtractor):
|
|||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
url = "{}/explore/tags/{}/".format(self.root, self.item)
|
url = "{}/explore/tags/{}/".format(self.root, self.item)
|
||||||
page = self._extract_shared_data(url)["entry_data"]["TagPage"][0]
|
page = self._extract_shared_data(
|
||||||
|
self.request(url).text)["entry_data"]["TagPage"][0]
|
||||||
|
|
||||||
if "data" in page:
|
if "data" in page:
|
||||||
return self._pagination_sections(page["data"]["recent"])
|
return self._pagination_sections(page["data"]["recent"])
|
||||||
@@ -728,8 +730,12 @@ class InstagramStoriesExtractor(InstagramExtractor):
|
|||||||
reel_id = "highlight:" + self.highlight_id
|
reel_id = "highlight:" + self.highlight_id
|
||||||
else:
|
else:
|
||||||
url = "{}/stories/{}/".format(self.root, self.user)
|
url = "{}/stories/{}/".format(self.root, self.user)
|
||||||
|
with self.request(url, allow_redirects=False) as response:
|
||||||
|
if 300 <= response.status_code < 400:
|
||||||
|
return ()
|
||||||
|
page = response.text
|
||||||
try:
|
try:
|
||||||
data = self._extract_shared_data(url)["entry_data"]
|
data = self._extract_shared_data(page)["entry_data"]
|
||||||
user = data["StoriesPage"][0]["user"]
|
user = data["StoriesPage"][0]["user"]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return ()
|
return ()
|
||||||
|
|||||||
Reference in New Issue
Block a user