找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

查看: 19|回复: 0

[转载] [web.rest] 解析bilibili分享链接,获取视频的MP4直链

[复制链接]
  • TA的每日心情
    开心
    昨天 08:48
  • 签到天数: 66 天

    连续签到: 1 天

    [LV.6]常住居民II

    11

    主题

    68

    回帖

    856

    积分

    高级会员

    积分
    856
    来自: 中国福建泉州
    发表于 昨天 08:50 | 显示全部楼层 |阅读模式 来自: 中国福建泉州
    非业余 - aardio 编程语言 - 非官方问答社区 - 免责声明
    非业余(bbs.feiyeyu.com)所讨论的技术及相关工具源码,仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。非业余(bbs.feiyeyu.com)不承担任何因为技术滥用所产生的连带责任。非业余(bbs.feiyeyu.com)内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或QQ微信与我们联系处理。站长邮箱:my69@vip.qq.com
    本帖最后由 AdGame 于 2025-12-28 08:57 编辑



    [AAuto] 纯文本查看 复制代码
    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 =  `[url=https://www.bilibili.com/video/BV17yH8znEpx?vd_source=2a9d62ca9035cfb6a0494ff0fae12e69`;]https://www.bilibili.com/video/B ... 6a0494ff0fae12e69`;[/url]
    
    winform.show();
    win.loopMessage();



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    非业余 - aardio 编程语言 - 非官方问答社区 - 免责声明
    风行者三期培训:Aardio+Python+Flutter,1000集课程让你成为全栈开发高手!https://mp.weixin.qq.com/s/_WOoHFtITUyLk2k7BXYGkg
    Aardio培训大揭秘,轻松上手打造个人项目!https://mp.weixin.qq.com/s/cr47qhp_Cpz0p57lbbPwug
    aardio风行者第二期培训班https://mp.weixin.qq.com/s/uB6XHUDnGSk0JlWuiBE9AA
    aardio风行者第三期培训班https://mp.weixin.qq.com/s/cdZcvFiAWhlYTaSrQGCPvA
    回复

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|非业余 - aardio 编程语言 - 非官方问答社区 知道创宇云防御

    GMT+8, 2025-12-29 00:32 , Processed in 0.090991 second(s), 28 queries .

    Powered by Discuz! X3.5

    © 2001-2025 Discuz! Team.

    快速回复 返回顶部 返回列表