使用Facebook Oembed获取所有Instagram帖子

问题描述

我已经按照https://developers.facebook.com/docs/plugins/oembed/的指南进行操作了。

我的问题是,如何动态获取我的帖子网址?所以我可以重复使用此端点作为我的帖子数量

https://graph.facebook.com/v8.0/instagram_oembed?url={postUrl}&access_token={access_token}

文档显示的方法是将URL硬编码到端点url中,这似乎是多余的

解决方法

目前无法根据文档(或网络上的任何其他地方)使用 oEmbed API 获取 Instagram 个人资料的所有帖子 URL。您必须通过以下方式获取所有帖子短代码(链接):

  1. https://www.instagram.com/{profile_handle}/?__a=1 发出 GET 请求。这些天有一个非常严格的速率限制,因此强烈建议第一次缓存结果,可能使用本地存储。
  2. 如果配置文件是公开的,结果将是一个包含所有配置文件信息的 JSON 对象。您可以通过检查 [data].graphql.user.is_private
  3. 来检查请求配置文件是否公开
  4. 对于每个 [data].graphql.user.edge_owner_to_timeline_media.edges.node,获取 shortcode 属性。
  5. 最后,创建您的动态帖子 URI https://www.instagram.com/p/{shortcode}

或者,您可以向 `https://www.instagram.com/{profile_handle} 发出 GET 请求,并使用正则表达式在 HTML 响应中获取包含配置文件数据的类似 JSON 对象,如下所示:

const uri = `https://www.instagram.com/${handle}/`;
const instaRes = await axios.get(uri);
const html = instaRes.data;
const regex = /_sharedData = (.*);<\/script>/m;
const json = JSON.parse(regex.exec(html)[1]);

这里的速率限制也很严格,所以使用一定要缓存。测试可能会很痛苦,因为当达到速率限制时,您可能需要更改几次 IP 地址。

相关问答

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