Python 处理Tweepy api返回的420响应代码

Python 处理Tweepy api返回的420响应代码,python,twitter,error-handling,tweepy,twitter-streaming-api,Python,Twitter,Error Handling,Tweepy,Twitter Streaming Api,每当用户登录到我的应用程序并进行搜索时,我都必须启动流式API来获取他所需的数据 这是我的流API类 这是我的python代码文件,它调用上面的类来启动Twitter流 但是,如果我点击两次以上,我的应用程序将返回错误代码420。 我想在发生错误时使用多个用于获取数据的键来更改API420 如何通过Twitter获取def callStream中TweetListener类的on_error方法引发的错误 当应用程序因制作过多而受到速率限制时返回 请求 Twitter流式API不支持每个用户和I

每当用户登录到我的应用程序并进行搜索时,我都必须启动流式API来获取他所需的数据

这是我的流API类

这是我的python代码文件,它调用上面的类来启动Twitter流

但是,如果我点击两次以上,我的应用程序将返回错误代码420。 我想在发生错误时使用多个用于获取数据的键来更改API420

如何通过Twitter获取def callStream中TweetListener类的on_error方法引发的错误

当应用程序因制作过多而受到速率限制时返回 请求


Twitter流式API不支持每个用户和IP地址的多个连接。使用多个应用程序密钥试图绕过此漏洞是违反Twitter开发者政策的,如果您这样做,您的应用程序可能会被挂起

我想补充一下@Andy Piper的答案。响应420表示您的脚本发出的请求太多,并且速率受到限制。为了解决这个问题,我在TweetListener类中做了以下工作:

def on_limit(self,status):
    print ("Rate Limit Exceeded, Sleep for 15 Mins")
    time.sleep(15 * 60)
    return True
这样做,错误就会得到处理

如果您坚持使用多个键。我不确定,但尝试在TweetListener和streamer上处理异常,例如tweepy.error.RateLimitError,并使用下一个API键递归调用函数

def callStream(key):
    #authenticate the API keys here
    try:
        tweetListener = TweetListener(userid,projectid)
        streamer = tweepy.Stream(api.auth, tweetListener)
        streamer.filter(track=hashtags, async=True)
    except tweepy.TweepError as e:
        if e.reason[0]['code'] == "420":
            callStream(nextKey)
    return True

很抱歉,TweetListener类没有返回任何要在您提到的上述定义中捕获的内容,也没有返回多次请求的内容。sleep15*60不是一个合适的解决方案,在这里,my使用现有键提出一个新请求,因此这没有帮助。我无法从TweetListener类获得任何响应代码,这是其中的主要问题。on_limit解决方案似乎也不适合我。我使用了它,但仍然得到420错误和on_limit函数被绕过。它不会打印字符串。这个函数到底是做什么的,它是如何被调用的?我同意你提到的twitter的限制,我正在开发一个poc,为了证明应用程序在功能上是正确的,我使用了这个方法,对于完整版本的应用程序,我将从twitter购买密钥。
def on_limit(self,status):
    print ("Rate Limit Exceeded, Sleep for 15 Mins")
    time.sleep(15 * 60)
    return True
def callStream(key):
    #authenticate the API keys here
    try:
        tweetListener = TweetListener(userid,projectid)
        streamer = tweepy.Stream(api.auth, tweetListener)
        streamer.filter(track=hashtags, async=True)
    except tweepy.TweepError as e:
        if e.reason[0]['code'] == "420":
            callStream(nextKey)
    return True