Show page source of API制限について #63540

[[PageNavi(NaviList)]]
このドキュメントはTwitterの公式発表によるものではない部分が含まれています。調査を行い判明した事項が後に変更されている場合もあります。

== API制限とは何ですか?

Twitterが負荷軽減などのために、タイムライン取得、Fav追加、書き込みなど、主にAPI操作に関して設けている一定の制限です。この制限に到達すると、一定時間経過するまでの間APIによる操作が不可能になります。

=== 現在かかっているAPI制限にはどのようなものがありますか?

取得系と送信系に大別されます。取得系は、主に読み取り操作に対してかかる制限、送信系はサーバに対してのデータ送信についてかかる制限です。アカウントと使用しているIPアドレスを1組として使用回数がカウントされ、規制されます。

また、検索に関する取得系のAPI制限が存在します。

==== 取得系
タイムライン取得系API(Recent/Reply/!DirectMessage)、Lists取得系を含む、データ取得系API の1時間当たりの回数制限。一般的に「API制限」と呼ばれる場合はこれを指すことが多いです。検索系のAPI使用回数は含まれません。
==== 送信系
 * ステータス書き込みAPIの回数制限。投稿回数が多くなった場合に一定の時間投稿ができなくなります。
 * ステータス書き込みAPIの内容による制限。連続して全く同じ文字列の投稿を行った場合、2回目以降の書き込みが反映されません。文字列を変えて投稿した場合は規制対象にならず反映されます。
 * Fav追加APIの回数制限。制限回数に到達すると、一定時間Fav追加が出来なくなります。
==== 検索系
検索結果を取得するAPIに対する1時間あたりの回数制限。IPアドレス単位でカウントされます。

これ以外にも、短時間に大量のAPIを発行した場合は規制を受けることがあります。また、取得系APIにも規制対象外のものがあります。
このように、送信系ではAPI/Webの別なく制限がかかります。Tweenでの発言投稿は常に送信系APIを使用します。

=== どの程度の規制がかかっているのですか?

調査で分かった規制は次の通りです。

==== 取得系APIの制限
アカウント+IPアドレスの組み合わせでカウントされます。~~BASIC認証によりログインした場合は1時間当たり150回、~~xAuth(oAuth)認証の場合は1時間に350回を基本とし、負荷状況により変動します。1時間ごとにリセットされます。現在負荷状況によりかなり細かく制御されるようになっているようです。
===== ~~8/16よりBASIC認証終了へ向けて、1日ごとに1時間あたり10回ずつAPI使用回数が減らされる予定です。8/31より使用できなくなるとされています。~~8/31をもってBASIC認証は終了されました。
==== 送信系APIの制限
 * ステータス書き込みAPIの回数制限 3時間当たり125回。リセットされるまでの時間は明らかになっていません。Twitter側の都合で、40~60回程度で規制がかかってしまうこともあるようです。
 * ステータス書き込みAPIの内容制限 直前に投稿した文字列と同一でない場合には規制はかかりません。(直近10回の投稿内容まで見ている?)
 * Fav追加APIの回数制限 24時間当たり250Fav。 24時間ごとにリセットされます。
また、1日に投稿できる数にも制限があるようです。
[http://jptwitterhelp.blogspot.com/2010/05/twitterapi.html 公式には、以下のように発表されています。]
 * 通常発言 1000投稿/日
 * ダイレクトメッセージ 250投稿/日
==== 検索系APIの制限
IPアドレス単位でカウントされます。1時間当たり150回。1時間ごとにリセットされます。

=== 取得系APIの制限はPOSTメソッドで回避できるんじゃないですか?

いいえ。2009/4/9の修正で、POSTメソッドによるタイムライン取得系APIの発行はできなくなりました。POSTメソッドで取得系APIを発行すると、「Bad Request」エラーになります。(取得系APIの制限回数を使い切ったときと同じ動作)


=== API制限というのは誰が決めているのですか?

Twitter運営です。'''Twitterクライアントや連携アプリケーションの作者が決めているわけではありません。'''

=== ユーザーとしては何ができるのですか?

ユーザーができるのは次のことだけです。

 * Twitterクライアントや連携アプリを使用する場合は、設定などによりAPI使用回数を減らす。
 * ~~Twitterクライアントや連携アプリを使用せず、Twitterが標準で用意したWebインターフェースを使う。~~Webインターフェースでの使用も制限対象になったようです。

=== Twitterクライアントを使用しています。別のクライアントに変えると改善されますか?

いいえ。されません。TwitterのAPIを使用しているTwitterクライアントは、すべて同じ制限を受けます。

=== API残数を表示しないクライアントを使用しています。どうしたらいいですか?

そのクライアント作者の方に要望してみてください。気が向けば何らかの情報表示機能が付くのではないでしょうか。

=== API残数を表示するクライアントを使用していますが、API残数が残っているにも関わらずAPI制限に引っかかってしまいます。

 * この項目ではTweenに限定して述べます。別のクライアントを使用されている場合は、プログラムが異なりますのでそのクライアントの作者の方にご確認ください。

Tweenでは、基本的にAPI残数あるいは上限の表示には、API制限対象のAPIメソッド(命令)をTwitterに対して実行した場合にTwitterより返された情報を利用して表示しています。つまり、制限対象のAPIを使ってみないことにはあと何回使えるか、最大で何回使えるかはわかりません。前回APIを発行して、最大値あるいは現在値の情報を更新したあと、次のAPI発行までの間にTwitterのサーバー側での設定がAPI上限を減らすように変更された場合は、このようなことが起こり得ます。この場合は、ヘルプ>API情報により現在の上限値を確認し、それに従って設定を変更してください。

=== APIの情報を表示するクライアントを使用していますが、表示した方法により上限が異なるようです。

 * この項目ではTweenに限定して述べます。別のクライアントを使用されている場合は、プログラムが異なりますのでそのクライアントの作者の方にご確認ください。

Tweenでは、基本的にAPI残数あるいは上限の表示には、API制限対象のAPIメソッド(命令)をTwitterに対して実行した場合にTwitterより返された情報を利用して表示しています。しかし、ヘルプメニューのAPI情報においてはAPI情報取得のために用意された専用APIを使用してAPI最大数、現在数、リセット時間を取得して表示します。まれにこの両者の情報が食い違うことがあるようです。この場合は、両者の情報を見比べ、少ない方のAPI上限に合わせて設定を書き換えることで、APIを使い切るのを防ぐことができます。

=== 1回の更新で2以上のAPIが減ることがあります。

 * この項目ではTweenに限定して述べます。別のクライアントを使用されている場合は、プログラムが異なりますのでそのクライアントの作者の方にご確認ください。

 * Tween 0.9.5.0までは、API発行時に通信エラーが起きた際、残数情報を反映していません。この不具合は次回のバージョンアップにより修正されます。例を挙げて説明します。APIを2回発行した際に、最初の発行では通信エラー、次回の発行で通信が成功した場合に、最初のAPI発行時の回数減算が反映されず、次回の発行時にまとめて反映されるため、一度の発行で2のAPIを消費したように見えます。APIカウント消費は成功報酬ではなく着手料である、と考えてください。

 * TweenでのDirectMessageタブの更新は、送信DMと受信DMの両方にアクセスするため、一度のタブ更新でAPIを2消費します。これは正常な動作であり仕様です。

==== API制限にひっかからないように気をつけること

 * 同一のアカウントに対して複数のTwitterクライアントを使用しないようにします。仮に二つのクライアントを使えばそれぞれのクライアントでは半分ずつしかAPIを使えません。
 * API発行回数回数を制限内に抑えるように、取得間隔を間引いてください。
 * 取得発言を増やしたい場合は、標準取得件数を増やします。
 * 取得件数を増やし、それでも取りこぼすときに取得間隔を詰めることを検討してください。
 * API制限に引っかかりそうな場合は、発言時のタイムライン取得をしないようにしてください。
 * 必要以上にListsを使用しないようにします。



[[PageNavi(NaviList)]]
[[include(GAds)]]