2013-01-05 3 views
6

tweet을 사용하여 일부 트윗을 스트리밍합니다. 이것은 나의 절차입니다 :몇 시간 후에 tweepy가 멈 춥니 다.

import tweepy 
import json 

consumer_key = "***" 
consumer_secret = "***" 
access_token_key="***" 
access_token_secret="***" 

auth1 = tweepy.OAuthHandler(consumer_key, consumer_secret) 
auth1.set_access_token(access_token_key, access_token_secret) 
api = tweepy.API(auth1) 

class StreamListener(tweepy.StreamListener): 
    def on_status(self, status): 
     try: 
      print status.text 
     except Exception, e: 
      print 'Encountered Exception Tweet:', e 
      pass 
     return True 

    def on_error(self, status_code): 
     print 'Encountered error with status code:' + repr(status_code) 
     return True 

    def on_data(self, data): 
     if 'in_reply_to_status_id' in data: 
      status = tweepy.Status.parse(self.api, json.loads(data)) 
      if self.on_status(status) is False: 
       return True 
     elif 'delete' in data: 
      delete = json.loads(data)['delete']['status'] 
      if self.on_delete(delete['id'], delete['user_id']) is False: 
       return True 
     elif 'limit' in data: 
      if self.on_limit(json.loads(data)['limit']['track']) is False: 
       return True 
     return True 

    def on_timeout(self): 
     print 'Timeout...' 
     return True 

l = StreamListener() 
streamer = tweepy.Stream(auth=auth1, listener=l, timeout=36000000) 

setTerms = ['enbrel'] 
streamer.filter(follow=None,track = setTerms) 

2 시간에서 3 시간 후에이 절차는 중단됩니다. 신호 오류, 시간 초과 등이 없습니다. 단지 더 많은 트윗을 얻지 못합니다. 내가 어디에서 잘못하고 있니?

+0

시작하는 타임 아웃으로 API를 초기화 할 수 있습니다? 네트워크 연결 또는 트위터의 API에 문제가있을 수 있습니다. –

답변

7

on_disconnect 메서드를 클래스에 추가해보십시오. 트위터가 당신의 연결을 끊을 수 있습니다 (오류가 아니라 타임 아웃이 아님) 당신은 이것을 처리하지 않을 수 있습니다. 원하는 경우 다른 Twitter 오류를 다르게 처리 할 수 ​​있습니다.

def on_disconnect(self, notice): 
    """Called when twitter sends a disconnect notice 

    Disconnect codes are listed here: 
    https://dev.twitter.com/docs/streaming-apis/messages#Disconnect_messages_disconnect 
    """ 
    return 

자세한 내용은 tweepy의 streaming module을 확인하십시오.

streamer.filter()에서 실속 경고를 사용하도록 설정할 수도 있습니다. 아래는 Tweepy 소스에서 모든 옵션 및 기본값은 다음과 같습니다

+0

내가 아는 낡은 대답이지만 조금 더 자세히 설명해 주시겠습니까? on_disconnect를 다시 연결하고 싶지만이 작업을 가장 잘 수행 할 수있는 방법이 확실하지 않습니다. –

+0

알아 냈어 : 내 자신의 루프에서'stream.running'을 확인하십시오. 그렇지 않으면 스트림을 삭제하고'n' ​​초 후에 새로운 스트림을 시작하십시오. –

1

당신은이 문제를 재현 할 수 있었다

api = tweepy.API(auth1,timeout=60) 
관련 문제