3

Twitter ユーザー ID のリストを反復処理し、follower_ids のリストをファイルに保存するスクリプトを作成しました。数回使用しましたが問題ありません。長いリストの場合、次のコードを追加して、すべての GET リクエストの前にレート制限をチェックし、レート制限されそうな場合はスリープします。

rate_limit_json = api.rate_limit_status()
 remaining_hits = rate_limit_json["remaining_hits"]
 print 'you have', remaining_hits, 'API calls remaining until next hour'
 if remaining_hits < 2:
      dtcode = datetime.utcnow()
      unixtime = calendar.timegm(dtcode.utctimetuple())
      sleeptime = rate_limit_json['reset_time_in_seconds'] - unixtime + 10
      print 'waiting ', sleeptime, 'seconds'
      time.sleep(sleeptime)
 else:
      pass

スクリプトの先頭に、この Oauth の宣伝文句を設定しました。

auth = tweepy.OAuthHandler('xxxx', 'xxxx')
auth.set_access_token('xxxx', 'xxxxx')
api = tweepy.API(auth)

私が繰り返し行っている呼び出しは次のとおりです。

follower_cursors = tweepy.Cursor(api.followers_ids)

そのため、今では、何回呼び出しても、Twitter が「レート制限を超えました。クライアントは 1 時間あたり 350 を超えるリクエストを行うことはできません」というメッセージを返すまで、「残りのヒット数」は 150 のままです。

レート制限チェッカーは、許可されていない IP アドレスのレート制限 (150) を報告しているようですが、呼び出しはアプリのレート制限 (350) に対してカウントされています。

レート制限チェッカーを実際にアプリのレート制限を再度チェックするように調整するにはどうすればよいですか?

4

1 に答える 1

0

インスタンスを繰り返し作成しCursorても、実際には Twitter へのリクエストが行われないため、API の見積もりが使い果たされることはありません。ACursorは、さまざまなページネーション メソッドの Tweepy ラッパーです。nextまたはメソッドを呼び出してprev反復すると、実際の API 呼び出しが発生します。

Twitter には、認証されていない API 呼び出しの概念がなくなりました (v1.1 API は常に認証を必要とします)。問題はあなたの使い方にあると思いますCursor。インスタンスを 1 回だけ作成し、メソッドを繰り返し呼び出してみてください(ジェネレーターと同様にnext、必ずStopIteration例外をキャッチしてください)。next

于 2014-03-13T10:43:37.677 に答える