6

我使用 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)

两/三小时后,此过程停止。没有信号错误、超时等。它只是没有得到更多的推文。我在哪里做错了?

4

2 回答 2

9

尝试向on_disconnect您的课程添加一个方法。可能是 Twitter 正在断开您的连接(不是错误,也不是超时)并且您没有处理这个问题。如果您愿意,您可以以不同方式处理不同的 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

查看tweepystreaming模块了解更多信息。

您还可以尝试在streamer.filter(). 以下是 Tweepy 源中的所有选项及其默认值:

def filter(self, follow=None, track=None, async=False, locations=None,
           stall_warnings=False, languages=None, encoding='utf8'):
于 2014-04-27T11:48:10.017 回答
1

您可能希望启动 api 并设置一个超时时间

api = tweepy.API(auth1,timeout=60)
于 2017-07-15T07:27:20.537 回答