@bililive-tools/bilibili-recorder
Version:
bililive-tools bilibili recorder implemention
87 lines (86 loc) • 3.76 kB
JavaScript
/**
* API 参考自 https://github.com/SocialSisterYi/bilibili-API-collect
*/
import axios from "axios";
import { assert } from "./utils.js";
const requester = axios.create({
timeout: 10e3,
// axios 会自动读取环境变量中的 http_proxy 和 https_proxy 并应用,
// 但会导致请求报错 "Client network socket disconnected before secure TLS connection was established"。
proxy: false,
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
},
});
export async function getRoomInit(roomIdOrShortId) {
const res = await requester.get(`https://api.live.bilibili.com/room/v1/Room/room_init?id=${roomIdOrShortId}`);
assert(res.data.code === 0, `Unexpected resp, code ${res.data.code}, msg ${res.data.message}`);
return res.data.data;
}
export async function getRoomInfo(roomIdOrShortId) {
const res = await requester.get(`https://api.live.bilibili.com/room/v1/Room/get_info?id=${roomIdOrShortId}`);
assert(res.data.code === 0, `Unexpected resp, code ${res.data.code}, msg ${res.data.message}`);
return res.data.data;
}
export async function getMasterInfo(userId) {
const res = await requester.get(`http://api.live.bilibili.com/live_user/v1/Master/info?uid=${userId}`);
assert(res.data.code === 0, `Unexpected resp, code ${res.data.code}, msg ${res.data.message}`);
return res.data.data;
}
export async function getStatusInfoByUIDs(userIds) {
const res = await requester.get("http://api.live.bilibili.com/room/v1/Room/get_status_info_by_uids", {
params: { uids: userIds },
});
assert(res.data.code === 0, `Unexpected resp, code ${res.data.code}, msg ${res.data.message}`);
return res.data.data;
}
export async function getRoomBaseInfo(roomId) {
const res = await requester.get("https://api.live.bilibili.com/xlive/web-room/v1/index/getRoomBaseInfo", {
params: { room_ids: roomId, req_biz: "web_room_componet" },
});
assert(res.data.code === 0, `Unexpected resp, code ${res.data.code}, msg ${res.data.message}`);
return res.data.data.by_room_ids;
}
export async function getPlayURL(roomId, opts = {}) {
const res = await requester.get(`https://api.live.bilibili.com/room/v1/Room/playUrl`, {
params: {
cid: roomId,
platform: opts.useHLS ? "h5" : "web",
quality: opts.quality,
qn: opts.qn,
},
});
assert(res.data.code === 0, `Unexpected resp, code ${res.data.code}, msg ${res.data.message}`);
return res.data.data;
}
export async function getRoomPlayInfo(roomIdOrShortId, opts = {}) {
const res = await requester.get("https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo", {
params: {
room_id: roomIdOrShortId,
qn: opts.qn,
// 0 http_stream, 1 http_hls
protocol: "0,1",
// 0 avc, 1 hevc
codec: "0,1",
// 0 flv, 1 ts, 2 fmp4
format: "0,1,2",
only_audio: opts.onlyAudio ? "1" : "0",
},
headers: {
Cookie: opts.cookie,
},
});
assert(res.data.code === 0, `Unexpected resp, code ${res.data.code}, msg ${res.data.message}`);
return res.data.data;
}
export async function getBuvidConf() {
const res = await fetch("https://api.bilibili.com/x/frontend/finger/spi", {
headers: {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
},
});
if (!res.ok)
throw new Error(`Failed to get buvid conf: ${res.statusText}`);
const data = await res.json();
return data;
}