Twitterで、自分のツイートがリツイートされた後、感想などが直後にツイートされることがあります。しかし、特にリプライ先の指定がされているわけでもないので、フォローしていないユーザーがどんな反応をしたかは自分にはわからないことが多いですよね。
そんなとき、@jz5さんの「リツイート直後のツイートを表示するやつ」を使うと、そういった反応を集めてくれ、なかなか便利です。
リツイート直後のツイートを表示するやつできたので使ってみてください。https://t.co/QcSqgONKTN
— JZ5 (@jz5) January 18, 2015
このサービスとほぼ同様のことをする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分の範囲指定に使うくらいであれば問題ないでしょう。