Instagram媒体ID到时间戳的转换

问题描述

Instagram在此博客文章中解释了如何创建媒体ID

https://instagram-engineering.com/sharding-ids-at-instagram-1cf5a71e5a5c

我们每个ID均包含:41位时间(以毫秒为单位)(给定 我们具有自定义纪元的41年ID)13位代表 逻辑碎片ID 10位,代表自动递增序列, 模数1024。这意味着我们可以为每个分片,每个生成1024个ID。 毫秒。

我们的“时代”始于2011年1月1日 不确定这是实际产值还是仅用于示例

如何从媒体ID找回时间戳?

我有两个媒体ID,我知道时间戳,但是我需要从其他媒体ID中提取

2384288897814875714 2020-08-26T13:43:27Z

2383568809444681765 2020-08-25T13:52:46Z

解决方法

playground

package main

import (
    "fmt"
    "time"
)

const (
    instaEpoch int64 = 1314220021721
    mediaID int64 = 2384288897814875714
)

func main()  {
    extractedTimestamp := mediaID >> (64-41)
    timeFromMediaID := extractedTimestamp + instaEpoch
    fmt.Println(time.Unix(timeFromMediaID/1000,0).UTC())
}

输出:

2020-08-26 13:43:27 +0000 UTC

您可以右移ID来获取时间戳。然后,您必须将毫秒添加到instagram正在使用的时代。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...