问答
把一个博主的全部历史作品拉下来要多少钱?
简短回答
在 okdata 上回溯一个账号,按作品列表的页数计费。600 条视频的抖音博主是 30 页,$0.06;600 篇小红书笔记 $0.60;600 条 X 帖子 $0.18。有 600 篇文章的公众号每页 10 篇,要 60 页,$2.40。
做竞品复盘,第一步往往是把对方账号从开号到现在发过的东西全拉一遍,看哪几条爆了。做法就是沿着账号的作品列表从新往旧翻,一页一次调用。费用等于页数乘以每页价格,页数等于作品数除以每页条数。
按账号规模算
| 平台 | 接口 | 每页条数 | 600 条 | 3000 条 |
|---|---|---|---|---|
| 抖音 | 抖音账号作品列表 | 20 | $0.06 | $0.30 |
| 小红书 | 小红书博主笔记列表 | 20 | $0.60 | $3.00 |
| X | X 账号帖子列表 | 20 | $0.18 | $0.90 |
| 微信公众号 | 公众号历史文章 | 10 | $2.40 | $12.00 |
列表里每一条已经带正文、发布时间和互动数据,回溯时基本不用再逐条查详情。公众号要先拿到原始 ID,用一次公众号搜索,按返回的账号数计费,每个 $0.058。
中断了也不白花钱
每拉到一页就落盘,并且用账号和 cursor 算出这一页的 Idempotency-Key。脚本中途挂了,24 小时内重跑,已经付过钱的页会从存档直接返回,不再扣费。
import hashlib, json, os, requests
URL = "https://api.okdata.online/v1/douyin/users/videos/list"
KEY = os.environ["OKDATA_API_KEY"]
def backfill(sec_uid, path):
cursor = None
with open(path, "w", encoding="utf-8") as out:
while True:
page_key = hashlib.sha256(f"{sec_uid}|{cursor}".encode()).hexdigest()
h = {"Authorization": f"Bearer {KEY}", "Idempotency-Key": page_key}
params = {"id": sec_uid, **({"cursor": cursor} if cursor else {})}
body = requests.get(URL, headers=h, params=params, timeout=60).json()
if body["code"] != "ok":
raise RuntimeError(f"{body['code']}: {body['message']}")
for post in body["data"]["items"]:
out.write(json.dumps(post, ensure_ascii=False) + "\n")
if not body["page"]["has_more"]:
return
cursor = body["page"]["next_cursor"]
重跑时还是从第一页开始,但重放的那些页 meta.replayed 为 true,扣费为 0。
提前知道的限制
- 拿到的是平台公开展示的内容。隐藏或删除的作品不在列表里,
page.has_more变成 false 就说明公开可见的已经到底了。 - 返回的是作品数据和媒体链接,不替你下载视频文件;下载视频用 yt-dlp 这类工具更合适。
- 如果是你自己的账号,平台的创作者后台有曝光、粉丝画像这些公开接口拿不到的数据。
回溯完之后的日常跟踪更省钱,做法见竞品监测。
更新于