[twitter][ruby]twitter APIのツイート上限回数について調べてみた


[まとめ] 現在開催中のKindleセール情報はこちら


本調査の結果は2014/9/8時点でのものになります。

また、自分のテストアカウントでしか確認していないため、他のユーザでも同じ回数まで使えるかは分かりません。

twitter apiを使って定期的にツイートを行うbotを作ろうと思い、ツイート回数上限について調べてみました。

公式サイトには

ツイート:2,400件/1日。1日あたりのリミットは、更に細かい1時間に2回間隔のリミットに分かれます。リツイートも、ツイートとして数に考慮されます。

これらのリミットは、ウェブ、モバイル、電話、API等を含む、すべてのデバイスからの操作を含みます。すべてのサードパーティのアプリケーションからのAPIリクエストは、1時間毎のAPIリミットとは別にトラックされます。アカウントを複数のサードパーティアプリケーションでご利用の場合は、APIリミットにかかりやすくなりますことご理解ください。詳細は「APIレートリミット」をご覧ください。

これらのリミットは、サイト利用が多い期間中に一時的に下げる場合があります。その場合は、Twitterステータスブログでご案内致します。

と書かれており、1日当たり2400件まで投稿可能のようです。(APIに限らずブラウザから投稿を行っても1件として扱われるとのこと)

ただ、1日当たりの制限に加えて1時間毎の上限も決められているとのことだったので、1時間毎の上限も探してみたのですが見つからず、テストアカウントを用いて検証してみました。

結論から先に書くと、

1時間あたり100回のペースだとAPI制限に引っかからずツイートを行うことができました(3時間あたり300回の制限がある模様)

以下、結論に至るまでの経緯をダラダラ残しておきます。

1. 1分に1回ツイートするサンプルを作成

gem twitterを使って、ツイートを行うサンプルを作成し、cronで1分おきに実行するようにしてみました。

こちらは問題なく24時間実行できました。

2. 9〜21時までは1分間に2回つぶやくサンプルを作成

1.で作ったサンプルのまま、cronの設定をいじって無理やり対応しました。

0-8,21-23 * * * /bin/bash -lc '/home/test/tw_bot_cron.sh'
9-20 * * * for i in 15 45;do (sleep ${i} ; /bin/bash -lc '/home/test/tw_bot_cron.sh') & done;

このサンプルの場合、一定時間おきにAPI上限に達して以下のエラーが発生しました。

User is over daily status update limit.

エラーをグラフにしてみると以下のようになり、3時間おきにエラーが60回近く発生していました。

tw_bot

3時間で360回つぶやこうとすると60回近くエラーになるので、3時間で300回までならいけそうな予感。

3. 1時間あたり100回つぶやくサンプルを作成

以下のようなサンプルを作成し、cronでの実行をやめて1回ツイートする毎に36秒sleepするようにしました。

このサンプルだと User is over daily status update limit. のエラーは発生することなく24時間ツイートができました。

twitter apiでツイートを行う場合、3時間あたり300回以内に抑えておくのが良さそうです。

参考

[まとめ] 現在開催中のKindleセール情報はこちら