[twitter] allow specifying a custom format for user results

(#1337)
This commit is contained in:
Mike Fährmann
2021-03-20 01:31:12 +01:00
parent bf241811dd
commit 2846235669
2 changed files with 26 additions and 10 deletions

View File

@@ -1423,6 +1423,7 @@ Description
This value sets the maximum recursion depth. This value sets the maximum recursion depth.
Special values: Special values:
* ``0``: Recursion is disabled * ``0``: Recursion is disabled
* ``-1``: Infinite recursion (don't do this) * ``-1``: Infinite recursion (don't do this)
@@ -1647,12 +1648,23 @@ Type
``string`` ``string``
Default Default
``"timeline"`` ``"timeline"``
Example
``"https://twitter.com/search?q=from:{legacy[screen_name]}"``
Description Description
Output format for user results from | Format string for user URLs generated from
``following`` and ``list-members`` queries. ``following`` and ``list-members`` queries,
| whose replacement field values come from Twitter ``user`` objects
(`Example <https://gist.githubusercontent.com/mikf/99d2719b3845023326c7a4b6fb88dd04/raw/275b4f0541a2c7dc0a86d3998f7d253e8f10a588/github.json>`_)
* ``"timeline"``: ``https://twitter.com/i/user/USERID`` Special values:
* ``"media"``: ``https://twitter.com/id:USERID/media``
* ``"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 extractor.twitter.videos

View File

@@ -225,16 +225,20 @@ class TwitterExtractor(Extractor):
return cache[uid] return cache[uid]
def _users_result(self, users): def _users_result(self, users):
if self.config("users") == "media": userfmt = self.config("users")
cls = TwitterMediaExtractor if not userfmt or userfmt == "timeline":
fmt = "{}/id:{}/media".format
else:
cls = TwitterTimelineExtractor 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: for user in users:
user["_extractor"] = cls user["_extractor"] = cls
yield Message.Queue, fmt(self.root, user["rest_id"]), user yield Message.Queue, fmt(user), user
def metadata(self): def metadata(self):
"""Return general metadata""" """Return general metadata"""