Tweepy调用Twitter API创建数据流时无法导入StreamListener如何解决
报错根因
你当前使用的是Tweepy 4.0及以上版本,该版本对底层实现做了不兼容升级,直接移除了旧版本中的StreamListener类,因此会触发导入失败报错。
解决方案
方案一:降级到兼容的旧版本Tweepy
如果不想调整原有代码逻辑,可以直接安装Tweepy 3.x的最终稳定版本:
pip install tweepy==3.10.0
安装完成后原有代码不需要修改即可直接运行,缺点是3.x版本已停止维护,部分新的Twitter API特性不再支持。
方案二:适配Tweepy 4.x+版本的新写法
如果你需要使用新版本的功能,可以直接调整代码适配新的流逻辑,不需要再导入StreamListener:
适配Twitter v1.1 API(和原有代码逻辑完全对齐)
import tweepy # 替换为你自己的开发者密钥 consumer_key = "你的API Key" consumer_secret = "你的API Secret" access_token = "你的Access Token" access_token_secret = "你的Access Token Secret" class MyListener(tweepy.Stream): def on_data(self, data): try: with open('python.json', 'a') as f: f.write(data) return True except BaseException as e: print("Error on_data: %s" % str(e)) return True def on_error(self, status): print(status) return True # 初始化流并启动监听 twitter_stream = MyListener(consumer_key, consumer_secret, access_token, access_token_secret) twitter_stream.filter(track=['#python'])
适配Twitter v2 API(官方推荐新接口)
如果是新申请的开发者账号,更推荐使用新版v2 API,写法如下:
import tweepy import json # 替换为你自己的Bearer Token BEARER_TOKEN = "你的开发者平台Bearer Token" class MyStream(tweepy.StreamingClient): def on_tweet(self, tweet): try: with open('python.json', 'a', encoding='utf-8') as f: f.write(json.dumps(tweet.data) + '\n') return True except BaseException as e: print(f"Error on_data: {str(e)}") return True def on_error(self, status): print(status) return True stream = MyStream(BEARER_TOKEN) # 清理旧规则避免重复监听 old_rules = stream.get_rules().data if old_rules: stream.delete_rules([rule.id for rule in old_rules]) # 添加监听规则 stream.add_rules(tweepy.StreamRule("#python")) # 启动流 stream.filter()
内容的提问来源于stack exchange,提问作者Suvodeep Ghosh
相关产品推荐
相关产品推荐

