本帖最后由 易飞鸟 于 2021-4-7 23:20 编辑
目标网址:https://www.bilibili.com/video/BV14g4y1i7Af?from=search&seid=1523222202744601029
通过分享,拿到播放器的单独地址 http://player.bilibili.com/player.html?aid=838368476&bvid=BV14g4y1i7Af&cid=196123704&page=1
通过调试分析,找到这个get请求,通过BV号参数提交,可以返回一些视频信息 http://api.bilibili.com/x/web-interface/view?bvid=BV14g4y1i7Af 返回数据:
其中aid和cid是比较重要的
从这个请求的返回值中,我们发现一个MP4的链接地址,这个就是视频的下载地址 https://api.bilibili.com/x/player/playurl?cid=196123704&appkey=ba02c181c8820321&otype=json&type=&quality=16&qn=16&fnver=0&fnval=2&bvid=BV14g4y1i7Af&sign=d6c1782895642ed94ef6d44df9ab1dcd 这个请求,需要很多参数,通过postman不断测试,发现只需要传bv号和cid,就可以正常返回
请求精简为:https://api.bilibili.com/x/player/playurl?cid=196123704&qn=16&bvid=BV14g4y1i7Af
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 类_日志输出 | 类_日志输出 | | 类_json | 类_json | | ThunderSDK | ThunderSDK | | 集_任务ID | 整数型 | | 集_文件名 | 文本型 | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 视频地址 | 文本型 | | | BV号 | 文本型 | | | viewUrl | 文本型 | | | viewRet | 文本型 | | | cid | 文本型 | | | playurl | 文本型 | | | playurlRet | 文本型 | | | downUrl | 文本型 | | | 文件格式 | 文本型 | | |
编辑框_日志.内容 = “”视频地址 = 编辑框_视频地址.内容 BV号 = 文本_取出中间文本 (视频地址, “video/”, “?”, , ) 如果真 (寻找文本 (BV号, “/”, , 假) ≠ -1 ) BV号 = 文本_删右边 (BV号, 1 ) 如果真 (BV号 = “”) 类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “解析错误,视频地址格式不对!”, 2, ) 返回 () viewUrl = “http://api.bilibili.com/x/web-interface/view?bvid=” + BV号 viewRet = 编码_utf8到gb2312 (网页_访问S (viewUrl, 0, , , , , , , , , , , , , , , , , 真, , )) 如果真 (viewRet = “”) 类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “对不起,解析失败!”, 2, ) 返回 () 类_json. 解析 (viewRet, )cid = 类_json. 取通用属性 (“data.cid”, )标题 = 类_json. 取通用属性 (“data.title”, )playurl = “https://api.bilibili.com/x/player/playurl?cid=” + cid + “&qn=16&bvid=” + BV号 playurlRet = 编码_utf8到gb2312 (网页_访问S (playurl, 0, , , , , , , , , , , , , , , , , 真, , )) 如果真 (playurlRet = “”) 类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “对不起,解析失败!”, 2, ) 返回 () 类_json. 解析 (playurlRet, )downUrl = 类_json. 取通用属性 (“data.durl[0].url”, )文件格式 = 类_json. 取通用属性 (“data.format”, ) 如果真 (文件格式 ≠ “mp4”) 文件格式 = “flv” 如果真 (downUrl = “”) 类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “对不起,解析失败!”, 2, ) 返回 () 类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “解析成功,准备下载”, 0, )集_文件名 = 标题 + “.” + 文件格式 迅雷下载 (downUrl, “https://www.bilibili.com”, 集_文件名 )|
迅雷下载 | | | |
downUrl | 文本型 | | | | 引用页 | 文本型 | | | | 文件名 | 文本型 | | | |
集_任务ID = ThunderSDK. 创建任务 (downUrl, 引用页, , 文件名, 取运行目录 () + “\download”, , , 假) 如果真 (集_任务ID = 0 ) 类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “创建下载任务失败!”, 2, ) 返回 () 如果真 (ThunderSDK. 开始任务 (集_任务ID ))  类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “迅雷引擎,开始下载”, 0, ) 时钟1.时钟周期 = 1000  进度 = 到文本 (到整数 (ThunderSDK. 取下载进度 (集_任务ID ) × 100 )) + “%”类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “下载进度:” + 进度, 0, ) 如果真 (ThunderSDK. 取状态 (集_任务ID ) = “COMPLETE”) 时钟1.时钟周期 = 0  类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), “下载完成”, 0, ) 类_日志输出. 输出编辑框 (_启动窗口.编辑框_日志. 取窗口句柄 (), 取运行目录 () + “\download\” + 集_文件名, 0, ) ThunderSDK. 初始化 (取运行目录 (), 真)运行界面:
|