2

Twitterユーザーのフォロワーを取得するためのこのコードがあります:

followers=[]
for user in tweepy.Cursor(api.followers,id=uNameInput).items():
    followers.append(user.screen_name)

ただし、これを複数のフォロワーを持つユーザーで使用すると、スクリプトはレート制限を受けて停止します。私は通常、これをしばらくの間当てはめます。それ以外の場合はループを中断しますが、このインスタンスでどこに行くかは不明です。

4

3 に答える 3

1

レート制限を回避したい場合は、次のフォロワーページリクエストまで待つことができます/待つ必要があります:

for user in tweepy.Cursor(api.followers, id=uNameInput).items():
    followers.append(user.screen_name)
    time.sleep(60)

美しくはありませんが、役立つはずです。

UPD: 公式のTwitter の制限によると、取得するために 15 分間隔あたり 30 件のリクエストしか作成できませんfollowers

したがって、レート制限の例外をキャッチして 15 分間のインターバルが終了するまで待つか、カウンターを定義して 15 分間のギャップごとに 30 を超えるリクエストを行わないようにすることができます。

tweepy 例外をキャッチし、フォロワーの次の部分に移動する前に 15 分間待機する方法の例を次に示します。

import time
import tweepy

auth = tweepy.OAuthHandler(..., ...)
auth.set_access_token(..., ...)

api = tweepy.API(auth)
items = tweepy.Cursor(api.followers, screen_name="gvanrossum").items()

while True:
    try:
        item = next(items)
    except tweepy.TweepError:
        time.sleep(60 * 15)
        item = next(items)

    print item

ただし、これが最善のアプローチであるかどうかはわかりません。

UPD2: 別のオプションもあります。rate_limit_statusを確認し、残っているリクエストの量を確認しfollowersて、待機するか続行するかを決定できます。

それが役立つことを願っています。

于 2013-08-05T08:26:10.713 に答える
0

これが私のコードです

try:
    followers=[]
    for user in tweepy.Cursor(api.followers,id=uNameInput).items():
        followers.append(user.screen_name)
except: 
    errmsg = str(sys.exc_info()[1])
    printdebug(errmsg)
    if errmsg.find("'code': 88") != -1: # [{'message': 'Rate limit exceeded', 'code': 88}]
        print("Blocked.")
        time.sleep(60 * 60) # Wait 1 hour for unblock
        pass
    else:
        raise
于 2014-08-07T09:49:57.357 に答える