風柳メモ

ソフトウェア・プログラミング関連の覚書が中心

Google App Engine経由ならTwitterのタイムライン等が取得し放題…というわけでもない?(続き)

Google App Engine経由ならTwitterのタイムライン等が取得し放題…というわけでもない? - 風柳メモ』の続きですが…あの後、GAEからHTTP GETを自分が管理しているサーバ宛に送信し、受信したサーバ側にてSource IP Addressを調べてみたところ、どうも一定っぽい(少なくともころころ変わるわけではない)ので*1……GAEのIPアドレスがTwitterのホワイトリストに登録されていない、という可能性より、TwitterのRateLimitの運用において、文書外の制限がかかっている可能性の方が高いかなぁ、と思えてきました*2

実験

user_timeline(/statuses/user_timeline.json)を200件ずつ(count=200)、page=1〜16を指定して並列取得するようなテストです(認証はなし)。

  • 『Limit:*/* (next reset:...)』となっているのは/account/rate_limit_status.jsonで取得した結果
  • 『Page *(level=*)』となっている部分のlevelは、「0:正常(20000制限)、1:150制限、2:エラー応答(JSON有)、3:エラー応答(JSON無)、10〜:GAE上の異常もしくはバグ」
  • 各Responseの[result]後に出力される『Limit:...』は、そのpageのuser_timelineのResponse直後に取得したもの。
すべて正常なパターン


全滅パターン


混合パターン

このときのだめだったpageを見てみると、


No.4は503(Service Temporarily Unavailable)エラー(多分、一時的な負荷増でしょう)なのでいいとして、No.5は400(Rate limit exceeded)で150制限に引っかかってますが、その直後に取得している/account/rate_limit_status.jsonの結果("Limit: 14253/20000 ..."となっている部分)では、制限が150ではなく20000で返っているという……。

結局…

よくわかりませんね(苦笑)。
単位時間あたりの要求数とか、いろいろ条件があるんでしょうかね…?

*1:GAE側でTwitter宛の場合だけIPアドレスをころころ変えるとも思えないしなぁ

*2:Twitter側のバグじゃないの?とか思ったりしなくもないのですが…。