TwitterのステータスIDの仕組み

Twitter ID は snowflake という仕組みで日時から生成される。下位22ビットはユニークな値で,上位は 2010-11-04 01:42:54.657 UTC (2010-11-04 10:42:54.657 JST) を起点としたミリ秒単位の時刻を表す。したがって,IDからツイートのタイムスタンプを求めるには次のようにすればよい:

import time

def id2time(id):
    return ((id >> 22) + 1288834974657) / 1000

id = 1177189139873054725 # このIDのツイートのタイムスタンプを求める
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(id2time(id))))

2019-09-26 20:52:16 と出力される。あるいは次のようにしてもよい:

import numpy as np

print(np.datetime64("2010-11-04 10:42:54.657") + np.timedelta64(id >> 22, "ms"))

2019-09-26T20:52:16.719 と出力される。

逆は次のようにすればよい。例えばタイムスタンプ 2019-09-26 20:52:16 のIDは

t = '2019-09-26 20:52:16'
print((np.datetime64(t) - np.datetime64("2010-11-04 10:42:54.657")).astype(int) << 22)

小さめの値 1177189136855990272 が出力される。


Last modified: