如何通过Instagram API从帖子永久链接获取对应media_id?
从Instagram永久链接获取单帖media_id及media_url的实现方法
你之前用的business_discovery接口只能拉取授权绑定账号下的全量帖子列表,没法直接匹配单条permalink,以下是两种可直接落地的方案:
方案1:官方oEmbed接口直取(推荐,官方支持无兼容风险)
- 直接调用Meta官方提供的Instagram oEmbed接口,传入帖子永久链接即可直接返回对应
media_id,不需要提前查询帖子所属用户名,接口请求格式:
GET https://graph.facebook.com/{对应API版本,比如v19.0}/instagram_oembed ?url={需要查询的Instagram帖子完整permalink} &access_token={你的应用有效access_token}
- 接口返回的JSON结构中会直接携带
media_id字段,拿到ID后请求媒体详情接口即可获取media_url:
GET https://graph.facebook.com/{API版本}/{拿到的media_id} ?fields=media_url &access_token={和上面一致的有效access_token}
- 前置要求:
- 你的Meta应用需要开通
oEmbed、instagram_basic权限 - 目标帖子必须是公开状态,私密账号发布的内容无法通过该接口拉取
- access_token可使用应用绑定的Instagram商业账号/创作者账号生成的长期令牌
- 你的Meta应用需要开通
方案2:短链转码(备用,适合已知短链格式的场景)
- Instagram公开帖子的permalink固定格式为
https://www.instagram.com/p/{短码}/,其中{短码}部分是经过自定义Base64编码的media_id,可直接转码得到数字格式的media_id,不需要提前调用接口查ID - 转码逻辑:使用Instagram的自定义编码字符表
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_,把短码逐字符按64进制转十进制即可得到对应media_id - Python转码参考代码:
def shortcode_to_media_id(shortcode: str) -> int: charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" mid = 0 for c in shortcode: mid = mid * 64 + charset.index(c) return mid # 示例:提取permalink中/p/后的短码传入即可 # 比如链接为https://www.instagram.com/p/Cz123AbcXyZ/,短码就是Cz123AbcXyZ print(shortcode_to_media_id("Cz123AbcXyZ"))
提示:转码得到的media_id仍然需要配合有效access_token调用详情接口才能拿到
media_url,无法绕过平台权限校验。
内容的提问来源于stack exchange,提问作者Harsh Sinha
相关产品推荐
相关产品推荐

