2017-12-13 30 views
0

tweepy API를 사용하여 트윗을 가져 와서 웹 페이지에 표시하고 있습니다. 1 시간마다 트윗을 추출하기 위해 코드를 자동 새로 고치지 만, 약 24 시간 동안 코드가 계속 실행되면 다음 TweepError로 끝납니다. 오류 :응답 상태 코드에 Tweepy 오류가 있습니다. 429

tweepy.error.TweepError: Twitter error response: status code = 429

은이 코드는 API에 너무 많은 요청이 있다는 것을 의미 것으로 알고 있습니다. 이 오류를 처리 할 방법이 있습니까? 나는 심지어 새로 고침 빈도 간격을 2 시간으로 늘려 보았지만 아직 작동하지 않는 것 같습니다.

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 우연히,하지만이 오류의 해결책이 경우 이해하지 않은 : 다음

은 CSV에 트윗과 상점을 추출하는 코드입니다 . 도와주세요! 감사.

+0

[재시도] (https://pypi.python.org/pypi/retrying) 패키지를 사용할 수 있습니다. 오류 발생시 다시 시도하는 동작을 처리하는 옵션이 많이 있습니다. –

+0

@GarbageCollector : 그 패키지는 좋은 해결책처럼 보입니다! 그러나 나는 그것을 코드에 쓰는 데 어려움을 겪고있다. 질문에 함수를 통합하는 방법을 알려주시겠습니까? – Pooja

답변

1

재시도 데코레이터를 구현하는 데는 몇 가지 옵션이 있습니다. 메서드에서 예외가 발생하면 재시도 데코레이터가 나타납니다. 다음 예제에서는 지수 백 오프를 다시 시도합니다. 이렇게하면 각 재시도 사이에 2 x 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 
+0

감사합니다! 이 작품! – Pooja