merge #3473: [twitter] fix crash when using 'expand' and 'syndication'

This commit is contained in:
Mike Fährmann
2023-01-05 14:19:47 +01:00
2 changed files with 24 additions and 12 deletions

View File

@@ -2703,6 +2703,8 @@ Description
for each Tweet in said timeline. for each Tweet in said timeline.
Note: This requires at least 1 additional API call per initial Tweet. Note: This requires at least 1 additional API call per initial Tweet.
Age-restricted replies cannot be expanded when using the
`syndication <extractor.twitter.syndication_>`__ API.
extractor.twitter.size extractor.twitter.size

View File

@@ -365,18 +365,22 @@ class TwitterExtractor(Extractor):
def _expand_tweets(self, tweets): def _expand_tweets(self, tweets):
seen = set() seen = set()
for tweet in tweets: for tweet in tweets:
obj = tweet["legacy"] if "legacy" in tweet else tweet
if "legacy" in tweet: cid = obj.get("conversation_id_str")
cid = tweet["legacy"]["conversation_id_str"] if not cid:
else: tid = obj["id_str"]
cid = tweet["conversation_id_str"] self.log.warning(
"Unable to expand %s (no 'conversation_id')", tid)
if cid not in seen: continue
seen.add(cid) if cid in seen:
try: self.log.debug(
yield from self.api.tweet_detail(cid) "Skipping expansion of %s (previously seen)", cid)
except Exception: continue
yield tweet seen.add(cid)
try:
yield from self.api.tweet_detail(cid)
except Exception:
yield tweet
def _make_tweet(self, user, id_str, url, timestamp): def _make_tweet(self, user, id_str, url, timestamp):
return { return {
@@ -1520,6 +1524,12 @@ class TwitterAPI():
else: else:
retweet_id = None retweet_id = None
# assume 'conversation_id' is the same as 'id' when the tweet
# is not a reply
if "conversation_id_str" not in tweet and \
"in_reply_to_status_id_str" not in tweet:
tweet["conversation_id_str"] = tweet["id_str"]
tweet["created_at"] = text.parse_datetime( tweet["created_at"] = text.parse_datetime(
tweet["created_at"], "%Y-%m-%dT%H:%M:%S.%fZ").strftime( tweet["created_at"], "%Y-%m-%dT%H:%M:%S.%fZ").strftime(
"%a %b %d %H:%M:%S +0000 %Y") "%a %b %d %H:%M:%S +0000 %Y")