From 3346f58a2a3e992fc8a69501366143e369ca6ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Mon, 2 May 2022 08:50:04 +0200 Subject: [PATCH] [twitter] use twMediaDownloader strategy for user URLs - use media timeline + search for default user URLs like https://twitter.com/SCREEN_NAME - fetches all/most media for the type of twitter URL that most users use with gallery-dl - can be disabled by setting 'strategy' to any truthy value, like "timeline" --- gallery_dl/extractor/twitter.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gallery_dl/extractor/twitter.py b/gallery_dl/extractor/twitter.py index 4c947e7a..e081e30f 100644 --- a/gallery_dl/extractor/twitter.py +++ b/gallery_dl/extractor/twitter.py @@ -409,8 +409,35 @@ class TwitterTimelineExtractor(TwitterExtractor): self.user = "id:" + user_id def tweets(self): + if not self.config("strategy"): + return self._tweets_twMediaDownloader() return self.api.user_tweets(self.user) + def _tweets_twMediaDownloader(self): + tweet = None + for tweet in self.api.user_media(self.user): + yield tweet + + if tweet is None: + return + + if not self.user.startswith("id:"): + username = self.user + elif "core" in tweet: + username = (tweet["core"]["user_results"]["result"] + ["legacy"]["screen_name"]) + else: + username = tweet["user"]["screen_name"] + + if "legacy" in tweet: + tweet = tweet["legacy"] + + yield from self.api.search_adaptive( + "from:{} include:retweets include:nativeretweets max_id:{} " + "filter:images OR card_name:animated_gif OR filter:native_video" + .format(username, tweet["id_str"]) + ) + class TwitterRepliesExtractor(TwitterExtractor): """Extractor for Tweets from a user's timeline including replies"""