Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tweepy公共流过滤器(通过更改变量)_Python_Twitter_Filter_Stream_Tweepy - Fatal编程技术网

Python Tweepy公共流过滤器(通过更改变量)

Python Tweepy公共流过滤器(通过更改变量),python,twitter,filter,stream,tweepy,Python,Twitter,Filter,Stream,Tweepy,我使用Tweepy library for python访问公共twitter流时遇到了一个问题,即流一旦运行,就不会停止。现在,这对它的功能来说是有意义的,但我希望它开始用一个空的用户ID列表进行过滤,过一段时间,用户ID在某人推特一个特定的跟踪词后被添加到列表中,这样一旦他们推特一个词,跟踪器就开始跟踪他们所有的推特。问题是,一旦使用初始过滤器选项启动流,更改变量不会影响过滤器;它只是继续使用初始参数 userIDs = [] trackWords = ["#Obama"] def st

我使用Tweepy library for python访问公共twitter流时遇到了一个问题,即流一旦运行,就不会停止。现在,这对它的功能来说是有意义的,但我希望它开始用一个空的用户ID列表进行过滤,过一段时间,用户ID在某人推特一个特定的跟踪词后被添加到列表中,这样一旦他们推特一个词,跟踪器就开始跟踪他们所有的推特。问题是,一旦使用初始过滤器选项启动流,更改变量不会影响过滤器;它只是继续使用初始参数

userIDs = []

trackWords = ["#Obama"]

def stream():

    s = Stream(auth, StreamListener())

    s.filter(follow = userIDs, track = trackWords)
我可以通过在添加新关键字后再次调用流定义来解决这个问题,但是我有多个流搜索,我将它们放在单独的线程中,以便它们可以同时运行。我不知道如何刷新线程,因此在不调用定义的情况下尝试刷新过滤器似乎更容易

我对编程相当陌生,所以也许这是一个我还不知道的基本概念,但希望有一个简单的技巧让它更新

这是我所有的相关代码,如果这对任何人都有帮助的话。以上只是一个简单的例子,有助于说明我在说什么:

userIDs = []
userNames = []

account = ['@DMS_423']

publicKeyWords = ['the','be','to','of','and','are','is','were','was']

class AStreamListener(StreamListener):
    def on_status(self, status):
        if status.author.screen_name not in userNames:
            userNames.append(str(status.author.screen_name))
            userIDs.append(str(api.get_user(str(status.author.screen_name)).id))
            print status.author.screen_name, "has joined the game."

def uStream():
    s = Stream(auth, StreamListener())
    s.filter(follow = userIDs)

def pStream():
    ps = PStream(pAuth, PStreamListener())
    ps.filter(track = publicKeyWords)

def aStream():
    adds = Stream(auth, AStreamListener())
    adds.filter(track = account)

t1 = Thread(target = aStream)
t2 = Thread(target = uStream)
t3 = Thread(target = pStream)

def run():
    t1.start()
    t2.start()
    t3.start()

run()

Tweepy python库API不支持您正在寻找的行为。无法修改与订阅的流关联的参数

事实上,twitterapi本身不支持中途更改参数。他们甚至提出了警告。这并不是说它不可能实现(只是要小心,避免超过利率限制)


我会调整您的方法,使用新的查询参数初始化第二条流,使用tweet ID避免两次传递/保留相同的tweet,然后一旦第二条流建立,您将关闭初始流。

如果您想在特定条件/要求的tweet数目的情况下停止tweet,编辑self.num_tweets=0,并对其进行计数。您可以在
def on_status