From 14e9cf435ecd0e8e61c2a0572ce636149a0de0e7 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 14 Mar 2018 08:41:48 +0100 Subject: [PATCH] Fix download of saved posts (was broken with commit 83b31175dfe98fee879c06a62c79c44638ff0272, due to a slight modification of Instaloader.get_profile_metadata) --- docs/as-module.rst | 3 ++- instaloader.py | 12 +++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/docs/as-module.rst b/docs/as-module.rst index e9ff9b6..ed8b61e 100644 --- a/docs/as-module.rst +++ b/docs/as-module.rst @@ -37,7 +37,8 @@ certain source:: L.download_post(post, target='#cat') Besides :func:`Instaloader.get_hashtag_posts`, there is -:func:`Instaloader.get_feed_posts` and :func:`Instaloader.get_profile_posts`. +:func:`Instaloader.get_feed_posts`, :func:`Instaloader.get_profile_posts` and +:func:`Instaloader.get_saved_posts`. Also, :class:`Post` instances can be created with :func:`Post.from_shortcode` and :func:`Post.from_mediaid`. diff --git a/instaloader.py b/instaloader.py index 56ccb74..815bf1a 100755 --- a/instaloader.py +++ b/instaloader.py @@ -169,7 +169,8 @@ class Post: """ Structure containing information about an Instagram post. - Created by Instaloader methods :meth:`.get_profile_posts`, :meth:`.get_hashtag_posts`, :meth:`.get_feed_posts`. + Created by Instaloader methods :meth:`.get_profile_posts`, :meth:`.get_hashtag_posts`, :meth:`.get_feed_posts` and + :meth:`.get_saved_posts`. Posts are linked to an :class:`Instaloader` instance which is used for error logging and obtaining of additional metadata, if required. This class unifies access to the properties associated with a post. It implements == and is hashable. @@ -1247,12 +1248,9 @@ class Instaloader: user_id = data["user"]["id"] while True: - if "graphql" in data: + if "edge_saved_media" in data["user"]: is_edge = True - saved_media = data["graphql"]["user"]["edge_saved_media"] - elif "data" in data: - is_edge = True - saved_media = data["data"]["user"]["edge_saved_media"] + saved_media = data["user"]["edge_saved_media"] else: is_edge = False saved_media = data["user"]["saved_media"] @@ -1266,7 +1264,7 @@ class Instaloader: break data = self.graphql_query("f883d95537fbcd400f466f63d42bd8a1", {'id': user_id, 'first': Instaloader.GRAPHQL_PAGE_LENGTH, - 'after': saved_media["page_info"]["end_cursor"]}) + 'after': saved_media["page_info"]["end_cursor"]})['data'] def download_saved_posts(self, max_count: int = None, fast_update: bool = False, filter_func: Optional[Callable[[Post], bool]] = None) -> None: