「リツイート直後のツイートを探す」twicliプラグイン

Twitterで、自分のツイートがリツイートされた後、感想などが直後にツイートされることがあります。しかし、特にリプライ先の指定がされているわけでもないので、フォローしていないユーザーがどんな反応をしたかは自分にはわからないことが多いですよね。


そんなとき、@jz5さんの「リツイート直後のツイートを表示するやつ」を使うと、そういった反応を集めてくれ、なかなか便利です。


このサービスとほぼ同様のことをするtwicliプラグイン tweets_after_rt.js をつくってみました。


このプラグインは現在デフォルトで追加されています。反応を知りたいツイートの▼メニューから、「リツイート直後のツイートを探す」を選ぶと、ポップアップで反応を集めてきて表示します。該当するものがない場合は何も起きません(わかりにくい)。

*1


なお、1回あたり最大20回ほどユーザタイムライン取得のAPIを発行するので、利用しすぎるとAPIの利用制限に引っかかります*2

仕組み

対象ツイートに対する最新のリツイート情報20件を取得し、そこに含まれていた全ユーザーのツイートを取得します。その際、IDの範囲指定を対象ツイートの時点〜その10分後までにすることで、そのRTに対する反応だと思われるものをピックアップしています。


なお、取得するツイートを10分後までに限定する方法として、APIのmax_id(取得する上限ID)指定を利用しています。TwitterのツイートID (全63bit) の生成に使われているsnowflakeは、

時刻(ms単位) 41bit サーバID 10bit サーバごとのシーケンス番号 12bit

という構成になっています。→参考 http://www.slideshare.net/moaikids/20130901-snowflake *3 したがって、対象ツイートからだいたい10分後(600,000ms後)までにするためには、

max_id = target_tweet_id + 600000 * (1<<22);

のようにmax_idを計算すれば良いことになります。*4

*1:関係ないけどちゃんとネタだと理解されてるのか心配な反応がある

*2:ユーザタイムライン取得の制限は15分間で150回なので、15分間に少なくとも7回まで使える計算になります(対象ツイートのRTが少なければもっと使えます)。

*3:これによってサーバ間でロックをとったりすることなく重複しないIDが作れるわけですね。

*4:直接シフトするのではでなく1 << 22を掛け算しているのは、JavaScriptでシフト演算は32bit整数に対してしか行えないためです。掛け算なら浮動小数点に変換して計算されます。浮動小数点であるため、必然的に多少の誤差が出ますが、上位41bit分の範囲指定に使うくらいであれば問題ないでしょう。