问答
按次计费的数据接口,会不会项目做到一半突然涨价?
简短回答
会。任何服务商都可能调价,X 也调过。okdata 每次调用按调用那一刻的接口价格扣费(目前 X 帖子搜索 $0.006,抖音搜索 $0.02),价格表带版本号,脚本可以盯着它;每次返回也写明了这次实际扣了多少,价格一变,变后的第一次调用就能发现。
数据接口调价常见到值得提前准备。2026 年,X 把每月 200 美元的 Basic 套餐换成了按量付费的预充值额度。某个热门的 X 爬虫改了每千条结果的定价,有用户直接发帖质疑新价格。V2EX 上也有人发现 各家 API 中转都涨了不少。调价本身不稀奇,关键是你当天就发现,还是月底对账才发现。
okdata 提供的发现手段
- 带版本号的价格表。
https://okdata.online/prices.json列出全部接口的价格,并带price_book版本号。版本号变了,就说明有接口调价了。 - 每次返回都写明扣费。
meta.billing.amount是这一次的准确费用:X 帖子搜索目前 $0.006,抖音视频搜索目前 $0.02。 - 没有要解约的合同。 预充值、没有套餐,价格不合适的那天就可以停下或者换掉。
这里没有锁定一段时间价格的承诺。长期合作型的项目,可以发邮件给 hello@okdata.online,书面确认。
让流水线自己发现
import json, os, pathlib, requests
from decimal import Decimal
book = requests.get("https://okdata.online/prices.json", timeout=30).json()
seen = pathlib.Path("price_book.json")
if seen.exists() and json.loads(seen.read_text())["price_book"] != book["price_book"]:
print("价格表有变化:本次运行前先核对价格")
seen.write_text(json.dumps({"price_book": book["price_book"]}))
expected = {e["id"]: Decimal(e["price"]) for e in book["endpoints"]}
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
body = requests.get("https://api.okdata.online/v1/x/posts/search", headers=H,
params={"query": "你的品牌", "sort": "latest"}, timeout=60).json()
charged = Decimal(body["meta"]["billing"]["amount"])
if charged > expected["x.posts.search"]:
raise SystemExit(f"实际扣费 {charged},预期 {expected['x.posts.search']},停止运行")
把预算本身护住
- 承诺期越短越好。 年付能拿折扣,但一旦调价就很被动。按次付费加适量余额,风险就限于已经充进去的那部分。
- 把服务商藏在一个函数后面。 业务代码只调用
search_posts(),不直接写死某家的地址,换一家只要一个下午。 - 预算留余量。 按今天的价格算完,再加 20% 到 30%,留给补采和调价。
- 大任务前重新估一次。 跑 5 万次调用的回溯之前,花两分钟对一遍价格表,很便宜的保险。
最新价格和哪些情况不收费,见价格页。
更新于