[twitter] implement constant 'user' for tweet URLs

This commit is contained in:
Mike Fährmann
2022-07-29 19:09:44 +02:00
parent 8cf5981ded
commit 8a70b94245

View File

@@ -11,6 +11,7 @@
from .common import Extractor, Message from .common import Extractor, Message
from .. import text, util, exception from .. import text, util, exception
from ..cache import cache from ..cache import cache
import itertools
import json import json
BASE_PATTERN = ( BASE_PATTERN = (
@@ -702,7 +703,7 @@ class TwitterTweetExtractor(TwitterExtractor):
}), }),
("https://twitter.com/i/web/status/1424898916156284928", { ("https://twitter.com/i/web/status/1424898916156284928", {
"options": (("replies", "self"),), "options": (("replies", "self"),),
"count": 0, "count": 1,
}), }),
# "quoted" option (#854) # "quoted" option (#854)
("https://twitter.com/StobiesGalaxy/status/1270755918330896395", { ("https://twitter.com/StobiesGalaxy/status/1270755918330896395", {
@@ -786,20 +787,40 @@ class TwitterTweetExtractor(TwitterExtractor):
def tweets(self): def tweets(self):
if self.config("conversations", False): if self.config("conversations", False):
return self.api.tweet_detail(self.tweet_id) return self._tweets_conversation(self.tweet_id)
else:
return self._tweets_single(self.tweet_id)
def _tweets_single(self, tweet_id):
tweets = [] tweets = []
tweet_id = self.tweet_id
for tweet in self.api.tweet_detail(tweet_id): for tweet in self.api.tweet_detail(tweet_id):
if tweet["rest_id"] == tweet_id or \ if tweet["rest_id"] == tweet_id or \
tweet.get("_retweet_id_str") == tweet_id: tweet.get("_retweet_id_str") == tweet_id:
self._user_obj = tweet["core"]["user_results"]["result"]
self._user = self._transform_user(self._user_obj)
tweets.append(tweet) tweets.append(tweet)
tweet_id = tweet["legacy"].get("quoted_status_id_str") tweet_id = tweet["legacy"].get("quoted_status_id_str")
if not tweet_id: if not tweet_id:
break break
return tweets return tweets
def _tweets_conversation(self, tweet_id):
tweets = self.api.tweet_detail(tweet_id)
buffer = []
for tweet in tweets:
buffer.append(tweet)
if tweet["rest_id"] == tweet_id or \
tweet.get("_retweet_id_str") == tweet_id:
self._user_obj = tweet["core"]["user_results"]["result"]
self._user = self._transform_user(self._user_obj)
break
return itertools.chain(buffer, tweets)
class TwitterImageExtractor(Extractor): class TwitterImageExtractor(Extractor):
category = "twitter" category = "twitter"
@@ -1443,6 +1464,6 @@ class TwitterAPI():
return { return {
"rest_id": tweet["id_str"], "rest_id": tweet["id_str"],
"legacy" : tweet, "legacy" : tweet,
"user" : tweet["user"], "core" : {"user_results": {"result": tweet["user"]}},
"_retweet_id_str": retweet_id, "_retweet_id_str": retweet_id,
} }