LoginSignup
2
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-04

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の仕様は既に変わっている可能性もあるが、観測できる範囲では時刻情報は正確そう。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1