问答

把一个博主的全部历史作品拉下来要多少钱?

简短回答

在 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 这类工具更合适。
  • 如果是你自己的账号,平台的创作者后台有曝光、粉丝画像这些公开接口拿不到的数据。

回溯完之后的日常跟踪更省钱,做法见竞品监测。

更新于