Skip to content

REST API 文档

biliup 启动 Web 服务后会在 19159 端口暴露一组 REST 风格的 HTTP API,既给 WebUI 前端用,也支持外部程序直接拿 HTTP 调。

接口路径与字段以 biliup 源码 为准。

基础信息

项目说明
默认端口19159
默认基地址http://localhost:19159
响应格式JSON
请求体格式JSON(Content-Type: application/json
认证方式Session/Cookie 认证(--auth 启动参数开启)

认证说明

启动时加 --auth 开启认证:

bash
biliup server --auth

--auth 是布尔开关,不接 user:pass。流程:

  1. 首次启动没用户时,WebUI 出注册页,用 POST /v1/users/register 建管理员;
  2. 之后用 POST /v1/users/login 登录,基于 Session(Cookie),登录后浏览器自动带 Session ID;
  3. 退出调 GET /v1/logout 销毁会话。

⚠️ WebUI 管理员账号的用户名固定为 biliup,注册 / 登录时该用户名不可修改,你只需设置密码。它与用于投稿的 B站账号(扫码 / Cookie 添加,对应 /v1/users/biliup 之外的 B站账号体系)是两套不同身份,请勿混淆。

没开 --auth 时接口没有任何保护,生产环境别直接把端口暴露出去。

接口总览

主播管理

方法路径说明
GET/v1/streamers获取主播列表
POST/v1/streamers添加主播
PUT/v1/streamers更新主播
DELETE/v1/streamers/{id}删除主播
PUT/v1/streamers/{id}/pause暂停/恢复主播录制

全局配置

方法路径说明
GET/v1/configuration获取全局配置
PUT/v1/configuration更新全局配置

主播信息

方法路径说明
GET/v1/streamer-info获取主播信息(录制状态等)
GET/v1/streamer-info/files/{id}获取主播的文件列表

上传模板管理

方法路径说明
GET/v1/upload/streamers获取上传模板列表
POST/v1/upload/streamers添加上传模板
GET/v1/upload/streamers/{id}获取单个上传模板
DELETE/v1/upload/streamers/{id}删除上传模板

用户与认证

方法路径说明
GET/v1/users获取用户列表
POST/v1/users添加用户
GET/v1/users/{id}获取指定用户信息
DELETE/v1/users/{id}删除用户
GET/v1/users/{id}/archives获取指定用户的稿件列表
POST/v1/users/loginWebUI 用户登录
POST/v1/users/registerWebUI 用户注册
GET/v1/users/biliup检查默认用户是否已存在
GET/v1/logout退出登录

B站扫码登录

方法路径说明
GET/v1/get_qrcode获取 B 站扫码登录二维码
POST/v1/login_by_qrcode二维码扫码登录

视频与状态

方法路径说明
GET/v1/videos获取视频文件列表
GET/v1/status获取系统运行状态
POST/v1/uploads手动触发上传任务
GET/v1/ws/logsWebSocket 实时日志推送

B 站 API 代理

方法路径说明
GET/bili/archive/preB 站投稿预处理(代理)

当前版本仅注册上面这一条 /bili/* 路由。早期文档中出现的 /bili/space/myinfo/bili/proxy 在源码中并不存在,调用会返回 404。

静态资源

方法路径说明
GET/static/{path}WebUI 前端静态文件服务

WebSocket 日志

GET /v1/ws/logs 建长连接后按频道推日志:

频道说明
ds_update.log直播检测 / 开播更新
download.log下载 / 录制
upload.log上传 / 后处理

/v1/ws/logs 的鉴权边界

该端点与普通 REST 路由一起受登录守卫保护:开启 --auth 后,未携带有效会话的连接会被拒绝;未开启 --auth 时则完全开放(服务端源码中有对应的行为测试)。

日志内容包含文件名、路径等敏感信息,公网暴露仍建议走反向代理并终结 TLS。

javascript
const ws = new WebSocket('ws://localhost:19159/v1/ws/logs');
ws.onmessage = (event) => console.log(event.data);

扫码登录

配合 --auth 用,三步:

  1. GET /v1/get_qrcodeqrcode_key 和二维码 url,生成二维码给 B 站 App 扫;
  2. 扫完轮询 POST /v1/login_by_qrcode(带 qrcode_key)确认状态;
  3. 成功后 biliup 存下这个 B 站账号,之后在「用户与认证」那组接口里管。

使用示例

几个能直接抄的调用:

拉主播列表

bash
curl http://localhost:19159/v1/streamers

加主播(最小请求体)

bash
curl -X POST http://localhost:19159/v1/streamers \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://live.bilibili.com/12345678",
    "remark": "某直播间"
  }'

暂停录制

bash
curl -X PUT http://localhost:19159/v1/streamers/1/pause

删主播

bash
curl -X DELETE http://localhost:19159/v1/streamers/1

手动上传

POST /v1/uploadsparams 在服务端会被反序列化为上传模板模型,必须包含 idtemplate_name,否则请求在进入上传逻辑前就会失败。

bash
curl -X POST http://localhost:19159/v1/uploads \
  -H "Content-Type: application/json" \
  -d '{
    "files": ["/opt/录播/video.flv"],
    "params": {
      "id": 1,
      "template_name": "默认投稿",
      "title": "手动上传",
      "tid": 171,
      "tags": ["直播录制"],
      "copyright": 1
    }
  }'

示例中的 idtemplate_name 需替换为你实际已创建的投稿模板的值(可通过 GET /v1/upload/streamers 获取)。如果开启了 --auth,上述 curl 还需携带会话 Cookie(先 POST /v1/users/login 登录并保存 Cookie 后再请求)。

监听日志(Python)

python
import websockets
import asyncio

async def listen_logs():
    async with websockets.connect("ws://localhost:19159/v1/ws/logs") as ws:
        async for message in ws:
            print(message)

asyncio.run(listen_logs())

基于 Rust + Python + Next.js 构建