各地で感染急拡大 新型コロナ最新情報

「そのツイート自身」を引用する自己引用ツイートを作成するにはどうすれば良いのか?

「そのツイート自身」を引用する自己引用ツイートを作成するにはどうすれば良いのか? - 画像


Twitterにて「そのツイート自身を引用しているツイート」を行うことに成功したエンジニアのオシーン・モランさんが、その方法についてブログで解説しています。
Oisín Moran | How I Made a Self-Quoting Tweet
https://oisinmoran.com/quinetweet
自己引用に成功したツイートは下記の通り。
https://t.co/MAbIwtoonW— quinetweet (@quinetweet) 2020年9月26日

Twitterのサイトで確認すると、ツイートのURLがツイート内に記述されており、無限参照状態になっていることが分かります。

「そのツイート自身」を引用する自己引用ツイートを作成するにはどうすれば良いのか? - 画像


モランさんによると、自己引用ツイート作成の要点はツイートIDがどのような規則で生成されているのかの推測にあるとのこと。TwitterではツイートIDにSnowflake IDという形式を採用しており、この形式ではIDの数字を2進数に変換したときに最初の41ビットが「タイムスタンプ」、続く10ビットが「マシンID」、最後の12ビットが「シーケンス番号」となっています。

「そのツイート自身」を引用する自己引用ツイートを作成するにはどうすれば良いのか? - 画像


全部で63ビットもあるため、完全にランダムで当てに行くのはほぼ不可能です。しかし、最も大きな要素であるタイムスタンプ部分は簡単に推測できるため、最大1024パターンのマシンIDおよび最大4096パターンのシーケンス番号を当てることができれば自己引用ツイートを行うことが可能です。
モランさんはまず、Twitterの開発者アカウントを用意し、twurlを利用してプログラムからツイートを行えるようにしました。2つのツイートを続けて送信することで、IDの変化を観察したとのこと。例えば、以下の2つのツイートはIDが「1309237975868469248」「1309237977982345216」となっていますが、これをSnowflakeの形式に当てはめると前者が「タイムスタンプ:312146657912」「マシンID:375」「シーケンス番号:0」で、後者が「タイムスタンプ:312146658416」「マシンID:362」「シーケンス番号:0」になり、2つ目の投稿は504ミリ秒後だったこと、マシンIDが13異なっていること、シーケンス番号がともに0だったことが判明しました。シーケンス番号で一番多いのは0だとすると、完全にランダムな要素はマシンIDのみとなり、総当たりで突破が可能です。
Quick succession test 1— quinetweet (@quinetweet) 2020年9月24日
Quick succession test 2— quinetweet (@quinetweet) 2020年9月24日

モランさんはタイムスタンプのずれを修正しつつ、APIの制限に引っ掛かるまでツイートを送信し続けました。プログラムの様子は下記の通りで、ツイートIDの下にタイムスタンプとマシンID、シーケンス番号のズレがそれぞれどれくらいなのかが表示されています。特に3つ目のIDはタイムスタンプとマシンIDが一致したもののシーケンス番号が1だけ違っていたもので、非常に惜しいところまで迫っていました。

「そのツイート自身」を引用する自己引用ツイートを作成するにはどうすれば良いのか? - 画像


そして960ツイート目で見事自己引用ツイートに成功。

「そのツイート自身」を引用する自己引用ツイートを作成するにはどうすれば良いのか? - 画像


https://t.co/MAbIwtoonW— quinetweet (@quinetweet) 2020年9月26日

モランさんはブログの末尾で、この1ツイートのせいでツイートの構造が有向非巡回グラフではなくなってしまったことについて、Twitterの技術者に「非常に申し訳なく思う」と述べていました。

ジャンルで探す