Tweepy:在流式API

时间:2017-10-02 16:29:53

标签: python tweepy

我是一个相对较新的Python程序员,并且一直使用Tweepy来处理Twitter流。我小心翼翼地放入代码来暂停流以防速率限制,但它根本不起作用,因此我被禁止重载我的流。试着用推特来解决这个问题,但与此同时,如果有人能指点我,我将不胜感激。 Tweepy文档不是很好,似乎与当前版本不同步。

我的代码的相关部分是:

class myStreamListener(tweepy.StreamListener):

def on_data(self, data):
    tweet = json.loads(data)
    process_tweet(tweet) # (not shown)
    return True

def on_error(self, status_code):
    if status_code == 420:
        logger.info('420 error: pausing 60s')
        sleep(60)
        return True # continue listening
    logger.info('Error: status %s', str(status_code))
    return True # continue listening

def on_timeout(self):
    logger.info('Timeout: pausing 60s')
    sleep(60)
    return True  # continue listening


def run():
    # (stuff not shown--logging objects, config)
    # Construct the Stream instance
    auth = _get_auth(config) # (not shown)
    api = tweepy.API(auth)
    while True:
        try:
            twitterStream = tweepy.Stream(auth, myStreamListener(api))
            twitterStream.sample(async=True)
        except:
            logger.error('Error occurred in stream.')
            sleep(5)
            continue

当我运行它并拖尾日志文件时,我得到:

2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s
2017-10-01 08:17:48: 420 error: pausing 60s 
2017-10-01 08:17:48: 420 error: pausing 60s 
2017-10-01 08:17:48: 420 error: pausing 60s 
2017-10-01 08:17:48: 420 error: pausing 60s 
2017-10-01 08:17:48: 420 error: pausing 60s 
2017-10-01 08:17:48: 420 error: pausing 60s 
2017-10-01 08:17:48: 420 error: pausing 60s 
^C

因此,尽管我试图等待并尊重速率限制,我的机器人继续锤击API,指数增加我必须等待重置之前的时间。我确实希望机器人永远运行(或者至少在我手动停止之前),所以我不希望它从任何这些错误中返回False。 (我已经看到代码会逐渐等待更长的时间,但由于这甚至没有等到我想要的60秒,所以现在还没有太多意义。)

感谢。

0 个答案:

没有答案