BBILI DATA返回 API 控制台
DEVELOPER DOCUMENTATION · API V1

读取已采集的 B 站数据

供程序与站点后端调用的只读 API。使用独立密钥,无需 B 站 Cookie,也无需登录控制台会话。

1. 创建密钥

管理员在「API 接入」中创建调用方密钥,可限制房间范围、有效期和每分钟请求次数。完整密钥仅在创建时显示一次,撤销后立即失效。

Authorization: Bearer YOUR_API_KEY

请把密钥放在服务端环境变量中。公开网页应通过自己的后端调用本站;直接把长期密钥写入网页会让访问者取得同等数据权限。需要浏览器直连时,需管理员配置明确的 CORS 来源,默认不允许跨域浏览器读取。

2. 请求地址

所有接口相对于本站域名,前缀为 /api/v1。原有 /api/monitor/* 等接口继续兼容原会话鉴权;新 API 密钥只能访问 v1 数据接口,不能管理房间、扫码或导入数据。

GET 路径用途参数
/rooms房间元数据、订阅与直播状态仅返回密钥范围内房间,最多 1000 条
/sessions场次,按 ID 升序分页room_id、after_id、limit
/events/{event_type}原始事件,按 ID 升序分页room_id、session_id、after_id、limit、start_time、end_time
/openapi.jsonOpenAPI 接口定义无需密钥

event_type 可选:danmakugiftssuper_chatsguardsenterspopularity

每页默认 100 条,最多 500 条。room_id 支持已知短号,服务会解析为真实房间号。时间筛选使用 Unix 秒,范围为 [start_time, end_time)。UID 和房间号以字符串返回,避免 JavaScript 数字精度损失。

3. 游标分页与增量同步

GET /api/v1/events/danmaku?room_id=213&after_id=0&limit=100

{
  "data": [{"id": 101, "room_id": "47867", "uid": "123", "text": "…", "ts": 1789200000}],
  "meta": {"limit": 100, "returned": 1, "has_more": false, "next_after_id": 101}
}

读取后保存 next_after_id,下次将它作为 after_id 传入。has_more=true 时继续翻页;false 表示当时已经读完,持续同步可等待后用相同游标再次请求。空页仍返回原游标。首次 after_id=0 会从符合条件的最早记录开始,若只需要近期数据,请同时指定 start_time。

每种事件和每组筛选条件分别保存游标,不要把一个房间或事件类型的游标拿去读取其他范围。客户端以事件类型 + id 去重;ID 不是连续计数。正在采集的场次 end_time 后续会更新,场次游标只同步新增场次,不能用于发现旧场次字段更新。

4. 程序调用示例

curl -H "Authorization: Bearer $BILI_API_KEY" \
  "https://YOUR_HOST/api/v1/events/danmaku?room_id=213&limit=100"
import os, requests

response = requests.get(
    "https://YOUR_HOST/api/v1/events/danmaku",
    headers={"Authorization": "Bearer " + os.environ["BILI_API_KEY"]},
    params={"room_id": "213", "after_id": saved_cursor, "limit": 100},
    timeout=15,
)
response.raise_for_status()
page = response.json()
# 先持久化处理 page["data"],成功后再保存游标。
saved_cursor = page["meta"]["next_after_id"]

5. 限流、错误与数据口径

下载 OpenAPI JSON →