时间就是生命,无端的空耗别人的时间,其实无异于谋财害命的。——鲁迅

今天来点真材实料:把 B 站的接口资料“一网打尽”的开源文档库——bilibili-API-collect。仓库地址:SocialSisterYi/bilibili-API-collect,官网文档(GitHub Pages):https://socialsisteryi.github.io/bilibili-API-collect/

一句话(来自仓库 description):哔哩哔哩-API收集整理【不断更新中…】

这玩意儿到底有啥用

  • 它是面向开发者的“接口百科全书”:把 B 站的各类 API 使用方法集中整理,持续更新。
  • 主题覆盖广(见仓库 Topics):api、bilibili、bilibili-api、bilibili-live、bilibili-login、bilibili-download、bilibili-danmaku、bilibili-comment、grpc、json。
  • 自带文档站点:用 VuePress(仓库有 .vuepress 目录)把 Markdown 文档发布成可浏览的网站,阅读体验轻松。

仓库信息和结构(节选)

这类“接口收集整理”的价值在哪

  • 找得到:分门别类,把“视频、弹幕、评论、登录、直播、下载”相关接口放在一个地方。
  • 看得懂:中文文档、示例与注意事项,降低摸索成本。
  • 跟得上:持续更新(“不断更新中…”),适配平台变化。
  • 扩展到 gRPC:除了传统 HTTP/JSON,也有与 gRPC 相关的资料(见 grpc_api 目录)。

如何快速食用

  • 直接访问文档站首页,按章节浏览:https://socialsisteryi.github.io/bilibili-API-collect/
  • 在仓库里搜你关心的主题(比如 danmaku/comment/login 等),���到对应文档。
  • 按文档说明准备请求头、参数、鉴权方式(可能涉及 Cookie、Token、UA、Referer 等)。
  • 留意平台规则与风控,合法合理使用。

上点“安全”的代码案例(不假设具体接口路径,演示通用调用范式,实际 URL、参数、Header 请以官方文档为准)

示例 A:Node.js 最小化 GET 请求(Open fetch)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 最���示例:替换成文档里的实际 API 地址与参数
const API_URL = process.env.BILI_API_URL || "https://example.bilibili.com/xxx"; // 占位
const QUERY = new URLSearchParams({ /* ...填入文档要求的参数... */ });

(async () => {
const resp = await fetch(`${API_URL}?${QUERY.toString()}`, {
method: "GET",
headers: {
"User-Agent": "Mozilla/5.0",
"Referer": "https://www.bilibili.com/",
"Accept": "application/json",
// 若文档要求 Cookie/Token,请按说明添加
// "Cookie": "SESSDATA=xxx; ...",
// "Authorization": "Bearer xxx"
}
});
if (!resp.ok) {
throw new Error(`HTTP ${resp.status}`);
}
const data = await resp.json();
console.log("响应数据:", data);
})();

示例 B:Python requests 最小化 POST 请求(带参数)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import os
import requests

API_URL = os.getenv("BILI_API_URL", "https://example.bilibili.com/xxx") # 占位
payload = {
# 按文档填写实际的表单/JSON参数
# "aid": "...",
# "cid": "...",
}
headers = {
"User-Agent": "Mozilla/5.0",
"Referer": "https://www.bilibili.com/",
"Accept": "application/json",
# "Cookie": "SESSDATA=xxx; ...",
# "Authorization": "Bearer xxx",
}

resp = requests.post(API_URL, json=payload, headers=headers, timeout=10)
resp.raise_for_status()
print("响应数据:", resp.json())

示例 C:curl 单行命令(检查连通性)

1
2
3
4
5
6
# 替换 URL 与参数为文档中给出的实际接口
curl -sS "https://example.bilibili.com/xxx?aid=..." \
-H "User-Agent: Mozilla/5.0" \
-H "Referer: https://www.bilibili.com/" \
-H "Accept: application/json" \
# -H "Cookie: SESSDATA=xxx; ..."

示例 D:gRPC 调用通用范式(Python)
说明:具体 proto 文件名、服务名、方法名以仓库 grpc_api 目录与文档为准;以下仅演示“如何从 proto 编译并调用”的通用流程。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1) 先用 grpc_tools 编译 proto(命令行):
# python -m grpc_tools.protoc -I ./grpc_api -o ./grpc_out --python_out=./grpc_out --grpc_python_out=./grpc_out ./grpc_api/xxx.proto

# 2) 然后在代码中导入生成的 stub,并发起调用
import grpc
from grpc_out import xxx_pb2, xxx_pb2_grpc # 具体模块名以实际编译结果为准

channel = grpc.insecure_channel("api.bilibili.com:443") # 端点以文档为准
stub = xxx_pb2_grpc.YourServiceStub(channel)

req = xxx_pb2.YourRequest( /* 按文档填参数 */ )
resp = stub.YourMethod(req) # 方法名以文档为准
print(resp)

实战提示

  • 合规优先:尊重平台规则、用户隐私、版权与服务条款。仅在合法范围内使用接口。
  • 鉴权与风控:很多 API 需要有效 Cookie/Token/UA/Referer;不按要求可能被拒绝或限速。
  • 速率与缓存:合理设置限速与缓存,避免不必要的高频请求。
  • 错误处理:对 HTTP 状态码、业务返回码、超时与重试策略做好兜底。
  • 版本变更:接口可能随时间调整,请关注仓库与文档更新。

参与贡献

  • 仓库提供了贡献指南:CONTRIBUTING.md
  • 如果你发现文档问题或可补充的接口,欢迎 PR 或提出 issue。

最后,把重要链接再摆一遍

说明

  • 本文严格基于仓库的 README、description 与可见目录撰写,避免“乱编”。
  • 目录清单来自一次性接口结果,可能不完整;更多请直接浏览 GitHub 文件视图(数据源为 /repos/SocialSisterYi/bilibili-API-collect/contents/)。
  • 具体接口路径、参数、鉴权与调用细节,请以文档站与仓库文件为准。