问答

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

简短回答

用 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站视频搜索传 query,sort 可选 relevance(默认,综合排序)、latest(最新发布)和 most_viewed(最多播放)。每条结果带 BV 号、链接、标题、简介、发布时间、UP 主昵称和 mid、播放、点赞、评论数、收藏和标签。加上 view=full,ext 里还有 aid、时长、弹幕数和分区名。

搜索结果里没有投币和分享。某条视频需要这两个数的话,用 B站视频详情按 BV 号再查一次,每次 $0.002。

费用怎么算

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

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

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 里会写明。
  • 只能拿到公开视频,接口不登录任何账号,看不到登录后才有的内容。
  • 各种错误码的含义、哪些值得重试,见错误码说明。

什么时候自己做更合适

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

更新于