# Instagram API Python 教程：账号、帖子、评论和 Reels 字幕（2026）

> Instagram 官方 API 能做什么；再用 requests 写一个 Python 脚本，读取任意公开账号的资料、帖子、评论和 Reels 字幕：参数、翻页和费用。

网页版：https://okdata.online/zh/guides/instagram-api-python/

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

更新于 2026-11-12

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

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

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

## 分步操作

### 第一步：账号资料

[Instagram 账号信息](https://okdata.online/zh/apis/instagram/users/get/)接收 `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 不显示账号的累计点赞。

```bash
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 账号帖子](https://okdata.online/zh/apis/instagram/users/posts/list/)接收 `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` 时停下。

```bash
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 帖子评论](https://okdata.online/zh/apis/instagram/posts/comments/list/)接收短码 `id`，或者帖子链接 `url`。评论从新到旧，每页约 15 条，每页 $0.004。每条有 `id`、`text`、`author.username`、`likes`、`replies`（下面有几条回复）和 `published_at`；`author.name` 为 null。想看某条评论下的回复，把它的 `id` 和帖子短码（作为 `post_id`）传给[Instagram 评论回复](https://okdata.online/zh/apis/instagram/comments/replies/list/)。

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

### 第四步：Reels 里说了什么

[Instagram 视频字幕](https://okdata.online/zh/apis/instagram/posts/transcript/get/)接收短码或链接，返回 Reel 或视频帖子里说的话，每次 $0.004：带 `start`、`end`（单位秒）的 `segments`，以及完整的 `text`。只处理两分钟以内的视频。`lang` 返回 `und`（未识别），语言要紧的话自己检测一下。视频里没有人说话时返回 `not_found`，不扣费。

```bash
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` 秒；其他错误直接带着错误码和信息停下。

```python
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 和第三方社媒数据怎么选](https://okdata.online/zh/answers/official-api-vs-third-party-social-data/)。长期盯几个账号的做法，在[竞品监控](https://okdata.online/zh/solutions/competitor-monitoring/)里。

## 示例花费

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

| 接口 | 调用次数 | 单价 | 小计 |
|---|---|---|---|
| [Instagram 账号信息](https://okdata.online/zh/apis/instagram/users/get/) | 1 | $0.004 | $0.004 |
| [Instagram 账号帖子](https://okdata.online/zh/apis/instagram/users/posts/list/) | 3 | $0.004 | $0.012 |
| [Instagram 帖子评论](https://okdata.online/zh/apis/instagram/posts/comments/list/) | 2 | $0.004 | $0.008 |
| [Instagram 视频字幕](https://okdata.online/zh/apis/instagram/posts/transcript/get/) | 2 | $0.004 | $0.008 |
| 合计 | 8 |  | $0.032 |

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

## 在你的 AI 里用（MCP）

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

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

```json
{
  "endpoint": "instagram.users.get",
  "params": {
    "username": "nasa"
  },
  "idempotency_key": "<新的 UUID>"
}
```

MCP：`https://api.okdata.online/mcp`

## 本指南用到的接口

- [Instagram 账号信息](https://okdata.online/zh/apis/instagram/users/get/) `instagram.users.get`：$0.004/次
- [Instagram 账号帖子](https://okdata.online/zh/apis/instagram/users/posts/list/) `instagram.users.posts.list`：$0.004/次 · 每页约 12 条帖子
- [Instagram 帖子评论](https://okdata.online/zh/apis/instagram/posts/comments/list/) `instagram.posts.comments.list`：$0.004/次 · 每页约 15 条评论
- [Instagram 视频字幕](https://okdata.online/zh/apis/instagram/posts/transcript/get/) `instagram.posts.transcript.get`：$0.004/次

## 更多Instagram内容

- [Instagram API](https://okdata.online/zh/apis/instagram/)
- [评论接口](https://okdata.online/zh/roles/posts-comments-list/)
- [账号信息接口](https://okdata.online/zh/roles/accounts-get/)
- [账号作品列表接口](https://okdata.online/zh/roles/accounts-posts-list/)
- [字幕接口](https://okdata.online/zh/roles/transcripts-get/)

## 资料来源

- [Instagram Platform overview](https://developers.facebook.com/docs/instagram-platform/overview/) (读取于 2026-11-12)
- [Instagram API with Facebook Login: Business Discovery](https://developers.facebook.com/docs/instagram-platform/instagram-api-with-facebook-login/business-discovery/) (读取于 2026-11-12)
