From a3b473bd2f675b6f07da730aacce67f3e7998a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Tue, 8 Sep 2020 22:56:52 +0200 Subject: [PATCH] [twitter] support specifying users by ID (#980) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit by using 'id:…' as their screen name, i.e. https://www.twitter.com/id:2976459548/media instead of https://twitter.com/supernaturepics/media The user ID can, for example, be obtained from the output of $ gallery-dl -j --range 1 https://twitter.com/ --- gallery_dl/extractor/twitter.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/gallery_dl/extractor/twitter.py b/gallery_dl/extractor/twitter.py index 71f14dcc..c8ec1c1d 100644 --- a/gallery_dl/extractor/twitter.py +++ b/gallery_dl/extractor/twitter.py @@ -252,6 +252,7 @@ class TwitterTimelineExtractor(TwitterExtractor): "url": "0106229d408f4111d9a52c8fd2ad687f64842aa4", }), ("https://mobile.twitter.com/supernaturepics?p=i"), + ("https://www.twitter.com/id:2976459548"), ) def tweets(self): @@ -268,6 +269,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 +452,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 +492,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"