通过Tweepy避免速率限制,从API获得最新的Twitter提及

时间:2018-10-28 12:21:53

标签: python python-2.7 twitter tweepy rate-limiting

我曾经有一些运行良好的python,它可以在Tweepy流侦听器上自动回复,但是由于8月Twitter API的更改,它不再起作用。

我正在重新构建它,方法是每10秒获得一次最近的提及(理想情况下,因为我想立即做出答复,所以要少一些),然后检查它是否在最近的十秒之内...然后脚本假定这是一条新推文并进行回复。

from tweepy import OAuthHandler
from tweepy import API
from datetime import datetime, time, timedelta

consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''
account_screen_name = ''
account_user_id = '897579556009332736'

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
twitterApi = API(auth)

mentions = twitterApi.mentions_timeline(count=1)
now = datetime.now()

for mention in mentions:
    if now < (mention.created_at + timedelta(hours=1) + timedelta(seconds=10)):
        print "there's a mention in the last 10 seconds"
        # do magic reply stuff here!
    else:
        print "do nothing, no recent tweets/the last mention was more than 10 seconds ago so it isn't new"

这可以每12秒循环一次;但越少越好,并且达到了速率限制(即,此方法在10秒以上最终会达到速率限制)...因此,是否有更好的方法来检索最近提及的内容,以便根据提到?我觉得我可能以一种非常低效的方式来执行此操作(例如,该方法实际上得到了最后20次提及!!),并且API可能具有一种更好的方法,可以在不达到速率限制的情况下更频繁地执行该操作?

1 个答案:

答案 0 :(得分:2)

答案

使用tweepy:否

使用其他方法:是,但不是免费的

说明

首先要了解的是,twitter确实允许通过其API实时发送tweet。接下来的事情是,可以使用它们的API来跟踪包含一些@TrackedUsername的tweet,以实时记录提及。但是,虽然可以通过许多库和包装器API自由使用第一个功能,但第二个功能则不能。这是其每月付费订阅高级或企业api的功能之一。

我知道的是,人们不会使用分布式的tweepy来利用这些服务。也许有人修改了它以便与这些功能兼容以供个人使用,但是如果是这样,我还没有找到它。人们使用的是Python Twitter API

推测

由于我从来没有亲自使用过他们的高级服务,因此有必要读一下我接下来要说的内容,但是据我了解,他们的付费使用身份验证协议略有不同,这是导致问题的原因tweepy。

返回事实

从本质上讲,这意味着搜索@TrackedUsername根本不会返回任何内容,而搜索TrackedUsername则不会返回包含@TrackedUsername#TrackedUsername的推文(除非也如此)仅包含TrackedUsername,但是您正在跟踪文本而不是提及内容)。基本上是因为Twitter希望为此服务付费。

如果您选择为此服务付费,则如上所述,最常用的python实现是Python Twitter API。这些功能使您可以实时跟踪包含提及内容的推文,并具有较高的速率限制,并支持搜索更远的过去的推文。