我尝试使用Twitter Streaming API接收推文。
昨天,经过多次测试,Twitter API返回了错误420。我读了一些主题和文件,问题是我在短时间内建立了很多联系。
from tweepy import Stream, API
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import json
# All API keys / access token
consumer_key = "something"
consumer_secret_key = "something"
access_token = "something"
access_token_secret = "something"
proxies = {
"http": "my_http_proxy",
"https": "my_https_proxy"
}
class Listener(StreamListener):
def on_status(self, status):
print("text : " + str(status))
def on_error(self, status):
if status == 420:
print("error : {}".format(str(status)))
return False
auth = OAuthHandler(consumer_key, consumer_secret_key)
auth.set_access_token(access_token, access_token_secret)
api = API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
listener = Listener()
twitterStream = Stream(api.auth, listener=listener, proxies=proxies)
try:
twitterStream.filter(track=['nasa'])
except Exception as e:
print("...end : {}".format(e))
twitterStream.disconnect()
twitterStream.disconnect()
我想了解:
- 如何避免此错误
- 我需要等待多长时间才能再次请求API
- 这个API的标准帐户的限额是多少
非常感谢您的回复。
Twitter的API返回420 HTTP状态代码
当一个应用程序因发出过多请求而受到费率限制时。
请参阅https://developer.twitter.com/en/docs/basics/response-codes.
具体而言,对于流式传输端点:
HTTP 420错误呈指数级回退。从等待1分钟开始,每次尝试加倍。请注意,收到的每一个HTTP 420都会增加您必须等待的时间,直到您的帐户不再有效。
不实现回退并尝试尽可能频繁地重新连接的客户端的连接速率将在几分钟内受到限制。速率受限的客户端将接收针对所有连接请求的HTTP 420响应。
断开连接然后频繁重新连接(例如,更改查询参数(的客户端会面临速率受限的风险。
Twitter没有公开连接尝试的次数,这将导致速率限制,但对测试和开发有一定的容忍度。不时尝试几十次连接不会触发限制。然而,如果接收到HTTP 420响应,则必须在几分钟内停止进一步的连接尝试。如果你的客户端经常受到费率限制,你的IP可能会在一段不确定的时间内被阻止访问Twitter。
请参阅https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/connecting.