From 284623566928a4835a759e27237faebeea9abc54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Sat, 20 Mar 2021 01:31:12 +0100 Subject: [PATCH] [twitter] allow specifying a custom format for user results (#1337) --- docs/configuration.rst | 20 ++++++++++++++++---- gallery_dl/extractor/twitter.py | 14 +++++++++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/docs/configuration.rst b/docs/configuration.rst index 53368ab7..1f32bb87 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -1423,6 +1423,7 @@ Description This value sets the maximum recursion depth. Special values: + * ``0``: Recursion is disabled * ``-1``: Infinite recursion (don't do this) @@ -1647,12 +1648,23 @@ Type ``string`` Default ``"timeline"`` +Example + ``"https://twitter.com/search?q=from:{legacy[screen_name]}"`` Description - Output format for user results from - ``following`` and ``list-members`` queries. + | Format string for user URLs generated from + ``following`` and ``list-members`` queries, + | whose replacement field values come from Twitter ``user`` objects + (`Example `_) + + Special values: + + * ``"timeline"``: ``https://twitter.com/i/user/{rest_id}`` + * ``"media"``: ``https://twitter.com/id:{rest_id}/media`` + + Note: To allow gallery-dl to follow custom URL formats, set the blacklist__ + for ``twitter`` to a non-default value, e.g. an empty string ``""``. - * ``"timeline"``: ``https://twitter.com/i/user/USERID`` - * ``"media"``: ``https://twitter.com/id:USERID/media`` +.. __: `extractor.*.blacklist & .whitelist`_ extractor.twitter.videos diff --git a/gallery_dl/extractor/twitter.py b/gallery_dl/extractor/twitter.py index af5c0a3d..a1c36317 100644 --- a/gallery_dl/extractor/twitter.py +++ b/gallery_dl/extractor/twitter.py @@ -225,16 +225,20 @@ class TwitterExtractor(Extractor): return cache[uid] def _users_result(self, users): - if self.config("users") == "media": + userfmt = self.config("users") + if not userfmt or userfmt == "timeline": + cls = TwitterTimelineExtractor + fmt = (self.root + "/i/user/{rest_id}").format_map + elif userfmt == "media": cls = TwitterMediaExtractor - fmt = "{}/id:{}/media".format + fmt = (self.root + "/id:{rest_id}/media").format_map else: - cls = TwitterTimelineExtractor - fmt = "{}/i/user/{}".format + cls = None + fmt = userfmt.format_map for user in users: user["_extractor"] = cls - yield Message.Queue, fmt(self.root, user["rest_id"]), user + yield Message.Queue, fmt(user), user def metadata(self): """Return general metadata"""