给 AI

操作指南

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

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

更新于

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

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

分步操作

第一步:拿到账号 ID

调用视频号账号搜索,query 填账号名称。搜索走的是微信搜一搜,通常只返回名称最匹配的那一个账号,每次 $0.02。返回 id(就是 v2_…@finder)、name、bio、avatar_url 和 verified;加上 view=full,ext.verified_by 会给出认证主体,遇到同名账号时靠它分辨。

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

如果手上已经有这个账号某条视频的分享链接,可以跳过搜索:视频号作品详情返回的 author.id 就是账号 ID。

第二步:读账号资料

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

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。

第三步:逐页拉作品

视频号账号作品用同一个 id,按从新到旧返回作品,每页约 15 条,每页 $0.02。每条有数字 id、text、published_at,以及 metrics.likes、metrics.comments、metrics.shares 和 metrics.favorites。加上 view=full 还有 ext.duration_s 和 ext.location。

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 的时候停下。

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,意思是微信没展示,不代表是零。
  • 直播。 账号的直播回放在另一个列表里:视频号直播回放。
  • 重试和查无此号。 每次调用带一个 Idempotency-Key 请求头:24 小时内同样的请求配同样的 key,会拿回存下的结果,meta.replayed 为 true,不再扣费。ID 对不上任何账号时返回 not_found,不扣费。

想看这些视频下面大家说了什么,把作品 id 传给视频号作品评论。要每周盯几个账号,可以看竞品监控。

示例花费

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

接口调用次数单价小计
视频号账号搜索1$0.02$0.02
视频号账号信息1$0.02$0.02
视频号账号作品4$0.02$0.08
合计6$0.12

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

在你的 AI 里用(MCP)

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

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

智能体第一次调用 call 工具时发送的内容
{
  "endpoint": "wechat_channels.users.search",
  "params": {
    "query": "央视新闻"
  },
  "idempotency_key": "<新的 UUID>"
}

配置 MCP 服务 →

接上一次,以后直接问 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