diff --git a/docs/configuration.rst b/docs/configuration.rst index a009208b..e3388f77 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -2375,6 +2375,22 @@ Description will be taken from the original Tweets, not the Retweets. +extractor.twitter.timeline.strategy +----------------------------------- +Type + ``string`` +Default + ``"auto"`` +Description + Controls the strategy / tweet source used for user URLs + (``https://twitter.com/USER``). + + * ``"tweets"``: `/tweets `__ timeline + search + * ``"media"``: `/media `__ timeline + search + * ``"with_replies"``: `/with_replies `__ timeline + search + * ``"auto"``: ``"tweets"`` or ``"media"``, depending on `retweets `__ and `text-tweets `__ settings + + extractor.twitter.text-tweets ----------------------------- Type diff --git a/docs/gallery-dl.conf b/docs/gallery-dl.conf index 78550b51..d447bdbf 100644 --- a/docs/gallery-dl.conf +++ b/docs/gallery-dl.conf @@ -285,6 +285,7 @@ "quoted": false, "replies": true, "retweets": false, + "strategy": null, "text-tweets": false, "twitpic": false, "users": "timeline", diff --git a/gallery_dl/extractor/twitter.py b/gallery_dl/extractor/twitter.py index a0d6194f..33e9e10d 100644 --- a/gallery_dl/extractor/twitter.py +++ b/gallery_dl/extractor/twitter.py @@ -440,12 +440,9 @@ class TwitterTimelineExtractor(TwitterExtractor): self.user = "id:" + user_id def tweets(self): - tweets = (self.api.user_tweets if self.retweets else - self.api.user_media) - # yield initial batch of (media) tweets tweet = None - for tweet in tweets(self.user): + for tweet in self._select_tweet_source()(self.user): yield tweet if tweet is None: @@ -476,6 +473,19 @@ class TwitterTimelineExtractor(TwitterExtractor): # yield search results starting from last tweet id yield from self.api.search_adaptive(query) + def _select_tweet_source(self): + strategy = self.config("strategy") + if strategy is None or strategy == "auto": + if self.retweets or self.textonly: + return self.api.user_tweets + else: + return self.api.user_media + if strategy == "tweets": + return self.api.user_tweets + if strategy == "with_replies": + return self.api.user_tweets_and_replies + return self.api.user_media + class TwitterTweetsExtractor(TwitterExtractor): """Extractor for Tweets from a user's Tweets timeline"""