问答

跑一个社媒数据任务之前,怎么提前知道要花多少钱?

简短回答

先数调用次数,再乘以各接口公开的单价。一个抖音调研任务,30 次搜索加 150 页评论,在 okdata 上是 $0.90:搜索每次 $0.02,评论每页 $0.002。按次计费的价格和返回条数无关,所以这个估算也就是这次任务最多会花的钱。

市场负责人批一次数据采集之前,总得有人先报个价。按次计费的接口,报价就是算术题,三步做完。

第一步:把任务写成调用次数

一个典型的抖音品类调研:10 个关键词,每个搜 3 页,再从里面挑 30 条视频看评论,每条拉 5 页。

步骤 接口 次数 费用
搜索 抖音视频搜索 10 × 3 = 30 $0.60
评论 抖音视频评论 30 × 5 = 150 $0.30
合计 180 {{cost:douyin.videos.search30+douyin.videos.comments.list150}}

同样的结构放到 YouTube,搜索这一步用 YouTube 视频搜索,是 $0.12。

第二步:按价格表算,再在代码里封顶

所有价格都在价格页,页面上还有按月估算的费用计算器;机器可读的版本在 https://okdata.online/prices.json。通过 MCP 接入的智能体可以先调用免费的 describe 工具查单价,再决定要不要花钱。

import os, requests
from decimal import Decimal

book = requests.get("https://okdata.online/prices.json", timeout=30).json()
price = {e["id"]: Decimal(e["price"]) for e in book["endpoints"]}
plan = {"douyin.videos.search": 30, "douyin.videos.comments.list": 150}
estimate = sum(price[k] * n for k, n in plan.items())
print("预估:", estimate, "USD")

BUDGET, spent = estimate, Decimal("0")
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

def call(endpoint_path, **params):
    global spent
    if spent >= BUDGET:
        raise RuntimeError(f"已到预算上限: {spent} USD")
    body = requests.get(f"https://api.okdata.online{endpoint_path}", headers=H, params=params, timeout=60).json()
    if body["code"] != "ok":
        raise RuntimeError(f"{body['code']}: {body['message']}")
    spent += Decimal(body["meta"]["billing"]["amount"])
    return body

first_page = call("/v1/douyin/videos/search", query="露营装备")

第三步:边跑边核对

每次返回都带 meta.billing.amount 和 balance_after。随时可以用 GET https://api.okdata.online/v1/account 看余额,用 GET https://api.okdata.online/v1/calls/{request_id} 查任何一次调用花了多少。

为什么估算靠得住

  • 按次计费的接口,一页 20 条和一页 3 条价格一样,结果少了不会更贵。
  • 每次调用前,先从余额里冻结这次最多可能花的钱。余额不够就直接拒绝,返回 insufficient_balance,不扣费。
  • 唯一按条计费的公众号搜索,每次最多 $0.58。

估算的偏差多半来自计划本身:某个关键词内容比预想的少,提前翻到底,花得更少;让智能体一直找到满意为止,就可能跑很久。给智能体同时设预算和翻页上限。

更新于