From cbdd85ef07d49938395a9a6cf2abfcfeccf98884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Koch-Kramer?= Date: Thu, 23 Aug 2018 23:17:48 +0200 Subject: [PATCH] Highlights downloadable through CLI By using --highlights all available highlight stories of target profiles will get downloaded. Closes #162. --- instaloader/__main__.py | 11 +++++++---- instaloader/instaloader.py | 9 ++++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/instaloader/__main__.py b/instaloader/__main__.py index baf50ca..0123826 100644 --- a/instaloader/__main__.py +++ b/instaloader/__main__.py @@ -59,8 +59,8 @@ def filterstr_to_filterfunc(filter_str: str, item_type: type): def _main(instaloader: Instaloader, targetlist: List[str], username: Optional[str] = None, password: Optional[str] = None, sessionfile: Optional[str] = None, - download_profile_pic: bool = True, - download_posts=True, download_stories: bool = False, download_tagged: bool = False, + download_profile_pic: bool = True, download_posts=True, + download_stories: bool = False, download_highlights: bool = False, download_tagged: bool = False, fast_update: bool = False, max_count: Optional[int] = None, post_filter_str: Optional[str] = None, storyitem_filter_str: Optional[str] = None) -> None: @@ -167,8 +167,8 @@ def _main(instaloader: Instaloader, targetlist: List[str], instaloader.context.log("Downloading {} profiles: {}".format(len(profiles), ' '.join([p.username for p in profiles]))) instaloader.download_profiles(profiles, - download_profile_pic, download_posts, download_tagged, download_stories, - fast_update, post_filter, storyitem_filter) + download_profile_pic, download_posts, download_tagged, download_highlights, + download_stories, fast_update, post_filter, storyitem_filter) if anonymous_retry_profiles: instaloader.context.log("Downloading anonymously: {}" .format(' '.join([p.username for p in anonymous_retry_profiles]))) @@ -263,6 +263,8 @@ def main(): help='Also download stories of each profile that is downloaded. Requires --login.') g_prof.add_argument('--stories-only', action='store_true', help=SUPPRESS) + g_prof.add_argument('--highlights', action='store_true', + help='Also download highlights of each profile that is downloaded. Requires --login.') g_prof.add_argument('--tagged', action='store_true', help='Also download posts where each profile is tagged.') @@ -378,6 +380,7 @@ def main(): download_profile_pic=download_profile_pic, download_posts=download_posts, download_stories=download_stories, + download_highlights=args.highlights, download_tagged=args.tagged, fast_update=args.fast_update, max_count=int(args.count) if args.count is not None else None, diff --git a/instaloader/instaloader.py b/instaloader/instaloader.py index 277ace7..bcd2228 100644 --- a/instaloader/instaloader.py +++ b/instaloader/instaloader.py @@ -766,7 +766,8 @@ class Instaloader: raise ProfileNotExistsException("Profile {0} does not exist.".format(profile_name)) def download_profiles(self, profiles: Set[Profile], - profile_pic: bool = True, posts: bool = True, tagged: bool = False, stories: bool = False, + profile_pic: bool = True, posts: bool = True, + tagged: bool = False, highlights: bool = False, stories: bool = False, fast_update: bool = False, post_filter: Optional[Callable[[Post], bool]] = None, storyitem_filter: Optional[Callable[[Post], bool]] = None): @@ -776,6 +777,7 @@ class Instaloader: :param profile_pic: not :option:`--no-profile-pic`. :param posts: not :option:`--no-posts`. :param tagged: :option:`--tagged`. + :param highlights: :option: `--highlights`. :param stories: :option:`--stories`. :param fast_update: :option:`--fast-update`. :param post_filter: :option:`--post-filter`. @@ -811,6 +813,11 @@ class Instaloader: with self.context.error_catcher('Download tagged of {}'.format(profile_name)): self.download_tagged(profile, fast_update=fast_update, post_filter=post_filter) + # Download highlights, if requested + if highlights: + with self.context.error_catcher('Download highlights of {}'.format(profile_name)): + self.download_highlights(profile, fast_update=fast_update, storyitem_filter=storyitem_filter) + # Iterate over pictures and download them if posts: self.context.log("Retrieving posts from profile {}.".format(profile_name))