aboutsummaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/twitter.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/twitter.py')
-rw-r--r--gallery_dl/extractor/twitter.py29
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"