[twitter] implement constant 'user' for tweet URLs
This commit is contained in:
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user