检查 Instagram 照片访问 URL 是否已过期

问题描述 投票:0回答:1

我正在从 Graph API 获取 Instagram 图像,特别是 IG 用户媒体 终点

要求:

GET /me/media/?
    access_token=<token>&
    fields=id,caption,media_type,media_url,permalink,timestamp,username

媒体 URL 保存到数据库中,格式为:

https://scontent-iad3-1.cdninstagram.com/v/t51.29350-15
  /336488XXX_42796964621XXXX_411090403787759XXXX_n.jpg?
    _nc_cat=107&
    ccb=1-7&
    _nc_sid=8ae9d6&
    _nc_ohc=Pji5XmNsjN4AX-9CEpw&
    _nc_ht=scontent-iad3-1.cdninstagram.com&
    edm=ANo9K5cEAAAA&
    oh=00_AfCauzwgMIg6CNeeGLrt9OwVmW72sy9ndxgaMYciKOHxhw&
    oe=650CEAF2

现在,这些 URL 在一定时间后就会过期。
问题是我不知道那个时间段是什么。

可以使用每 x 小时的计时作业更新网址,但选项是:

  • 更新数据库中的每个URL
  • 知道网址何时过期
  • 每次用户加载页面时都会获取一个新的网址,但这似乎有点过分了

经过几次测试,看起来在短时间内(约 1 小时,也许更长)多次调用获取资产会返回完全相同的 url。
我的理解是,这使事情变得更加复杂,因为这意味着网址不会根据请求的时间而过期,而是具有固定的窗口。

可以从url参数中获取过期时间吗?
有没有关于 Instagram 如何处理 URL 过期的详细信息的文档?

instagram instagram-api instagram-graph-api
1个回答
0
投票

结果

oe
url 参数包含以十六进制编码的到期时间戳。

在 JavaScript/TypeScript 中检查 url 何时过期:

export function isIgMediaUrlValidTill(
  mediaUrl: string | URL,
  till: Date = new Date()
): boolean {
  let url = new URL(mediaUrl);
  let urlExpiryTimestamp = parseInt(url.searchParams.get("oe") ?? "0", 16);
  let tillTimestamp = Math.floor(till.getTime() / 1000);
  return tillTimestamp <= urlExpiryTimestamp;
}
© www.soinside.com 2019 - 2024. All rights reserved.