Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tweepy错误,响应状态代码为429_Python_Tweepy - Fatal编程技术网

Python Tweepy错误,响应状态代码为429

Python Tweepy错误,响应状态代码为429,python,tweepy,Python,Tweepy,我正在使用tweepy API拉推推并显示在网页上。虽然我每1小时自动刷新一次代码以提取tweets,但在代码连续运行约24小时后,我最终会出现以下TweepError。 错误: tweepy.error.TweepError:Twitter错误响应:状态代码=429 我理解这段代码意味着对API的请求太多。有没有办法处理这个错误?我甚至尝试将刷新频率间隔增加到2小时,但似乎仍然不起作用 以下是提取推文并存储在CSV中的代码: def extract_tweet(self): consum

我正在使用tweepy API拉推推并显示在网页上。虽然我每1小时自动刷新一次代码以提取tweets,但在代码连续运行约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文档,偶然发现了等待速率限制,但不知道这是否是这个错误的解决方案。
请帮忙!谢谢。

有几个选项可以实现重试装饰器。重试修饰符查看方法中是否引发异常。下面的示例使用指数退避重试。这将在每次重试之间等待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

有几个选项可以实现重试装饰器。重试修饰符查看方法中是否引发异常。下面的示例使用指数退避重试。这将在每次重试之间等待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

你可以帮我打包。在处理出错时的重试行为方面,它有很多选项。@GarbageCollector:这个包看起来是个不错的解决方案!但我在将其写入代码时遇到了困难。你能告诉我如何将它集成到问题中的函数中吗?你可以打包。在处理出错时的重试行为方面,它有很多选项。@GarbageCollector:这个包看起来是个不错的解决方案!但我在将其写入代码时遇到了困难。您能告诉我如何将其集成到问题中的函数中吗?将csvFile.close()与循环结尾对齐。由于将csvFile.close()与循环结束对齐,因此获得了“关闭文件上的I/O操作”。因此获得了“关闭文件上的I/O操作”