问答
跑一个社媒数据任务之前,怎么提前知道要花多少钱?
简短回答
先数调用次数,再乘以各接口公开的单价。一个抖音调研任务,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。
估算的偏差多半来自计划本身:某个关键词内容比预想的少,提前翻到底,花得更少;让智能体一直找到满意为止,就可能跑很久。给智能体同时设预算和翻页上限。
更新于