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

基于Tweepy StreamListener的Twitter bot触发推文无响应问题

解决你的Twitter Bot无响应问题

看起来你的Bot逻辑方向是对的,但几个关键细节没处理到位,导致它没法正常监听目标账号的推文。我帮你逐一排查并修复:

1. 监听器实例传递错误

你已经创建了myStreamListener对象,但初始化tweepy.Stream时却重新实例化了MyStreamListener(),这会导致你定义的on_status方法没被真正使用。应该传入已经创建好的myStreamListener实例。

2. 错误使用track参数

track参数是用来监听包含指定关键词的所有推文,而你要监听特定用户的推文,应该改用follow参数,并且需要传入目标用户的数字ID(不是屏幕名)。你可以通过以下代码获取目标用户的ID:

user = api.get_user(screen_name='xxxxxx')
print(user.id_str)

3. Listener内部无法访问api对象

在MyStreamListener的on_status方法里直接调用api.update_status会有问题,因为类内部没有持有api的引用。需要在初始化Listener时把api对象传进去并保存。

4. Python版本兼容性(可选)

你的代码用了Python2的print语法(无括号),如果后续切换到Python3环境会报错,建议改成兼容写法print("Test Message")。


修正后的完整代码

import tweepy
import time

# 替换成你的API密钥
consumer_key = 'xxxxxxx'
consumer_secret = 'xxxxxxxx'
access_token = 'xxxxxxx'
access_token_secret = 'xxxxxxxx'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
auth.secure = True

print("Test Message")
api = tweepy.API(auth)

class MyStreamListener(tweepy.StreamListener):
    def __init__(self, api):
        self.api = api  # 保存API实例到类内部
        super().__init__(api)

    def on_status(self, status):
        # 检查推文作者的屏幕名(统一转小写避免大小写问题)
        if status.user.screen_name.lower() == 'xxxxxx':
            # 避免Bot转发自己的推文(可选但推荐)
            if status.user.id != self.api.me().id:
                try:
                    self.api.update_status('Test Tweet')
                    print("Bot successfully sent a tweet!")
                except tweepy.TweepError as e:
                    print(f"Error sending tweet: {e.reason}")

# 初始化Listener并传入API对象
myStreamListener = MyStreamListener(api)
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)

# 替换成你获取到的目标用户数字ID
target_user_id = '123456789'
# 使用follow参数监听目标用户的推文
myStream.filter(follow=[target_user_id])

额外注意事项

  • API权限检查:确保你的Twitter开发者项目已经开启了读写权限(默认是只读),否则无法发布推文。可以在开发者平台的「项目设置」里修改权限。
  • 错误捕获:加上tweepy.TweepError的捕获,能帮你排查比如重复推文、限流等问题。
  • 测试验证:修改后先手动给目标账号发一条测试推文,查看控制台输出,确认Bot是否进入on_status方法并成功发推。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:03:50