使用Tweepy Streaming API无法获取完整推文内容的求助
解决Tweepy Streaming API无法获取完整推文内容的问题
嘿,我刚好碰到过这个问题!你已经做对了第一步——在初始化Stream的时候加上了tweet_mode='extended',但问题出在你读取推文内容的方式上。
核心问题分析
当你启用tweet_mode='extended'后,Twitter API会返回完整的推文内容,但它不再放在status.text字段里,而是存到了status.full_text中。另外还要注意转发推文的特殊情况:如果是转发的推文,原始推文的完整内容会在status.retweeted_status.full_text里,直接用status.full_text可能只会得到带RT前缀的截断内容。
解决方案
我帮你修改了代码中的关键部分,主要是analyze_status函数和on_status方法:
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET) api = tweepy.API(auth) # 改用status.retweeted属性判断是否为转发,更准确 def analyze_status(status): return status.retweeted class MyStreamListener(tweepy.StreamListener): def on_status(self, status): if not analyze_status(status): # 获取完整推文内容 if hasattr(status, 'full_text'): tweet_content = status.full_text else: tweet_content = status.text # 如果需要获取转发的原始推文完整内容,可取消下方注释 # if status.retweeted: # tweet_content = status.retweeted_status.full_text with open('fetched_tweets.txt', 'a') as tf: tf.write(tweet_content.encode('utf-8') + '\n\n') print(tweet_content) def on_error(self, status): print("Error Code : " + str(status)) # 修复类型错误,将status转为字符串 # 你的这部分配置是正确的,已启用extended模式 myStreamListener = MyStreamListener() myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener, tweet_mode='extended') myStream.filter(track=['#bitcoin'], async=True)
关键改动说明
- 判断转发的方式优化:用
status.retweeted属性替代文本前缀匹配,这是Twitter API提供的原生属性,比字符串判断更可靠。 - 获取完整内容:优先读取
status.full_text字段,同时保留对status.text的兼容判断,避免极端场景下的报错。 - 转发内容可选处理:如果需要获取转发的原始推文完整内容,可以取消注释代码中的转发判断逻辑,直接读取
status.retweeted_status.full_text。 - 错误处理修复:
on_error方法中把status转为字符串,避免打印时出现类型不匹配的错误。
这样修改后,你就能获取到超过140字符的完整推文内容了!
内容的提问来源于stack exchange,提问作者Varad Bhatnagar
相关产品推荐
相关产品推荐

