

import win.ui;
import win.clip;
import web.rest.jsonClient;
import process;
import thread.command;
/*DSG{{*/
var winform = win.form(text="Bilibili 视频直链解析工具 (By:Mr_MAO)";right=743;bottom=527)
winform.add(
btnClipboard={cls="button";text="从剪贴板读取并解析";left=552;top=448;right=720;bottom=500;color=0xD77800;db=1;dr=1;z=3};
btnCopy={cls="button";text="复制直链";left=184;top=448;right=334;bottom=500;db=1;disabled=1;dl=1;z=7};
btnOpen={cls="button";text="浏览器打开";left=24;top=448;right=174;bottom=500;db=1;disabled=1;dl=1;z=8};
btnParse={cls="button";text="立即解析";left=368;top=448;right=536;bottom=500;db=1;dr=1;z=2};
editInput={cls="edit";left=24;top=40;right=719;bottom=125;autohscroll=false;dl=1;dr=1;dt=1;edge=1;multiline=1;z=1};
editOutput={cls="edit";left=24;top=168;right=719;bottom=435;autohscroll=false;bgcolor=0xFFFFFF;db=1;dl=1;dr=1;dt=1;edge=1;multiline=1;readonly=1;z=4};
static={cls="static";text="请输入或粘贴 Bilibili 分享链接:";left=24;top=16;right=293;bottom=34;dl=1;dt=1;transparent=1;z=5};
static2={cls="static";text="解析结果:(解析成功后可点击下方按钮打开视频或复制url链接)";left=24;top=144;right=550;bottom=158;dl=1;dr=1;dt=1;transparent=1;z=6}
)
/*}}*/
var lastVideoUrl = "";
winform.updateResult = function(videoUrl, title){
if(videoUrl){
lastVideoUrl = videoUrl;
winform.btnCopy.disabled = false;
winform.btnOpen.disabled = false;
winform.editOutput.text = "";
winform.editOutput.print("视频标题: " ++ title);
winform.editOutput.print("解析成功!真实 MP4 直链如下:");
winform.editOutput.print("------------------------------------------------------------");
winform.editOutput.print(videoUrl);
winform.editOutput.print("------------------------------------------------------------");
winform.editOutput.print("提示:您可以点击下方按钮直接复制或打开。");
}
else {
winform.btnCopy.disabled = true;
winform.btnOpen.disabled = true;
}
}
var runParser = function(text){
if(!text || #text == 0){
winform.msgboxErr("内容不能为空!");
return;
}
var bvid = string.match(text, "(BV\w+)");
if(!bvid){
winform.msgboxErr("未找到有效的 BVID!");
return;
}
lastVideoUrl = "";
winform.btnCopy.disabled = true;
winform.btnOpen.disabled = true;
winform.editOutput.text = "";
winform.editOutput.print("正在连接 Bilibili 服务器解析: " ++ bvid);
winform.btnParse.disabledText = {"✶";"✸";"✹";"✺";"✹";"✷"};
thread.invoke(
function(winform, bvid){
import thread.command;
import web.rest.jsonClient;
var http = web.rest.jsonClient();
http.addHeaders = {
["User-Agent"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36";
["Referer"] = "https://www.bilibili.com/video/" ++ bvid;
}
// 获取 CID
var viewApi = http.api("https://api.bilibili.com/x/web-interface/view");
var viewData = viewApi.get( bvid = bvid );
if(!viewData ? viewData.code != 0){
winform.editOutput.print("API 报错: " ++ (viewData ? viewData.message : "请求失败"));
winform.btnParse.disabledText = null;
return;
}
var aid = viewData.data.aid;
var cid = viewData.data.cid;
var title = viewData.data.title;
// 获取播放地址
var playApi = http.api("https://api.bilibili.com/x/player/playurl");
var playData = playApi.get(
avid = aid;
bvid = bvid;
cid = cid;
qn = 16;
fnval = 0;
fnver = 0;
platform = "html5";
high_quality = 1
);
winform.btnParse.disabledText = null;
if(playData ? playData.code == 0){
var durl = playData.data ? playData.data.durl;
if(durl && #durl > 0){
var videoUrl = durl[1].url;
winform.updateResult(videoUrl, title);
}
else {
winform.editOutput.print("解析失败:未返回有效的视频直链。");
}
}
else {
winform.editOutput.print("获取地址失败: " ++ (playData ? playData.message : "未知错误"));
}
}, winform, bvid
)
}
// 按钮点击:立即解析
winform.btnParse.oncommand = function(id,event){
runParser(winform.editInput.text);
}
// 按钮点击:复制直链
winform.btnCopy.oncommand = function(id,event){
if(#lastVideoUrl > 0){
win.clip.write(lastVideoUrl);
winform.msgbox("解析出的视频直链已复制!", "成功");
}
}
// 按钮点击:浏览器打开
winform.btnOpen.oncommand = function(id,event){
if(#lastVideoUrl > 0){
import process;
process.execute(lastVideoUrl);
}
}
// 按钮点击:从剪贴板解析
winform.btnClipboard.oncommand = function(id,event){
var clipText = win.clip.read();
if(clipText){
winform.editInput.text = clipText;
runParser(clipText);
}
}
winform.editInput.text = `https://www.bilibili.com/video/BV17yH8znEpx?vd_source=2a9d62ca9035cfb6a0494ff0fae12e69`;
winform.show();
win.loopMessage();