Add plugin: Bilibili Video Searching

This commit is contained in:
Sheng Fan
2024-04-06 20:19:37 +08:00
parent 5a6e386440
commit c7f1358709
8 changed files with 17311 additions and 1334 deletions

View File

@@ -11,93 +11,6 @@ export interface RequestTool {
timeout: number;
}
async function fetchVideoInfo(prompt: string) {
const headers = new Headers();
headers.append("User-Agent", getRandomUserAgent());
let video_param = "";
if (prompt.toLowerCase().startsWith("av")) {
video_param = `aid=${prompt.slice(2)}`;
} else if (prompt.toLowerCase().startsWith("bv")) {
video_param = `bvid=${prompt}`;
} else {
return "FAIL: Invalid video ID or URL.";
}
const resp = await fetch(
`https://api.bilibili.com/x/web-interface/view?${video_param}`,
{
headers: headers,
},
);
let rawData: { [key: string]: any } = await resp.json();
let data: { [key: string]: string } = {};
// Keep those: bvid, aid, videos, copyright, tname, title, pubdate, desc, state(values see below), owner, argue_info
// state:
// 1 橙色通过
// 0 开放浏览
// -1 待审
// -2 被打回
// -3 网警锁定
// -4 被锁定 视频撞车了
// -5 管理员锁定
// -6 修复待审
// -7 暂缓审核
// -8 补档待审
// -9 等待转码
// -10 延迟审核
// -11 视频源待修
// -12 转储失败
// -13 允许评论待审
// -14 临时回收站
// -15 分发中
// -16 转码失败
// -20 创建未提交
// -30 创建已提交
// -40 定时发布
// -100 用户删除
// convert state to string
const stateConvertDict: { [key: string]: string } = {
"1": "橙色通过",
"0": "开放浏览",
"-1": "待审",
"-2": "被打回",
"-3": "网警锁定",
"-4": "被锁定",
"-5": "管理员锁定",
"-6": "修复待审",
"-7": "暂缓审核",
"-8": "补档待审",
"-9": "等待转码",
"-10": "延迟审核",
"-11": "视频源待修",
"-12": "转储失败",
"-13": "允许评论待审",
"-14": "临时回收站",
"-15": "分发中",
"-16": "转码失败",
"-20": "创建未提交",
"-30": "创建已提交",
"-40": "定时发布",
"-100": "用户删除",
};
data["state"] = stateConvertDict[rawData.data.state.toString()];
data["bvid"] = rawData.data.bvid;
data["aid"] = rawData.data.aid;
data["videos"] = rawData.data.videos;
data["copyright"] = rawData.data.copyright;
data["tname"] = rawData.data.tname;
data["title"] = rawData.data.title;
data["pubdate"] = rawData.data.pubdate;
data["desc"] = rawData.data.desc;
// data["state"] = rawData.data.state.toString();
data["owner"] = rawData.data.owner.name;
data["argue_info"] = rawData.data.argue_info;
return "SUCCESS: Video data should be in this JSON: " + JSON.stringify(data);
}
export class BilibiliVideoInfoTool extends Tool implements RequestTool {
name = "bilibili_video_info";
@@ -119,7 +32,7 @@ export class BilibiliVideoInfoTool extends Tool implements RequestTool {
/** @ignore */
async _call(input: string) {
try {
let result = await fetchVideoInfo(input);
let result = await this.fetchVideoInfo(input);
// console.log(result)
return result;
} catch (error) {
@@ -128,6 +41,95 @@ export class BilibiliVideoInfoTool extends Tool implements RequestTool {
}
}
async fetchVideoInfo(prompt: string) {
const headers = new Headers();
headers.append("User-Agent", getRandomUserAgent());
let video_param = "";
if (prompt.toLowerCase().startsWith("av")) {
video_param = `aid=${prompt.slice(2)}`;
} else if (prompt.toLowerCase().startsWith("bv")) {
video_param = `bvid=${prompt}`;
} else {
return "FAIL: Invalid video ID or URL.";
}
const resp = await this.fetchWithTimeout(
`https://api.bilibili.com/x/web-interface/view?${video_param}`,
{
headers: headers,
},
);
let rawData: { [key: string]: any } = await resp.json();
let data: { [key: string]: string } = {};
// Keep those: bvid, aid, videos, copyright, tname, title, pubdate, desc, state(values see below), owner, argue_info
// state:
// 1 橙色通过
// 0 开放浏览
// -1 待审
// -2 被打回
// -3 网警锁定
// -4 被锁定 视频撞车了
// -5 管理员锁定
// -6 修复待审
// -7 暂缓审核
// -8 补档待审
// -9 等待转码
// -10 延迟审核
// -11 视频源待修
// -12 转储失败
// -13 允许评论待审
// -14 临时回收站
// -15 分发中
// -16 转码失败
// -20 创建未提交
// -30 创建已提交
// -40 定时发布
// -100 用户删除
// convert state to string
const stateConvertDict: { [key: string]: string } = {
"1": "橙色通过",
"0": "开放浏览",
"-1": "待审",
"-2": "被打回",
"-3": "网警锁定",
"-4": "被锁定",
"-5": "管理员锁定",
"-6": "修复待审",
"-7": "暂缓审核",
"-8": "补档待审",
"-9": "等待转码",
"-10": "延迟审核",
"-11": "视频源待修",
"-12": "转储失败",
"-13": "允许评论待审",
"-14": "临时回收站",
"-15": "分发中",
"-16": "转码失败",
"-20": "创建未提交",
"-30": "创建已提交",
"-40": "定时发布",
"-100": "用户删除",
};
data["state"] = stateConvertDict[rawData.data.state.toString()];
data["bvid"] = rawData.data.bvid;
data["aid"] = rawData.data.aid;
data["subVideoCount"] = rawData.data.videos;
data["copyrightData"] = rawData.data.copyright;
data["videoTypeName"] = rawData.data.tname;
data["title"] = rawData.data.title;
data["publishDate"] = rawData.data.pubdate;
data["descriptions"] = rawData.data.desc;
// data["state"] = rawData.data.state.toString();
data["ownerName"] = rawData.data.owner.name;
data["argueInfo"] = rawData.data.argue_info;
return (
"SUCCESS: Video data should be in this JSON: " + JSON.stringify(data)
);
}
async fetchWithTimeout(
resource: RequestInfo | URL,
options = {},