From 3378b397193671cb8bc3b0f00afa192baa5c3e32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Mon, 15 Mar 2021 22:55:24 +0100 Subject: [PATCH] [twitter] implement 'users' option (#1337) --- docs/configuration.rst | 14 ++++++++++++++ docs/gallery-dl.conf | 1 + gallery_dl/extractor/twitter.py | 22 ++++++++++++++-------- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 7a988e1b..90ec847a 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -1650,6 +1650,20 @@ Description Extract `TwitPic `__ embeds. +extractor.twitter.users +----------------------- +Type + ``string`` +Default + ``"timeline"`` +Description + Output format for user results from + ``following`` and ``list-members`` queries. + + * ``"timeline"``: ``https://twitter.com/i/user/USERID`` + * ``"media"``: ``https://twitter.com/id:USERID/media`` + + extractor.twitter.videos ------------------------ Type diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index 12b8e4fb..ca34eb51 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -254,6 +254,7 @@ "replies": true, "retweets": true, "twitpic": false, + "users": "timeline", "videos": true }, "unsplash": diff --git a/gallery_dl/extractor/twitter.py b/gallery_dl/extractor/twitter.py index a7d2de5f..af5c0a3d 100644 --- a/gallery_dl/extractor/twitter.py +++ b/gallery_dl/extractor/twitter.py @@ -224,6 +224,18 @@ class TwitterExtractor(Extractor): } return cache[uid] + def _users_result(self, users): + if self.config("users") == "media": + cls = TwitterMediaExtractor + fmt = "{}/id:{}/media".format + else: + cls = TwitterTimelineExtractor + fmt = "{}/i/user/{}".format + + for user in users: + user["_extractor"] = cls + yield Message.Queue, fmt(self.root, user["rest_id"]), user + def metadata(self): """Return general metadata""" return {} @@ -356,10 +368,7 @@ class TwitterListMembersExtractor(TwitterExtractor): def items(self): self.login() - for user in TwitterAPI(self).list_members(self.user): - user["_extractor"] = TwitterTimelineExtractor - url = "{}/i/user/{}".format(self.root, user["rest_id"]) - yield Message.Queue, url, user + return self._users_result(TwitterAPI(self).list_members(self.user)) class TwitterFollowingExtractor(TwitterExtractor): @@ -373,10 +382,7 @@ class TwitterFollowingExtractor(TwitterExtractor): def items(self): self.login() - for user in TwitterAPI(self).user_following(self.user): - user["_extractor"] = TwitterTimelineExtractor - url = "{}/i/user/{}".format(self.root, user["rest_id"]) - yield Message.Queue, url, user + return self._users_result(TwitterAPI(self).user_following(self.user)) class TwitterSearchExtractor(TwitterExtractor):