响应状态码429出现Tweepy错误

时间:2017-12-13 02:02:18

标签: python tweepy

我正在使用tweepy API来提取推文并将其显示在网页上。虽然我每隔1小时自动刷新代码以提取推文,但在代码连续运行大约24小时后,我最终会遇到以下TweepError。 错误:

  

tweepy.error.TweepError:Twitter错误响应:状态代码= 429

我知道这段代码意味着对API的请求太多了。有没有办法处理这个错误?我甚至尝试将刷新率间隔增加到2小时,但似乎仍然无法正常工作。

以下是提取推文并以CSV格式存储的代码:

def extract_tweet(self):
   consumer_key = 'XXX'
   consumer_secret = 'XXX'
   access_token = 'YYY'
   access_token_secret = 'YYY'

   auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
   auth.set_access_token(access_token, access_token_secret)

   api = tweepy.API(auth)

   csvFile = open('HELLOTWITTER.csv', 'w',  newline='', encoding='utf-8')
   csvWriter = csv.writer(csvFile)
   for tweet in tweepy.Cursor(api.search,q="#cybersecurity OR #InfoSec", since="2017-10-20",lang="en").items(10):    
       csvWriter.writerow([tweet.text, tweet.created_at])
   csvFile.close()

我查看了API文档并偶然发现了 wait_on_rate_limit ,但还没有理解这是否是此错误的解决方案。 请帮忙!感谢。

1 个答案:

答案 0 :(得分:2)

有几种方法可以实现重试装饰器。重试装饰器查看方法中是否引发异常。以下示例使用指数退避重试。这将在每次重试之间等待2 ^ x * 1000毫秒,最多10秒,然后等待10秒,其中x是重试次数。

from retrying import retry

@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000)
def extract_tweet(self):
    consumer_key = 'XXX'
    consumer_secret = 'XXX'
    access_token = 'YYY'
    access_token_secret = 'YYY'

    try:
        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_token, access_token_secret)

        api = tweepy.API(auth)

        csvFile = open('HELLOTWITTER.csv', 'w',  newline='', encoding='utf-8')
        csvWriter = csv.writer(csvFile)

        for tweet in tweepy.Cursor(api.search,q="#cybersecurity OR #InfoSec", since="2017-10-20",lang="en").items(10):    
          csvWriter.writerow([tweet.text, tweet.created_at])
          csvFile.close()
    except tweepy.error.TweepError:
          raise