Lad*_*uka 6 python twitter tweepy
我当前非常简单的代码应该使用 twitter 流 API 来简单地将某个关键字下的所有推文打印到控制台中。但是我不知道如何获取推文的全文而不是截断的版本。该程序还在其他地方利用
new_tweets = api.user_timeline(screen_name=username, count=200, tweet_mode='extended')
Run Code Online (Sandbox Code Playgroud)
其中最后一个参数准确指定了这一点。
这是我当前的代码:
class LiveTweetListener(tweepy.StreamListener):
def on_status(self, status):
try:
print(status.full_text)
except AttributeError:
print(status.text)
def on_error(self, status_code):
if status_code == 420:
print("420")
return False
def start_stream(track):
Listener = LiveTweetListener()
stream = tweepy.Stream(auth=api.auth, listener=LiveTweetListener())
stream.filter(track=track, async=True)
Run Code Online (Sandbox Code Playgroud)
使用 stream = tweepy.Stream 传递 tweet_mode='extended' 似乎不起作用
让它工作需要更多的逻辑。首先,添加tweet_mode回Stream,如下所示:
stream = tweepy.Stream(auth=api.auth, listener=LiveTweetListener(), tweet_mode='extended')
Run Code Online (Sandbox Code Playgroud)
接下来,将您的更改on_status为这样的:
def on_status(self, status):
try:
if hasattr(status, 'retweeted_status') and hasattr(status.retweeted_status, 'extended_tweet'):
print('retweeted: ' + status.retweeted_status.extended_tweet['full_text'])
if hasattr(status, 'extended_tweet'):
print('extended_tweet: ' + status.extended_tweet['full_text'])
else:
print('text: ' + status.text)
except AttributeError:
print('attribute error: ' + status.text)
Run Code Online (Sandbox Code Playgroud)
这就是为什么这样做的原因:
status.retweeted_tweet.extended_tweet.full_text保留文本。status.extended_tweet.full_tweet.status.text.虽然full_text不作为extended_tweet属性出现,但它是 JSON 有效负载的一部分(如果可用),这就是为什么您仍然可以通过['full_text'].