我尝试使用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()
我想了解:
非常感谢您的回复。
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。