merge #3473: [twitter] fix crash when using 'expand' and 'syndication'
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user