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 `_) - * ``"timeline"``: ``https://twitter.com/i/user/USERID`` - * ``"media"``: ``https://twitter.com/id:USERID/media`` + 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 ``""``. + +.. __: `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": - cls = TwitterMediaExtractor - fmt = "{}/id:{}/media".format - else: + userfmt = self.config("users") + if not userfmt or userfmt == "timeline": cls = TwitterTimelineExtractor - fmt = "{}/i/user/{}".format + fmt = (self.root + "/i/user/{rest_id}").format_map + elif userfmt == "media": + cls = TwitterMediaExtractor + fmt = (self.root + "/id:{rest_id}/media").format_map + else: + 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"""