使用 tweepy
python 库,如何在 x 秒后停止流式传输推文?StreamListener
中的 tweepy.streaming
不断收集数据,直到用户手动关闭程序。但是,我只想在用户定义的时间间隔内收集推文。
最佳答案
有多种方法可以解决这个问题——多线程和创建用户定义的 StreamListener
。我将重点介绍解决这个问题的一种方法,并解释为什么我觉得它是最好的。
除非您想覆盖内置功能(用于存储推文),否则无需创建任何用户定义的类实例
import tweepy
import time
from tweepy import Stream, StreamListener, OAuthHandler
'''Authenticate user'''
CONSUMER_KEY = 'xxxxxx'
CONSUMER_SECRET = 'xxxxxx'
auth = OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
'''How long do you want to stream tweets (in seconds)'''
runtime = 60 #this means one minute
'''Start streaming'''
twitterstream = Stream(auth, StreamListener())
twitterstream.filter(track=['twitter'], async=True) #apply any filter you want
time.sleep(runtime) #halts the control for runtime seconds
twitterstream.disconnect() #disconnect the stream and stop streaming
这是一个简单而优雅的解决方案,适用于所有流。不涉及(复杂的)多线程。
我在 stackoverflow 和许多其他网站上发现的另一种常用方法是在用户定义的
StreamListener
中启动计时器并检查 self.on_data()
方法中是否超过了时间限制。虽然这对于大量流来说是一个巧妙的技巧,但它仅在流接收推文时检查是否超过了时间限制。如果您正在流式传输低容量流(当没有多少人使用您应用的过滤器发推文时),这可能是一个非常大的问题。关于python - 如何在时间间隔后停止流式传输推文?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41325743/