使用 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/

10-13 03:44