我正在尝试使用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/
所以,我也有这个问题。幸运的是Tweepy是开源的,所以很容易解决这个问题。
基本上重要的部分是这样的:
def _data(self, data):
if self.listener.on_data(data) is False:
self.running = False
streaming.py中的流类
这意味着,要关闭连接,您只需在侦听器的on_data()方法上返回false。
访问变量myListener。运行,但不是直接将MyListener传递给Stream,而是创建一个变量,如下所示:
myListener = MyListener()
timeout code here... suchas time.sleep(20)
myListener.running = False
>
为了关闭流,您需要从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需要一个额外的参数。