问答

按次计费的数据接口,会不会项目做到一半突然涨价?

简短回答

会。任何服务商都可能调价,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 万次调用的回溯之前,花两分钟对一遍价格表,很便宜的保险。

最新价格和哪些情况不收费,见价格页。

更新于