diff options
Diffstat (limited to 'gallery_dl/extractor/twitter.py')
| -rw-r--r-- | gallery_dl/extractor/twitter.py | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/gallery_dl/extractor/twitter.py b/gallery_dl/extractor/twitter.py index 71f14dc..236a001 100644 --- a/gallery_dl/extractor/twitter.py +++ b/gallery_dl/extractor/twitter.py @@ -245,15 +245,24 @@ class TwitterExtractor(Extractor): class TwitterTimelineExtractor(TwitterExtractor): """Extractor for all images from a user's timeline""" subcategory = "timeline" - pattern = BASE_PATTERN + r"/(?!search)([^/?&#]+)/?(?:$|[?#])" + pattern = BASE_PATTERN + \ + r"/(?!search)(?:([^/?&#]+)/?(?:$|[?#])|intent/user\?user_id=(\d+))" test = ( ("https://twitter.com/supernaturepics", { "range": "1-40", "url": "0106229d408f4111d9a52c8fd2ad687f64842aa4", }), ("https://mobile.twitter.com/supernaturepics?p=i"), + ("https://www.twitter.com/id:2976459548"), + ("https://twitter.com/intent/user?user_id=2976459548"), ) + def __init__(self, match): + TwitterExtractor.__init__(self, match) + uid = match.group(2) + if uid: + self.user = "id:" + uid + def tweets(self): return TwitterAPI(self).timeline_profile(self.user) @@ -268,6 +277,7 @@ class TwitterMediaExtractor(TwitterExtractor): "url": "0106229d408f4111d9a52c8fd2ad687f64842aa4", }), ("https://mobile.twitter.com/supernaturepics/media#t"), + ("https://www.twitter.com/id:2976459548/media"), ) def tweets(self): @@ -450,18 +460,18 @@ class TwitterAPI(): return tweets def timeline_profile(self, screen_name): - user = self.user_by_screen_name(screen_name) - endpoint = "2/timeline/profile/{}.json".format(user["rest_id"]) + user_id = self._user_id_by_screen_name(screen_name) + endpoint = "2/timeline/profile/{}.json".format(user_id) return self._pagination(endpoint) def timeline_media(self, screen_name): - user = self.user_by_screen_name(screen_name) - endpoint = "2/timeline/media/{}.json".format(user["rest_id"]) + user_id = self._user_id_by_screen_name(screen_name) + endpoint = "2/timeline/media/{}.json".format(user_id) return self._pagination(endpoint) def timeline_favorites(self, screen_name): - user = self.user_by_screen_name(screen_name) - endpoint = "2/timeline/favorites/{}.json".format(user["rest_id"]) + user_id = self._user_id_by_screen_name(screen_name) + endpoint = "2/timeline/favorites/{}.json".format(user_id) return self._pagination(endpoint) def timeline_bookmark(self): @@ -490,6 +500,11 @@ class TwitterAPI(): except KeyError: raise exception.NotFoundError("user") + def _user_id_by_screen_name(self, screen_name): + if screen_name.startswith("id:"): + return screen_name[3:] + return self.user_by_screen_name(screen_name)["rest_id"] + @cache(maxage=3600) def _guest_token(self): endpoint = "1.1/guest/activate.json" |
