Twitterの投稿日時をURLからJavaScriptで求める。


tl;dr

  • 年に3度くらい、ツイートの投稿日時ってどこを見ればよいんだっけ、と悩むため忘備録として記事にする
  • URLからJavaScriptを使って求めるものとする

はじめに

  • Twitterは閲覧環境によって米西海岸の時刻で表示されるなどして、実際の投稿日時を勘違いする問題が稀によくあった。※ 既に改善されていたらすみません。
  • 情報リークやデマなどのイベントを追っかけるのに、一刻も早く正しい時系列で事態を把握したいのに、えーっと、、となってしまうのがイヤ。
  • 以前はhtmlタグのなかにepochが埋め込まれていたこともあったように思うが今は無さげ。こういう事があるためHTMLは当てにしたくない。
  • Twitterはだいぶ前から、Snowflakeという時刻情報を組み込んだIDを使っており、今回はこれを利用する。

やりかた

  • ブラウザ(筆者はChrome v79で確認)で、任意のツイートページを開く。
  • Developer Consoleを開き、下記のJavaScriptを実行すると、ツイート投稿日時が日本時間で表示される。
alert(new Date(Number((BigInt(window.document.URL.split("/")[5])>>22n) + 1288834974657n)).toLocaleString('ja-JP'))

説明

  • Snowflakeでは64bit整数のうち、timestampで42 bit、worker-idで10 bit、sequenceで12 bitをアサインしている。
  • URLからツイートのIDを取り出す( URLを / でスプリットして5番目の数値)。
  • timestampを22bitシフトして取り出したのち、オフセット値である 1288834974657 を加算して、日本語ロケールの時刻として表示する。
  • よく使う人はBookmarkletにすれば便利だと思います。

補足

  • なおIEやEdgeといったBigInt(ES2020)に対応していないブラウザでは使えない。
  • Snowflake採用以前の、大昔のツイートは今回の方法は使えない。
  • Snowflakeのオープンな開発は大分前から止まっており、IDの仕様は既に変わっている可能性もあるが、観測できる範囲では時刻情報は正確そう。