当前位置: 首页 > 知识库问答 >
问题:

一分钟后无法停止tweepy中的流媒体

翟淮晨
2023-03-14

我正在尝试使用Stream.filter()方法将twitter数据流式传输一段时间,比如5分钟。我正在将检索到的推文存储在JSON文件中。问题是我无法从程序中停止过滤器()方法。我需要手动停止执行。我尝试使用时间包根据系统时间停止数据。我能够停止向JSON文件写入推文,但流方法仍在继续,但它无法继续到下一行代码。我正在使用IPython笔记本编写和执行代码。代码如下:

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)

from tweepy import Stream
from tweepy.streaming import StreamListener

class MyListener(StreamListener):

    def __init__(self, start_time, time_limit=60):
        self.time = start_time
        self.limit = time_limit

    def on_data(self, data):
        while (time.time() - self.time) < self.limit:
            try:
                saveFile = open('abcd.json', 'a')
                saveFile.write(data)
                saveFile.write('\n')
                saveFile.close()
                return True
            except BaseException as e:
                print 'failed ondata,', str(e)
                time.sleep(5)
        return True

    def on_status(self, status):
        if (time.time() - self.time) >= self.limit:
            print 'time is over'
            return false

    def on_error(self, status):
        if (time.time() - self.time) >= self.limit:
            print 'time is over'
            return false
        else:
            print(status)
            return True

start_time = time.time()
stream_data = Stream(auth, MyListener(start_time,20))
stream_data.filter(track=['name1','name2',...list ...,'name n'])#list of the strings I want to track

这些链接是相似的,但我不会直接回答我的问题

tweepy:X分钟的数据流?

在持续时间参数(#lines、seconds、#Tweets等)后停止Tweepy steam

Tweepy流媒体-停止以x数量收集推文

我用这个链接作为参考,http://stats.seandolinar.com/collecting-twitter-data-using-a-python-stream-listener/

共有3个答案

商曦
2023-03-14

所以,我也有这个问题。幸运的是Tweepy是开源的,所以很容易解决这个问题。

基本上重要的部分是这样的:

def _data(self, data):
    if self.listener.on_data(data) is False:
        self.running = False

streaming.py中的流类

这意味着,要关闭连接,您只需在侦听器的on_data()方法上返回false。

卫学真
2023-03-14

访问变量myListener。运行,但不是直接将MyListener传递给Stream,而是创建一个变量,如下所示:

myListener = MyListener()
timeout code here... suchas time.sleep(20)
myListener.running = False 
陆仲渊
2023-03-14

>

  • 为了关闭流,您需要从on_data()on_status()<-code>返回

    因为<代码>镊子。Stream()本身运行while循环,您不需要on_data()<-code>中的while环。

    初始化 MyListener 时,您没有调用父级的类__init__方法,因此它未正确初始化。

    因此,对于您要做的事情,代码应该是这样的:

    class MyStreamListener(tweepy.StreamListener):
        def __init__(self, time_limit=60):
            self.start_time = time.time()
            self.limit = time_limit
            self.saveFile = open('abcd.json', 'a')
            super(MyStreamListener, self).__init__()
    
        def on_data(self, data):
            if (time.time() - self.start_time) < self.limit:
                self.saveFile.write(data)
                self.saveFile.write('\n')
                return True
            else:
                self.saveFile.close()
                return False
    
    myStream = tweepy.Stream(auth=api.auth, listener=MyStreamListener(time_limit=20))
    myStream.filter(track=['test'])
    

  •  类似资料:
    • 我正在尝试使用TkinterGUI使用python/tweepy来流式传输推文。理想情况下,我会有一个启动流的“开始”按钮和一个停止流的“停止”按钮。下一个示例(来自stackoverflow)以一种简化的方式展示了我试图实现的目标: 我试图将此应用到我的代码中,开始按钮工作正常,完成了它应该做的所有事情,但停止按钮没有做任何事情。窗口没有冻结或任何东西,只是停止按钮没有效果。由于什么事也没有发生

    • 问题内容: 我正在将X#条tweets存储在MongoDB中之后,希望Tweepy Streaming API停止提取tweets。 我已经在类中尝试了IF和WHILE语句,并用计数器定义,但是无法使其停止在一定的X量处。对我来说这真是个危险。我在以下位置找到了此链接:https : //groups.google.com/forum/#!topic/tweepy/5IGlu2Qiug4, 但是我

    • 我已经在上安装了Sonar,所有先决条件都是Mysql和Java。在控制台模式下启动服务时,将出现以下错误消息: 甚至,wrapper.properties文件中也配置了Java环境变量,但问题仍然存在。 来人,帮我解决这个问题。 在下面的wrapper.java.command(wrapper.properties)中设置Java路径后,将出现错误。 正在运行索纳库贝...包装器-->包装器作为

    • 我试了很多,但都没找到,所以我希望你能帮助我。 我正在尝试构建我自己的语音识别应用程序,它不会显示对话框。 我已经编写了一些代码,它工作得很好,但我的问题是,识别器似乎停止了,而LogCat中没有任何错误或其他消息。 一个奇怪的事实是,“RecognitionListener”接口中的“onRmsChanged”仍然一直被调用,但不再调用“onBeginningOfSpeech”。 如果我在语音识

    • 我使用的代码类似于下面的代码,来自:https://github.com/tweepy/tweepy/blob/master/examples/streaming.py 该API允许您跟踪多个过滤器术语,在本例中track=['usa','canada']。这基本上意味着该流将收集提到“加拿大”或“美国”的推文。 问题是函数on_data()打印数据,但是它没有指定数据属于哪个过滤条件。当您只按一

    • 我希望Tweepy Streaming API在我将x#条推文存储在MongoDB中后停止推文。 我尝试了类内的IF和WHILE语句,用计数器定义,但不能让它停止在一定的X量。这对我来说是一个真正的爆头。我在这里找到了这个链接:https://groups.google.com/forum/#!Tweepy/5IGlu2qiug4但是我复制这个的努力失败了。它总是告诉我init需要一个额外的参数。