# B站搜索接口老是返回 -412，有没有更省事的搜视频办法？

> 不用自己做 wbi 签名、不用维护 buvid3 Cookie，也不怕 -412 风控，按关键词搜 B 站视频：用哪个接口、每页多少钱、Python 示例。

网页版：https://okdata.online/zh/answers/bilibili-search-api-412-error/

**简短回答：**用 okdata 的 B站视频搜索：传关键词和 API key 就行，不用算 wbi 签名，也不用续 buvid3 Cookie。每次调用返回一页约 20 个视频，$0.002，1,000 条结果共 $0.10。B 站那边拒绝请求时，你拿到的是可重试的错误，不扣费。

B 站返回 -412，意思是风控认定你的请求像机器。常见的经过是这样：一个每小时搜一次关键词的脚本，跑了一周都好好的，某天 wbi 的 img_key 和 sub_key 换了，或者 buvid3 过期了，或者同一个 IP 请求太密，之后每次都是 -412 或 -352。你可以继续修签名、换 IP，也可以把关键词交给一个专门处理这些事的接口，自己只拿干净的结果。

## 用哪个接口

[B站视频搜索](/zh/apis/bilibili/videos/search/)传 `query`，`sort` 可选 `relevance`（默认，综合排序）、`latest`（最新发布）和 `most_viewed`（最多播放）。每条结果带 BV 号、链接、标题、简介、发布时间、UP 主昵称和 mid、播放、点赞、评论数、收藏和标签。加上 `view=full`，`ext` 里还有 aid、时长、弹幕数和分区名。

搜索结果里没有投币和分享。某条视频需要这两个数的话，用 [B站视频详情](/zh/apis/bilibili/videos/get/)按 BV 号再查一次，每次 $0.002。

## 费用怎么算

| 任务 | 调用次数 | 费用 |
|---|---|---|
| 一页，约 20 个视频 | 1 | $0.002 |
| 一个关键词翻 10 页 | 10 | $0.02 |
| 1,000 个视频 | 50 | $0.10 |
| 5 个关键词，每天只看第一页，跑 30 天 | 150 | $0.30 |

每翻一页就是一次调用，单独计费。出错的调用一律不扣钱，包括 B 站在上游拒绝了请求的情况。

## Python 示例：带重试

```python
import os, time, uuid, requests

URL = "https://api.okdata.online/v1/bilibili/videos/search"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

def search(query, sort="relevance", cursor=None):
    params = {"query": query, "sort": sort, "view": "full"}
    if cursor:
        params["cursor"] = cursor
    key = str(uuid.uuid4())  # 重试时用同一个 key，不会重复扣费
    for _ in range(4):
        body = requests.get(URL, headers={**H, "Idempotency-Key": key}, params=params, timeout=60).json()
        if body["code"] == "ok":
            return body
        if body.get("retry") == "yes":
            time.sleep(body.get("retry_after_seconds") or 3)
            continue
        raise RuntimeError(f"{body['code']}: {body['message']}")
    raise RuntimeError("重试 4 次仍失败")

page = search("Claude Code 教程", sort="most_viewed")
for v in page["data"]["items"]:
    print(v["id"], v["metrics"]["views"], v["ext"]["danmaku"], v["title"])
```

## 需要留意的地方

- B 站搜索翻到一定深度就不再给结果，网页上也是这样。话题太宽的时候，拆成几个更具体的关键词，比一直往后翻有效。
- 搜索结果没有分享数，这个字段是 null，`meta.unavailable` 里会写明。
- 只能拿到公开视频，接口不登录任何账号，看不到登录后才有的内容。
- 各种错误码的含义、哪些值得重试，见[错误码说明](/zh/docs/errors/)。

## 什么时候自己做更合适

社区整理的 bilibili-API-collect 文档把 wbi 签名讲得很细，开源的 Python 库 bilibili-api 也替你处理了签名和 Cookie。如果你要用的接口这里没有，或者量非常大、手上本来就有现成的服务器和代理，自己维护只花时间不花钱。只是临时找二十个视频的话，直接在 B 站搜索框里搜就够了。要做系统的选题研究，可以看看[内容研究方案](/zh/solutions/content-research/)，里面讲了搜索、详情和评论怎么配合着用。

## 用到的接口

- [B站视频搜索](https://okdata.online/zh/apis/bilibili/videos/search/) `bilibili.videos.search`：$0.002/次 · 每页约 20 条视频
- [B站视频详情](https://okdata.online/zh/apis/bilibili/videos/get/) `bilibili.videos.get`：$0.002/次

更新于 2026-11-12
