# 平台改版或者数据源挂了，社媒数据接口会怎样？

> 抖音、X、YouTube 改版或数据源故障时，一个社媒数据接口应该怎么表现：切换数据源、失败不收费、状态可查、字段不变，以及该问服务商的几个问题。

网页版：https://okdata.online/zh/answers/social-data-api-reliability-failover/

**简短回答：**靠谱的接口会把故障挡在你的代码之外：有备用数据源就自动切过去；所有数据源都失败时返回一个不扣费的错误；字段保持不变。在 okdata 上，上游失败会返回一个不扣费、可以重试的错误，一小时后重试只付正常价格，比如 X 搜索每次 $0.006。

平台一直在变。抖音换请求签名，接口[说下线就下线](https://github.com/jackwener/OpenCLI/issues/2197)，开源工具[一停就要等人来修](https://github.com/Evil0ctal/Douyin_TikTok_Download_API/issues/652)。付费的数据接口并不能让这些事消失，你买的是有人替你处理。所以问任何一家服务商，关键是：他们处理的这段时间，你这边看到的是什么。

## 出故障时 okdata 怎么做

- **切换数据源。** 每个接口的数据源有固定顺序。有不止一个来源的接口，遇到上游失败、过载或超时，会先切到下一个来源，你这边感觉不到。
- **失败不收费。** 所有来源都失败时，返回 `upstream_failed`（502）或 `upstream_busy`（503），`charged: false`，`retry: "yes"`。一次失败的[抖音搜索](/zh/apis/douyin/videos/search/)不花钱，重试时照常 $0.02。
- **字段不变。** 每个来源都映射到同一套对象上。某个来源填不了的字段为 null，`meta.unavailable` 会说明原因，你的解析代码不会因此出错。
- **状态可查。** `GET https://api.okdata.online/v1/catalog/status` 不需要 key，会列出暂停的接口；[状态页](/zh/status/)上也能看到。

有一个限制：翻页用的 cursor 属于签发它的那个数据源。如果翻到一半那个来源挂了，下一页也会失败，不扣费；等一会儿重试，或者从第一页重新开始。

## 能扛过故障的任务

```python
import os, time, requests

H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

status = requests.get("https://api.okdata.online/v1/catalog/status", timeout=30).json()["data"]
paused = [e["id"] for e in status["endpoints"] if e["status"] != "available"]
if "x.posts.search" in paused:
    raise SystemExit("X 搜索暂停中，稍后再试")

def call(path, **params):
    for attempt in range(5):
        body = requests.get(f"https://api.okdata.online{path}", headers=H, params=params, timeout=90).json()
        if body["code"] == "ok":
            return body
        if body.get("retry") != "yes":          # not_found、invalid_params：不要重试
            raise RuntimeError(f"{body['code']}: {body['message']}")
        time.sleep(body.get("retry_after_seconds") or 2 ** attempt * 5)
    raise RuntimeError("仍然失败，去看状态页")

posts = call("/v1/x/posts/search", query="你的品牌", sort="latest")
```

## 该问服务商的四个问题

1. 平台改版后，你们一般会停多久？我怎么知道？
2. 故障期间失败的调用收不收钱？
3. 我依赖的接口有没有备用数据源？
4. 换数据源以后，字段名会不会变？

[X 帖子搜索](/zh/apis/x/posts/search/)、[YouTube 视频评论](/zh/apis/youtube/videos/comments/list/)这些接口都遵循同样的规则。哪些错误码扣费、哪些值得重试，完整列表见[错误码](/zh/docs/errors/)。

## 用到的接口

- [抖音视频搜索](https://okdata.online/zh/apis/douyin/videos/search/) `douyin.videos.search`：$0.02/次 · 每页约 20 条视频
- [X 帖子搜索](https://okdata.online/zh/apis/x/posts/search/) `x.posts.search`：$0.006/次 · 每页约 20 条帖子
- [YouTube 视频评论](https://okdata.online/zh/apis/youtube/videos/comments/list/) `youtube.videos.comments.list`：$0.004/次 · 每页约 20 条评论

更新于 2026-11-12
