You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tweepy导出推文内容被截断:如何完整写入文本文件?

解决长推文写入文本文件被截断的问题

嘿,这问题我之前也碰到过!原因其实很简单:Twitter API对超过140字符的长推文,不会把完整内容放在常规的tweet['text']字段里,而是存在专门的extended_tweet结构里。你之前的代码应该没处理这个情况,所以才会被截断。

下面是修正后的完整代码,我帮你考虑了普通长推文、转发长推文的场景,还加了避免乱码的细节:

import json
import tweepy

class MyStreamListener(tweepy.StreamListener):
    def on_data(self, data):
        tweet = json.loads(data)
        
        # 直接获取用户名,不用json.dumps转成字符串
        user = tweet['user']['screen_name']
        
        # 处理不同类型的推文,拿到完整内容
        if 'extended_tweet' in tweet:
            # 普通长推文
            tweet_body = tweet['extended_tweet']['full_text']
        elif 'retweeted_status' in tweet:
            # 处理转发的推文,包括转发的长推文
            retweeted = tweet['retweeted_status']
            if 'extended_tweet' in retweeted:
                tweet_body = f"RT @{retweeted['user']['screen_name']}: {retweeted['extended_tweet']['full_text']}"
            else:
                tweet_body = f"RT @{retweeted['user']['screen_name']}: {retweeted['text']}"
        else:
            # 普通短推文
            tweet_body = tweet.get('text', '')
        
        # 写入文件,用utf-8编码避免表情、特殊字符乱码,追加模式不覆盖之前的内容
        with open('tweets.txt', 'a', encoding='utf-8') as f:
            f.write(f"@{user}: {tweet_body}\n\n")
        
        return True

# 别忘了创建Stream对象时加上tweet_mode='extended'!
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = tweepy.Stream(auth=auth, listener=MyStreamListener(), tweet_mode='extended')

几个关键的点要注意:

  • 必须加tweet_mode='extended'参数:在创建Stream对象时指定这个,Twitter API才会返回长推文的完整内容字段,不然你根本拿不到extended_tweet数据。
  • 区分普通推文和转发推文:转发的长推文内容嵌套在retweeted_status里,得逐层解析。
  • 用utf-8编码写入文件:推文里经常有表情、非英文字符,不加编码很容易乱码。
  • 别乱用json.dumps:用户名和推文内容本身就是字符串,直接用就行,json.dumps会额外给你加引号,反而添乱。

这样修改后,不管多长的推文(包括带链接、表情的)都能完整写入文本文件啦!

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:52:02