# 怎么拉取一个视频号账号发布的全部视频

> 按名称找到视频号账号，读账号资料，再一页页拉它的作品，带点赞、评论、转发和收藏：账号 ID 怎么拿、参数怎么填、Python 代码和花费。

网页版：https://okdata.online/zh/guides/wechat-channels-user-videos/

按顺序用三个接口：视频号账号搜索（用名称换到 v2_…@finder 账号 ID）、账号信息、账号作品逐页拉取。下面的示例一共 6 次调用，花费 $0.12；失败的调用不扣费。

更新于 2026-11-12

要做的事：你关心某一个视频号账号，可能是竞品，也可能是准备合作的博主，想把它发过的视频整理进表格。每条视频能拿到描述、发布时间、点赞、评论、转发、收藏和时长。账号资料这一步再补上主页能看到的信息：名称、签名、作品数、IP 属地，以及关联的公众号。

动手之前先搞清楚要用哪个 ID。App 和视频号助手里显示的“视频号 ID”是 `sph` 开头的一小串，这里的接口不认它。接口要的是微信内部用的账号 ID，`v2_` 开头、`@finder` 结尾，很长，比如 `v2_060000231003b20faec8c353a18ebca650858991e19fab55aa5e12f6d5010f5e0eeaaafc3520@finder`。这些接口没法把前者转成后者，所以要么按名称搜（第一步），要么从这个账号的任意一条视频里读 `author.id`。

## 分步操作

### 第一步：拿到账号 ID

调用[视频号账号搜索](https://okdata.online/zh/apis/wechat_channels/users/search/)，`query` 填账号名称。搜索走的是微信搜一搜，通常只返回名称最匹配的那一个账号，每次 $0.02。返回 `id`（就是 `v2_…@finder`）、`name`、`bio`、`avatar_url` 和 `verified`；加上 `view=full`，`ext.verified_by` 会给出认证主体，遇到同名账号时靠它分辨。

```bash
curl -G "https://api.okdata.online/v1/wechat_channels/users/search" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  --data-urlencode 'query=新华社' \
  --data-urlencode 'view=full'
```

如果手上已经有这个账号某条视频的分享链接，可以跳过搜索：[视频号作品详情](https://okdata.online/zh/apis/wechat_channels/videos/get/)返回的 `author.id` 就是账号 ID。

### 第二步：读账号资料

把 ID 传给[视频号账号信息](https://okdata.online/zh/apis/wechat_channels/users/get/)，每次 $0.02。返回 `name`、`bio`（签名）、`avatar_url`、`verified` 和 `posts`（作品数）。加上 `view=full`，`ext` 里还有 `ip_location`、`verified_reason`、`live_hours`（累计直播小时数）和 `linked_accounts`（比如关联的公众号）。`posts` 能告诉你列表有多长：除以 15 就是大概的页数。

```bash
curl -G "https://api.okdata.online/v1/wechat_channels/users/get" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  --data-urlencode 'id=v2_060000231003b20faec8c353a18ebca650858991e19fab55aa5e12f6d5010f5e0eeaaafc3520@finder' \
  --data-urlencode 'view=full'
```

`followers` 和 `likes` 经常是 null。很多账号微信不公开这两个数，大的媒体号尤其如此，这时 `meta.unavailable` 里标的是 `platform`。

### 第三步：逐页拉作品

[视频号账号作品](https://okdata.online/zh/apis/wechat_channels/users/videos/list/)用同一个 `id`，按从新到旧返回作品，每页约 15 条，每页 $0.02。每条有数字 `id`、`text`、`published_at`，以及 `metrics.likes`、`metrics.comments`、`metrics.shares` 和 `metrics.favorites`。加上 `view=full` 还有 `ext.duration_s` 和 `ext.location`。

```bash
curl -G "https://api.okdata.online/v1/wechat_channels/users/videos/list" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  --data-urlencode 'id=v2_060000231003b20faec8c353a18ebca650858991e19fab55aa5e12f6d5010f5e0eeaaafc3520@finder' \
  --data-urlencode 'view=full'
```

作品的 `url` 不是能打开的网页。视频号的视频没有网页版，所以 `url` 直接是视频文件地址，而且文件是加密的，解密用的 key 在同一次返回的 `ext.decode_key` 里（需要 `view=full`）。只是统计和对比数据的话，用不到这个文件。

要下一页，就把 `page.next_cursor` 原样作为 `cursor` 传回去。大号的作品可能有几千条，先想好在哪里停：按页数，或者按日期。

### 第四步：用 Python 串起来

脚本先找账号、打印资料，然后把作品写进 CSV，读满 `MAX_PAGES` 页，或者遇到一整页都早于 `SINCE` 的时候停下。

```python
import csv
import os
import requests

API = "https://api.okdata.online"
HEADERS = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
NAME = "新华社"
MAX_PAGES = 4                     # 每页一次调用，约 15 条
SINCE = "2026-09-01T00:00:00Z"    # 早于这个时间的作品不要


def get(path, **params):
    body = requests.get(API + path, headers=HEADERS, params=params, timeout=60).json()
    if body["code"] != "ok":
        raise RuntimeError(f"{body['code']}: {body['message']} (charged: {body['charged']})")
    return body


found = get("/v1/wechat_channels/users/search", query=NAME)["data"]["items"]
if not found:
    raise SystemExit(f"没有找到视频号账号：{NAME}")
account_id = found[0]["id"]

profile = get("/v1/wechat_channels/users/get", id=account_id, view="full")["data"]["item"]
print(profile["name"], "|", profile["posts"], "条作品 | 粉丝：", profile["followers"])

with open("channels_videos.csv", "w", newline="", encoding="utf-8-sig") as f:
    out = csv.writer(f)
    out.writerow(["video_id", "published_at", "text", "likes", "comments", "shares", "favorites", "duration_s"])
    cursor = None
    for _ in range(MAX_PAGES):
        params = {"id": account_id, "view": "full", **({"cursor": cursor} if cursor else {})}
        body = get("/v1/wechat_channels/users/videos/list", **params)
        items = body["data"]["items"]
        for v in items:
            if v["published_at"] >= SINCE:
                m = v["metrics"]
                out.writerow([v["id"], v["published_at"], v["text"], m["likes"], m["comments"],
                              m["shares"], m["favorites"], v["ext"].get("duration_s")])
        if not items or all(v["published_at"] < SINCE for v in items) or not body["page"]["has_more"]:
            break
        cursor = body["page"]["next_cursor"]
```

读 4 页就是上面的示例。读 20 页（约 300 条）的话，光作品列表就是 $0.40。

## 注意事项

- **两个 ID。** `sph` 开头的是展示用的 ID，接口要的是 `v2_…@finder`。拿到 `v2_` ID 就存下来，下次直接用，不用再搜。
- **同名账号。** 搜一搜按名称匹配，碰到粉丝号、山寨号或者同名的个人号时，先核对 `ext.verified_by` 和 `bio`，确认是你要找的那个账号再往下走。
- **列表的尽头。** 大号的作品列表里，`page.has_more` 可能一直是 `true`，直到某一页返回零条作品。脚本把空页也当成结束，你自己写的时候也这样处理。
- **没有播放量。** 视频号不公开播放次数，`metrics.views` 是 null。
- **数据被隐藏。** `followers` 或 `likes` 是 null，意思是微信没展示，不代表是零。
- **直播。** 账号的直播回放在另一个列表里：[视频号直播回放](https://okdata.online/zh/apis/wechat_channels/users/live_replays/list/)。
- **重试和查无此号。** 每次调用带一个 `Idempotency-Key` 请求头：24 小时内同样的请求配同样的 key，会拿回存下的结果，`meta.replayed` 为 `true`，不再扣费。ID 对不上任何账号时返回 `not_found`，不扣费。

想看这些视频下面大家说了什么，把作品 `id` 传给[视频号作品评论](https://okdata.online/zh/apis/wechat_channels/videos/comments/list/)。要每周盯几个账号，可以看[竞品监控](https://okdata.online/zh/solutions/competitor-monitoring/)。

## 示例花费

按名称找到“新华社”，读账号资料，再拉最新的 4 页作品（约 60 条）

| 接口 | 调用次数 | 单价 | 小计 |
|---|---|---|---|
| [视频号账号搜索](https://okdata.online/zh/apis/wechat_channels/users/search/) | 1 | $0.02 | $0.02 |
| [视频号账号信息](https://okdata.online/zh/apis/wechat_channels/users/get/) | 1 | $0.02 | $0.02 |
| [视频号账号作品](https://okdata.online/zh/apis/wechat_channels/users/videos/list/) | 4 | $0.02 | $0.08 |
| 合计 | 6 |  | $0.12 |

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

## 在你的 AI 里用（MCP）

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

可以这样说：找到视频号账号“新华社”，给我看账号资料，再把它最新的 60 条左右作品列成表：日期、描述、点赞、评论、转发、收藏和时长。

```json
{
  "endpoint": "wechat_channels.users.search",
  "params": {
    "query": "央视新闻"
  },
  "idempotency_key": "<新的 UUID>"
}
```

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

## 本指南用到的接口

- [视频号账号搜索](https://okdata.online/zh/apis/wechat_channels/users/search/) `wechat_channels.users.search`：$0.02/次 · 每页约 1 个账号
- [视频号账号信息](https://okdata.online/zh/apis/wechat_channels/users/get/) `wechat_channels.users.get`：$0.02/次
- [视频号账号作品](https://okdata.online/zh/apis/wechat_channels/users/videos/list/) `wechat_channels.users.videos.list`：$0.02/次 · 每页约 15 条视频

## 更多微信视频号内容

- [微信视频号 API](https://okdata.online/zh/apis/wechat_channels/)
- [视频号 API Python 教程：搜索、作品、账号和评论（2026）](https://okdata.online/zh/guides/wechat-channels-api-python/)
- [怎么批量导出视频号视频的评论和回复](https://okdata.online/zh/guides/wechat-channels-video-comments/)
- [视频号账号 ID（v2_…@finder）是什么，为什么 sph 开头的视频号 ID 用不了？](https://okdata.online/zh/answers/wechat-channels-finder-id/)
- [账号信息接口](https://okdata.online/zh/roles/accounts-get/)
- [账号作品列表接口](https://okdata.online/zh/roles/accounts-posts-list/)
- [账号搜索接口](https://okdata.online/zh/roles/accounts-search/)
