【问题标题】:How to stop streaming tweets after a time interval?如何在一段时间后停止流式推文?
【发布时间】:2017-05-10 14:14:57
【问题描述】:

使用tweepy python 库,如何在 x 秒后停止流式推文?

来自tweepy.streamingStreamListener 不断收集数据,直到用户手动关闭程序。但是,我只想在用户定义的时间间隔内收集推文。

【问题讨论】:

  • 很多人都有同样的问题,但没有合适的解决方案。所以我决定发布我自己的 hack 来解决这个问题。

标签: python streaming tweepy


【解决方案1】:

有多种方法可以解决这个问题——多线程和创建用户定义的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() 方法中检查是否超过了时间限制。虽然这是对大容量流的巧妙破解,但它仅在流接收到推文时检查时间限制。如果您正在流式传输低容量流(当没有多少人使用您应用的过滤器发推文时),这可能是一个非常大的问题。

【讨论】:

  • 能否告诉我如果我不停止流调用断开连接会导致应用暂停等问题。
  • @JahangirAlam 我不确定,尤其是使用更新的 Twitter API。我怀疑您的应用程序将被“暂停”。您更有可能会受到速率限制,并且在冷却后才能连接到 Twitter API。
  • 感谢您的回复。为了澄清起见,当我运行 stream.filter() 时,会创建一个持久连接,对吗?如果它创建单个连接,那么为什么应用程序会被暂停和速率限制。另一个查询是当我运行流和消费推文时,我看到我的每月推文上限没有改变。提前感谢您的宝贵时间。
  • 我的运气不好,我使用了你提到的 twitterstream.disconnect()。但是我的应用程序昨天被暂停了。我没有找到解决这个问题的方法。变得绝望:(
  • 抱歉回复晚了。但是我在 2016 年使用了他们的 API,不确定在您的特定情况下发生了什么。在存储库上打开问题可能会更好 - github.com/tweepy/tweepy
猜你喜欢
  • 1970-01-01
  • 2015-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多