请求与返回
okdata 每次调用的结构:路径、鉴权、统一返回结构、用 cursor 翻页、用 view 和 fields 精简返回,以及幂等重试。
路径和方法
每个接口的地址是 https://api.okdata.online/v1/ 加上把点换成斜杠的接口 id。douyin.videos.comments.list 就是 GET https://api.okdata.online/v1/douyin/videos/comments/list。参数放在查询字符串里。需要传列表(ids、keywords)的接口改用 POST 和 JSON 请求体,接口页会写明。
鉴权
把 key 作为 Bearer token 发送:
Authorization: Bearer okd_...
key 绝不放进 URL。目录、状态接口以及 MCP 的 find、describe 工具不需要 key。
统一返回结构
所有成功返回都是同一个外层结构:
{
"code": "ok",
"request_id": "0f6c2a8e-4b1d-4e0a-9a51-3c7d2b9e1f20",
"data": { "items": [] },
"page": { "next_cursor": "eyJvIjoyMH0", "has_more": true },
"warnings": [],
"meta": {
"capability": "douyin.videos.search",
"billing": { "amount": "0.004", "currency": "USD", "balance_after": "9.996" },
"unavailable": { "metrics.views": "platform" },
"cached": false,
"replayed": false,
"fetched_at": "2026-11-11T08:00:00Z"
}
}
- 列表接口返回
data.items和page;单对象接口返回data.item,没有page。 meta.billing.amount是这次调用的费用,美元,十进制字符串。算钱请按十进制处理,不要转成浮点数。meta.unavailable列出每个为 null 的字段和原因:platform(平台本来就不展示)或capability(暂时取不到)。meta.cached为 true 表示结果来自短期缓存;meta.fetched_at是从平台读取数据的时间。
翻页
一次调用返回一页。要下一页,就把 page.next_cursor 原样作为 cursor 传回。page.has_more: false 表示已经取完。每一页都单独计费,够用了就停:
import os
import requests
URL = "https://api.okdata.online/v1/douyin/videos/comments/list"
HEADERS = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
def comments(video_id, max_pages=5):
cursor = None
for _ in range(max_pages):
params = {"id": video_id, **({"cursor": cursor} if cursor else {})}
body = requests.get(URL, headers=HEADERS, params=params, timeout=60).json()
if body["code"] != "ok":
raise RuntimeError(body["message"])
yield from body["data"]["items"]
if not body["page"]["has_more"]:
return
cursor = body["page"]["next_cursor"]
抖音评论翻五页就是五次调用:$0.01。
view 和 fields
返回太长,模型读起来就费 token。两个参数可以精简:
view=compact每个对象返回更少的字段,standard是默认值,full会在ext里加上平台特有字段。fields=id,text,metrics.likes只保留你列出的字段,嵌套字段用点连接。
两者都不影响价格。
安全重试
每次调用都带上 Idempotency-Key 请求头,内容是一个你和请求一起保存的随机字符串。24 小时内用同一个 key 重发同一个请求,会直接返回保存的结果(meta.replayed: true),不再扣费。同一个 key 换了请求内容会被拒绝,返回 invalid_params。遇到 rate_limited 等 retry_after_seconds 秒;遇到 not_found 不要重试。全部情况见错误码页。
更新于 2026-11-11