我正在与Tweepy Library合作,以供Python访问公共Twitter流,并遇到一个问题,一旦流运行,它就不会停止。现在,这对于它的作用是有意义的,但是我希望它开始使用空用户ID列表进行过滤,并且一段时间后,在某人发布特定的曲目Word之后,将用户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不支持您想要的行为。无法修改与要订阅的流相关的参数。
实际上,Twitter API本身不支持中途更改参数。他们直到警告它。这并不是说不可能使它起作用(只是要保持警惕并避免超过费率限制)。
我会调整您的方法,以初始化新查询参数的第二流,使用Tweet ID避免传递/持久使用相同的推文两次,然后建立第二流后,您将关闭初始流。
如果要在一定条件/要求上停止推文,请编辑 self.num_tweets = 0
并保持计数。您可以将其用作限制器,在def on_status