From a070ed42aebe0d2157058fdc4c632fe7e2d49028 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Sun, 5 Aug 2018 08:06:53 +0200 Subject: [PATCH] get_stories(): Fetch in chunks of 100 users It seems there is a limit of how many user stories can be requested at once. Now, Instaloader.get_stories() chunks the stories request. Fixes #157 and fixes #134. --- instaloader/instaloader.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/instaloader/instaloader.py b/instaloader/instaloader.py index 5c0d1ac..d8e5ec6 100644 --- a/instaloader/instaloader.py +++ b/instaloader/instaloader.py @@ -396,17 +396,22 @@ class Instaloader: :param userids: List of user IDs to be processed in terms of downloading their stories, or None. """ - if userids is None: + if not userids: data = self.context.graphql_query("d15efd8c0c5b23f0ef71f18bf363c704", {"only_stories": True})["data"]["user"] if data is None: raise BadResponseException('Bad stories reel JSON.') userids = list(edge["node"]["id"] for edge in data["feed_reels_tray"]["edge_reels_tray_to_reel"]["edges"]) - stories = self.context.graphql_query("bf41e22b1c4ba4c9f31b844ebb7d9056", - {"reel_ids": userids, "precomposed_overlay": False})["data"] + def _userid_chunks(): + userids_per_query = 100 + for i in range(0, len(userids), userids_per_query): + yield userids[i:i + userids_per_query] - yield from (Story(self.context, media) for media in stories['reels_media']) + for userid_chunk in _userid_chunks(): + stories = self.context.graphql_query("bf41e22b1c4ba4c9f31b844ebb7d9056", + {"reel_ids": userid_chunk, "precomposed_overlay": False})["data"] + yield from (Story(self.context, media) for media in stories['reels_media']) @_requires_login def download_stories(self,