python-单击按钮时停止stream.filter()
作者:互联网
我正在使用tweepy流推文并将其存储在文件中.我正在使用python和flask.单击按钮,流开始获取推文.我想要的是,单击按钮应停止流.
我知道与计数器变量有关的答案,但我不希望获取特定数量的tweet.
提前致谢
def fetch_tweet():
page_type = "got"
lang_list = request.form.getlist('lang')
print lang_list
#return render_template("index.html",lang_list=lang_list,page_type=page_type)
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
with open('hashtags.txt') as hf:
hashtag = [line.strip() for line in hf]
print hashtag
print request.form.getlist('fetchbtn')
if (request.form.getlist('stopbtn')) == ['stop']:
print "inside stop"
stream.disconnect()
return render_template("analyse.html")
elif (request.form.getlist('fetchbtn')) == ['fetch']:
stream.filter(track=lang_list, async=True)
return render_template("fetching.html")
解决方法:
所以我假设您的初始按钮链接到tweepy流的初始化(即,对stream.filter()的调用).
如果要允许您的应用程序在tweet收集发生时运行,则需要异步收集(线程化)tweets.否则,一旦您调用stream.filter(),它将在收集推文时锁定您的程序,直到达到您提供的某种条件或ctrl-c out等为止.
要利用tweepy的内置线程,只需要将async参数添加到流初始化中,如下所示:
stream.filter(track=['your_terms'], async=True)
这将使您的tweet集合成为线程,并允许您的应用程序继续运行.
最后,要停止您的tweet收集,请将flask调用链接到在流对象上调用connect()的函数,如下所示:
stream.disconnect()
这将断开您的信息流并停止收集鸣叫. Here是更面向对象的设计中这种精确方法的示例(请参阅Pyckaxe对象中的collect()和stop()方法).
编辑-好的,我现在可以看到您的问题,但是我将把原来的答案留给可能会发现此问题的其他人.您所发出的问题是您要创建流对象的位置.
每次通过flask调用fetch_tweet()时,您都在创建一个新的流对象,因此,当您第一次调用它来启动流时,它将创建一个初始对象,但是第二次它在另一个流对象上调用disconnect(). .创建流的单个实例将解决此问题:
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
def fetch_tweet():
with open('hashtags.txt') as hf:
hashtag = [line.strip() for line in hf]
print hashtag
print request.form.getlist('fetchbtn')
if (request.form.getlist('stopbtn')) == ['stop']:
print "inside stop"
stream.disconnect()
return render_template("analyse.html")
elif (request.form.getlist('fetchbtn')) == ['fetch']:
stream.filter(track=lang_list, async=True)
return render_template("fetching.html")
简而言之,您需要在fetch_tweets()之外创建流对象.祝好运!
标签:flask,tweepy,python 来源: https://codeday.me/bug/20191120/2045860.html