ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-单击按钮时停止stream.filter()

2019-11-20 17:55:44  阅读:279  来源: 互联网

标签:flask tweepy python


我正在使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有