在Tweepy中优雅地处理用户时间线方法的错误和异常

2024-03-28 23:21:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为大量用户收集tweets,因此脚本将在无人监督的情况下运行数天/数周。 我在big_list中有一个用户id列表。 我认为有些tweets是私有的,我的脚本停止了,所以我想让脚本继续到下一个用户I d(可能还会打印一条警告消息)。

我还想建议如何使它对其他错误或异常健壮(例如,脚本在错误或超时时休眠)

这是我的总结:

import tweepy
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
my_api = tweepy.API(auth)

for id_str in big_list:
    all_tweets = get_all_tweets(id_str=id_str, api=my_api)
    #Here: insert some tweets into my database

get_all_tweets函数抛出错误,它基本上重复调用:

my_api.user_timeline(user_id = id_str, count=200)

以防万一,它给出的回溯如下:

/home/username/anaconda/lib/python2.7/site-packages/tweepy/binder.pyc in execute(self)
    201                 except Exception:
    202                     error_msg = "Twitter error response: status code = %s" % resp.status
--> 203                 raise TweepError(error_msg, resp)
    204 
    205             # Parse the response payload

TweepError: Not authorized.

如果你需要更多的细节,请告诉我。谢谢!

———————————————————

This question有一些信息。

我想我可以尝试为不同类型的错误创建一个try/except块?我不知道所有相关的,所以最好的做法,有实地经验的人将不胜感激!

—————————————————————————

我得到了一些Rate limit exceeded errors所以我让循环像这样睡觉。else部分将处理“未授权”错误和其他一些(未知?)错误。但这仍然使我在big_list中丢失了一个元素。

for id_str in big_list:
    try:
        all_tweets = get_all_tweets(id_str=id_str, api=my_api)
        # HERE: save tweets
    except tweepy.TweepError, e:
        if e == "[{u'message': u'Rate limit exceeded', u'code': 88}]":
            time.sleep(60*5) #Sleep for 5 minutes
        else:
            print e

Tags: 用户脚本tokenauthapiidaccessmy
2条回答

你可以做一个“通行证”:

import tweepy
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
my_api = tweepy.API(auth)

for id_str in big_list:
    try:
        all_tweets = get_all_tweets(id_str=id_str, api=my_api)
    except Exception, e:
         pass

我真的迟到了,但这几天我也遇到了同样的问题。由于时间的需要,我通过alecxe reply to this question解决了这个问题。

我在潜水过去,但我希望这将有助于在未来的人。

相关问题 更多 >