给 AI

操作指南

Instagram API Python 教程:账号、帖子、评论和 Reels 字幕(2026)

Instagram 官方 API 只服务你自己拥有或管理的专业账号。要拿任意账号的公开数据,按顺序用四个接口:Instagram 账号信息、Instagram 账号帖子、Instagram 帖子评论和 Instagram 视频字幕。下面的示例一共 8 次调用,最多花费 $0.032;失败的调用不扣费。

更新于

Instagram 有官方 API,而且在某一类事情上就是最合适的工具。Meta 的 Instagram Platform 概览把它描述为一组面向 Instagram 专业账号(即商家账号和创作者账号)的 API,账号要么是你自己拥有或管理的,要么是登录了你的应用的用户的。能做的事包括发布内容、管理评论、收发私信和查看数据洞察。对别人的账号,它提供 Business Discovery,可以拿到其他专业账号的基础信息和指标,有年龄限制的账号则什么都不返回。如果你要处理的是自己的账号,就用 Meta 的官方 API。

这篇教程解决的是另一件事:用 Python、只靠 requests,读取任意公开账号的公开数据,比如竞品、想合作的博主、在研究的品牌。最后每个账号得到一个 JSON 文件:账号资料、最近的帖子和各项数据、讨论最多的帖子下的评论,以及播放最多的 Reels 里说了什么,带时间戳。

不需要登录 Instagram,不用建 Meta 应用,也不用 access token。每次调用就是带着 key 发一个 HTTPS 请求。

分步操作

第一步:账号资料

Instagram 账号信息接收 username(带不带 @ 都行),返回一个账号,每次 $0.004:id(数字账号 ID)、username、name、bio、followers、following、posts、verified 和 avatar_url。加 view=full 还有 ext.private(是否私密)、ext.website、ext.links(简介里的链接)、ext.category 和 ext.business。likes 为 null,因为 Instagram 不显示账号的累计点赞。

curl -G "https://api.okdata.online/v1/instagram/users/get" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  -d username=northfieldbakery -d view=full

往下走之前先看 ext.private。私密账号的资料能拿到,但它的帖子不公开。

第二步:帖子

Instagram 账号帖子接收 username 和 type:all(默认,全部帖子)或 reel(只要 Reels,取自账号的 Reels 标签页)。帖子从新到旧,每页 12 条,每页 $0.004。每条帖子有:

  • id:短码,也就是链接里 /p/ 或 /reel/ 后面那一段,比如 DQx7pLk2mVe。评论和字幕接口都用它。
  • type:Reels 和视频为 video,图片和多图帖为 image。
  • text(文案)、hashtags、images、published_at 和 url。
  • metrics.likes、metrics.comments,视频还有 metrics.views(播放数)。

加 view=full 会多出 ext.duration_s(时长)、ext.coauthors(合拍帖的其他作者)、ext.product_type 和 ext.media_id。要下一页,就把 page.next_cursor 作为 cursor 传回去;page.has_more 为 false 时停下。

curl -G "https://api.okdata.online/v1/instagram/users/posts/list" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  -d username=northfieldbakery -d type=all -d view=full

第三步:评论

Instagram 帖子评论接收短码 id,或者帖子链接 url。评论从新到旧,每页约 15 条,每页 $0.004。每条有 id、text、author.username、likes、replies(下面有几条回复)和 published_at;author.name 为 null。想看某条评论下的回复,把它的 id 和帖子短码(作为 post_id)传给Instagram 评论回复。

curl -G "https://api.okdata.online/v1/instagram/posts/comments/list" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  -d id=DQx7pLk2mVe

第四步:Reels 里说了什么

Instagram 视频字幕接收短码或链接,返回 Reel 或视频帖子里说的话,每次 $0.004:带 start、end(单位秒)的 segments,以及完整的 text。只处理两分钟以内的视频。lang 返回 und(未识别),语言要紧的话自己检测一下。视频里没有人说话时返回 not_found,不扣费。

curl -G "https://api.okdata.online/v1/instagram/posts/transcript/get" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  -d id=DRb3nVw8kQz

第五步:完整脚本

脚本最多调用 8 次:1 次账号资料、最多 3 页帖子、2 页评论、2 份字幕。每个逻辑请求都有自己的 Idempotency-Key,网络断了重试也不会扣两次钱。遇到 rate_limited 就等 retry_after_seconds 秒;其他错误直接带着错误码和信息停下。

import json
import os
import time
import uuid
import requests

API = "https://api.okdata.online"
KEY = os.environ["OKDATA_API_KEY"]
USERNAME = "northfieldbakery"
POST_PAGES = 3      # 每页 12 条帖子;每页一次调用
COMMENT_POSTS = 2   # 评论最多的几条帖子,各读第一页评论
TRANSCRIPTS = 2     # 两分钟以内、播放最多的几条视频


class ApiError(Exception):
    def __init__(self, body):
        super().__init__(f"{body['code']}: {body['message']} (charged: {body['charged']})")
        self.code = body["code"]


def call(path, **params):
    headers = {"Authorization": f"Bearer {KEY}", "Idempotency-Key": str(uuid.uuid4())}
    for attempt in range(3):
        try:
            body = requests.get(API + path, headers=headers, params=params, timeout=90).json()
        except requests.RequestException:
            time.sleep(2 ** attempt)  # 重试沿用同一个 key,不会重复扣费
            continue
        if body["code"] == "ok":
            return body
        if body["code"] == "rate_limited":
            time.sleep(body.get("retry_after_seconds") or 2)
            continue
        raise ApiError(body)
    raise RuntimeError(f"{path}: no answer after 3 attempts")


profile = call("/v1/instagram/users/get", username=USERNAME, view="full")["data"]["item"]
if profile["ext"]["private"]:
    raise SystemExit(f"@{USERNAME} is private; its posts are not public")

posts, cursor = [], None
for _ in range(POST_PAGES):
    body = call("/v1/instagram/users/posts/list", username=USERNAME, view="full", **({"cursor": cursor} if cursor else {}))
    posts += body["data"]["items"]
    if not body["page"]["has_more"]:
        break
    cursor = body["page"]["next_cursor"]

for post in sorted(posts, key=lambda p: p["metrics"]["comments"] or 0, reverse=True)[:COMMENT_POSTS]:
    post["comment_page"] = call("/v1/instagram/posts/comments/list", id=post["id"])["data"]["items"]

videos = [p for p in posts if p["type"] == "video" and (p["ext"]["duration_s"] or 0) <= 120]
for post in sorted(videos, key=lambda p: p["metrics"]["views"] or 0, reverse=True)[:TRANSCRIPTS]:
    try:
        post["transcript"] = call("/v1/instagram/posts/transcript/get", id=post["id"])["data"]["item"]
    except ApiError as err:
        if err.code != "not_found":  # 视频里没人说话:不扣费
            raise

with open(f"{USERNAME}.json", "w", encoding="utf-8") as f:
    json.dump({"profile": profile, "posts": posts}, f, ensure_ascii=False, indent=2)
print(profile["followers"], "followers;", len(posts), "posts saved")

想往前多翻,就调大 POST_PAGES:10 页约 120 条帖子,光帖子就要 $0.04。

注意事项

  • 短码就是帖子 ID。 所有帖子类接口都接收短码作为 id,或者完整链接作为 url。别的工具要 Instagram 的数字媒体 ID 时,用 ext.media_id。
  • 评论只能从新到旧。 没有按点赞排序的选项。想找最有共鸣的评论,多读几页,自己按 likes 排。
  • 哪些字段是空的。 帖子没有 title;分享、收藏、转发数为 null,因为 Instagram 不公开。只有视频有播放数。
  • 只看 Reels。 type=reel 列的是 Reels 标签页。研究视频内容时用它,可以省下翻图片帖的那些页。
  • 失败的调用不收钱,已删除帖子和没有人声的视频返回的 not_found 也不收钱。
  • 用官方 API 看别人的账号。 Business Discovery 能拿到其他专业账号的基础信息和指标。如果这些就够用,而且你本来就有 Meta 应用,用它也很好。

要权衡 Meta 官方 API 和第三方 API 哪个更适合你的项目,看官方 API 和第三方社媒数据怎么选。长期盯几个账号的做法,在竞品监控里。

示例花费

一个账号的资料、最近三页帖子、评论最多的两条帖子的第一页评论,以及播放最多的两条 Reels 的字幕

接口调用次数单价小计
Instagram 账号信息1$0.004$0.004
Instagram 账号帖子3$0.004$0.012
Instagram 帖子评论2$0.004$0.008
Instagram 视频字幕2$0.004$0.008
合计8$0.032

按本页生成时的价格计算。失败的调用不扣费。

在你的 AI 里用(MCP)

先接好 MCP 服务,然后直接说你要什么。智能体会自己找到这些接口、看清价格,再用你的余额调用。

可以这样说查一下 Instagram 账号 northfieldbakery:粉丝数和简介,最近 36 条帖子的点赞、评论和播放,评论最多的两条帖子的第一页评论,以及播放最多的两条 Reels 里说了什么。总结一下它的粉丝最常问什么。

智能体第一次调用 call 工具时发送的内容
{
  "endpoint": "instagram.users.get",
  "params": {
    "username": "nasa"
  },
  "idempotency_key": "<新的 UUID>"
}

配置 MCP 服务 →

资料来源

  1. Instagram Platform overviewdevelopers.facebook.com · 读取于
  2. Instagram API with Facebook Login: Business Discoverydevelopers.facebook.com · 读取于

接上一次,以后直接问 AI。

新 key 自带 $0.10 试用额度。贴一句话,就能接进你的智能体。

免费开始
一句话接进你的 AI

把这句话发给你的智能体

读一下 https://okdata.online/zh/agents.md,帮我把 okdata 配好;我的 key 在环境变量 OKDATA_API_KEY 里。

Claude Code、Cursor、Codex 等能打开网址的智能体,读完会自己配好。

MCP 地址https://api.okdata.online/mcp