Highlights downloadable through CLI

By using --highlights all available highlight stories of target profiles
will get downloaded.
Closes #162.
This commit is contained in:
André Koch-Kramer 2018-08-23 23:17:48 +02:00
parent 2e517e972f
commit cbdd85ef07
2 changed files with 15 additions and 5 deletions

View File

@ -59,8 +59,8 @@ def filterstr_to_filterfunc(filter_str: str, item_type: type):
def _main(instaloader: Instaloader, targetlist: List[str], def _main(instaloader: Instaloader, targetlist: List[str],
username: Optional[str] = None, password: Optional[str] = None, username: Optional[str] = None, password: Optional[str] = None,
sessionfile: Optional[str] = None, sessionfile: Optional[str] = None,
download_profile_pic: bool = True, download_profile_pic: bool = True, download_posts=True,
download_posts=True, download_stories: bool = False, download_tagged: bool = False, download_stories: bool = False, download_highlights: bool = False, download_tagged: bool = False,
fast_update: bool = False, fast_update: bool = False,
max_count: Optional[int] = None, post_filter_str: Optional[str] = None, max_count: Optional[int] = None, post_filter_str: Optional[str] = None,
storyitem_filter_str: Optional[str] = None) -> 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), instaloader.context.log("Downloading {} profiles: {}".format(len(profiles),
' '.join([p.username for p in profiles]))) ' '.join([p.username for p in profiles])))
instaloader.download_profiles(profiles, instaloader.download_profiles(profiles,
download_profile_pic, download_posts, download_tagged, download_stories, download_profile_pic, download_posts, download_tagged, download_highlights,
fast_update, post_filter, storyitem_filter) download_stories, fast_update, post_filter, storyitem_filter)
if anonymous_retry_profiles: if anonymous_retry_profiles:
instaloader.context.log("Downloading anonymously: {}" instaloader.context.log("Downloading anonymously: {}"
.format(' '.join([p.username for p in anonymous_retry_profiles]))) .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.') help='Also download stories of each profile that is downloaded. Requires --login.')
g_prof.add_argument('--stories-only', action='store_true', g_prof.add_argument('--stories-only', action='store_true',
help=SUPPRESS) 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', g_prof.add_argument('--tagged', action='store_true',
help='Also download posts where each profile is tagged.') help='Also download posts where each profile is tagged.')
@ -378,6 +380,7 @@ def main():
download_profile_pic=download_profile_pic, download_profile_pic=download_profile_pic,
download_posts=download_posts, download_posts=download_posts,
download_stories=download_stories, download_stories=download_stories,
download_highlights=args.highlights,
download_tagged=args.tagged, download_tagged=args.tagged,
fast_update=args.fast_update, fast_update=args.fast_update,
max_count=int(args.count) if args.count is not None else None, max_count=int(args.count) if args.count is not None else None,

View File

@ -766,7 +766,8 @@ class Instaloader:
raise ProfileNotExistsException("Profile {0} does not exist.".format(profile_name)) raise ProfileNotExistsException("Profile {0} does not exist.".format(profile_name))
def download_profiles(self, profiles: Set[Profile], 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, fast_update: bool = False,
post_filter: Optional[Callable[[Post], bool]] = None, post_filter: Optional[Callable[[Post], bool]] = None,
storyitem_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 profile_pic: not :option:`--no-profile-pic`.
:param posts: not :option:`--no-posts`. :param posts: not :option:`--no-posts`.
:param tagged: :option:`--tagged`. :param tagged: :option:`--tagged`.
:param highlights: :option: `--highlights`.
:param stories: :option:`--stories`. :param stories: :option:`--stories`.
:param fast_update: :option:`--fast-update`. :param fast_update: :option:`--fast-update`.
:param post_filter: :option:`--post-filter`. :param post_filter: :option:`--post-filter`.
@ -811,6 +813,11 @@ class Instaloader:
with self.context.error_catcher('Download tagged of {}'.format(profile_name)): with self.context.error_catcher('Download tagged of {}'.format(profile_name)):
self.download_tagged(profile, fast_update=fast_update, post_filter=post_filter) 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 # Iterate over pictures and download them
if posts: if posts:
self.context.log("Retrieving posts from profile {}.".format(profile_name)) self.context.log("Retrieving posts from profile {}.".format(profile_name))