如何在Tweepy StreamingClient中获取用户名?(v4.10.1版本)
解决Tweepy StreamingClient无法获取用户名的问题
你的代码里有几个问题导致拿不到用户名,修正方案如下:
问题分析
- 拼写错误:代码里的
tweet.inlcudes少了字母c,正确写法是tweet.includes - 方法用错:
on_tweet方法只接收单条Tweet对象,没法直接获取扩展的用户数据,得用on_response方法处理完整响应 - 属性不存在:Tweet对象本身没有
user属性,用户信息存在响应的includes字段里,需要通过推文的author_id去匹配
修正后的代码
from tweepy import StreamingClient, StreamRule class TweetStreamerV2(StreamingClient): def on_response(self, response): # 获取推文主体 tweet = response.data if not tweet: return # 从includes里取出用户列表 users = response.includes.get('users', []) # 用author_id匹配对应的用户 target_user = next((user for user in users if user.id == tweet.author_id), None) if target_user: print(f"用户名: {target_user.username}") print(f"推文内容: {tweet.text}") print(f"创建时间: {tweet.created_at}") else: print("未找到该推文的用户信息") streamer = TweetStreamerV2(bearer_token) # 注意:如果之前加过相同规则,先删除避免重复接收 # streamer.delete_rules(ids=[已存在的规则ID]) rule = StreamRule(value="xxx") streamer.add_rules(rule) # 启动流,保留你原来指定的扩展字段 streamer.filter(expansions="author_id", tweet_fields="created_at", user_fields="username")
补充说明
on_response能拿到完整的API响应,其中response.data是推文内容,response.includes包含你请求扩展的用户数据- 用
next()函数快速匹配用户,避免遍历整个列表 - 如果重复添加相同规则,会导致重复推流,建议定期清理旧规则
内容的提问来源于stack exchange,提问作者CryptoTioSam
相关产品推荐
相关产品推荐

