使用 Tweepy 避免速率限制从 API 获取最后一次 Twitter 提及
Get last Twitter mention from API with Tweepy avoiding rate limit
我曾经有一些很好的工作 python 可以在 Tweepy 流监听器上自动回复,但是由于 Twitter API 在 8 月份发生了变化,它不再工作了。
我正在重新构建它,每 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 可能有一个更好的方法,我可以在不达到速率限制的情况下更频繁地做?
回答
使用 tweepy:否
使用其他方法:是的,但不是免费的
说明
首先要了解的是,Twitter 确实允许通过他们的 API 实时流式传输推文。接下来的事情是可以使用他们的 API 来跟踪包含一些 @TrackedUsername
的推文,以实时跟踪提及。然而,虽然第一个功能可以通过许多库和包装器 APIs 免费使用,但第二个功能却不是。这是他们锁定在每月订阅高级版或企业版后的功能之一api。
我所知道的是,人们不会使用分布式的 tweepy 来利用这些服务。也许外面有人修改了它以供个人使用以兼容这些功能,但如果是的话我还没有找到它。人们使用的是 Python Twitter API.
推测
由于我自己从未使用过他们的高级服务,因此值得阅读我接下来要说的内容,但据我了解,他们的付费使用服务的身份验证协议略有不同,这就是导致 tweepy 出现问题。
回归事实
基本上这意味着搜索 @TrackedUsername
将 return 什么都没有,而搜索 TrackedUsername
将不会 return 包含 @TrackedUsername
的推文或 #TrackedUsername
(除非它也只包含 TrackedUsername
,但你跟踪的是文本而不是提及)。主要是因为 Twitter 想通过这项服务获得报酬。
如果您确实选择为此服务付费,那么最常用的 python 实现是如上所述的 Python Twitter API。这些功能将允许您以更高的速率限制实时跟踪包含提及的推文,并支持更远地搜索过去的推文。
我曾经有一些很好的工作 python 可以在 Tweepy 流监听器上自动回复,但是由于 Twitter API 在 8 月份发生了变化,它不再工作了。
我正在重新构建它,每 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 可能有一个更好的方法,我可以在不达到速率限制的情况下更频繁地做?
回答
使用 tweepy:否
使用其他方法:是的,但不是免费的
说明
首先要了解的是,Twitter 确实允许通过他们的 API 实时流式传输推文。接下来的事情是可以使用他们的 API 来跟踪包含一些 @TrackedUsername
的推文,以实时跟踪提及。然而,虽然第一个功能可以通过许多库和包装器 APIs 免费使用,但第二个功能却不是。这是他们锁定在每月订阅高级版或企业版后的功能之一api。
我所知道的是,人们不会使用分布式的 tweepy 来利用这些服务。也许外面有人修改了它以供个人使用以兼容这些功能,但如果是的话我还没有找到它。人们使用的是 Python Twitter API.
推测
由于我自己从未使用过他们的高级服务,因此值得阅读我接下来要说的内容,但据我了解,他们的付费使用服务的身份验证协议略有不同,这就是导致 tweepy 出现问题。
回归事实
基本上这意味着搜索 @TrackedUsername
将 return 什么都没有,而搜索 TrackedUsername
将不会 return 包含 @TrackedUsername
的推文或 #TrackedUsername
(除非它也只包含 TrackedUsername
,但你跟踪的是文本而不是提及)。主要是因为 Twitter 想通过这项服务获得报酬。
如果您确实选择为此服务付费,那么最常用的 python 实现是如上所述的 Python Twitter API。这些功能将允许您以更高的速率限制实时跟踪包含提及的推文,并支持更远地搜索过去的推文。