无法导入StreamListener

11

我正在尝试使用Twitter API在Python中创建数据流,但我无法正确导入StreamListener

以下是我的代码:

import tweepy
from tweepy import Stream
from tweepy.streaming import StreamListener

class MyListener(StreamListener):
 
    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 = Stream(auth, MyListener())
twitter_stream.filter(track=['#python'])

我遇到了这个错误:

Traceback (most recent call last):
  File "c:\Users\User\Documents\GitHub\tempCodeRunnerFile.python", line 6, in <module>
    from tweepy.streaming import StreamListener
ImportError: cannot import name 'StreamListener' from 'tweepy.streaming' (C:\Users\User\AppData\Local\Programs\Python\Python39\lib\site-packages\tweepy\streaming.py)
3个回答

15

Tweepy v4.0.0昨天发布,将StreamListener合并到了Stream中。

我建议您更新代码,改为继承Stream
或者,您可以降级至v3.10.0。


6

对于Tweepy v4,你不需要使用StreamListener。以下是v4的编辑代码:

import tweepy

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 here", "Consumer Secret here",
  "Access Token here", "Access Token Secret here"
)
twitter_stream.filter(track=['#python'])

1
稍微调整一下就能解决这个问题。
#from tweepy.streaming import StreamListener #OLD CODE

import tweepy # NEW CODE

#class TweetListener (StreamListener): #OLD CODE

class TweetListener (tweepy.Stream): # NEW CODE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接