使用Tweepy从API获取最新的Twitter提及,并避免速率限制。

6

我曾经使用过一些可靠的Python代码,可以在Tweepy流监听器上实现自动回复功能,但由于Twitter API在八月份进行了更改,它已经不再起作用。

我正在重新构建它,每10秒获取我的最新提及(理想情况下它应该是小于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个回答

3

答案

使用 tweepy:否

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

解释

首先要明白的是,Twitter API 允许实时流式传输推文。其次,可以使用他们的 API 来跟踪包含某个 @TrackedUsername 的推文,以实时跟踪提及。然而,虽然第一个功能可以通过多个库和封装的 API 免费使用,但第二个功能却不行。这是他们的一项功能,需要每月订阅他们的高级或企业 API。

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

猜测

由于我自己从未使用过他们的付费服务,因此值得阅读一下我接下来要说的内容,但据我所知,他们的付费服务的身份验证协议略有不同,这就是 tweepy 出现问题的原因。

回到事实

本质上,这意味着搜索 @TrackedUsername 将不会返回任何内容,而搜索 TrackedUsername 将不会返回包含 @TrackedUsername#TrackedUsername 的推文(除非它还包含只有 TrackedUsername 但这样你就是跟踪文本而不是提及)。基本上是因为 Twitter 想要收费。

如果您选择支付此服务,则最常用的 Python 实现是Python Twitter API,如上所述。这些功能将允许您以更高的速率限制和支持搜索过去的推文来实时跟踪包含提及的推文。


基本上,Twitter正在收紧其免费API服务 :( - the_t_test_1
@the_t_test_1 基本上是这样。目前很多服务都会收取API访问的费用。我使用Roll20来与远方的朋友进行桌游,但如果不订阅每月的“高级”会员,就无法使用他们的开发工具。最近一直在考虑是否要订阅。 - Thunderwood
@the_t_test_1 据我所知,您仍然可以使用 Twitter 流服务。但它更适合个人使用。我不完全确定所有可用功能,但文档已经上传到 Twitter 的开发网站上,最后我检查了一下,肯定还有一些流媒体功能。我非常确定您链接的应用程序之所以遭受打击,是因为它们试图流式传输比任何一个(普通)人都要多得多的内容。他们正在为其应用程序的所有用户进行流媒体传输。根据使用这些流媒体拉取的内容,这可能会对 Twitter 服务器造成很大的压力。 - Thunderwood
我可能对他们关闭的原因非常错误,但我知道很多个人使用的东西仍然是免费的或者价格非常实惠。 - Thunderwood
谢谢提供信息...然而我的应用程序只是监听账户用户名的提及(以便立即回复)...据我所知,它并没有过度使用或任何可能构成垃圾邮件/超载的情况。它仅用于一个账户,自动回复任何在该账户上发推文的人。 - the_t_test_1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接