我正在使用Tweepy库进行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()
答案 0 :(得分:1)
Tweepy python库API不支持您正在寻找的行为。无法修改与订阅的流关联的参数。
事实上,Twitter API本身并不支持在流中改变参数。他们甚至在警告它。这并不是说它不可能使它发挥作用(只是要小心并避免超过速率限制)。
我调整你的方法来使用新的查询参数初始化第二个流,使用tweet id避免传递/持续相同的推文两次,然后一旦第二个流建立你就关闭了初始流。
答案 1 :(得分:1)
如果您想在特定条件/要求的推文数量上停止推文,请修改self.num_tweets = 0
并保持计数。您可以在def on_status