开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 8757|回复: 13
收起左侧

[技术专题] 易飞鸟|哔站下载链接过程分析,以及下载源码

[复制链接]
发表于 2021-4-7 23:18:26 | 显示全部楼层 |阅读模式   辽宁省沈阳市
本帖最后由 易飞鸟 于 2021-4-7 23:20 编辑

目标网址:https://www.bilibili.com/video/BV14g4y1i7Af?from=search&seid=1523222202744601029
image-20210407180537701.png
通过分享,拿到播放器的单独地址
http://player.bilibili.com/player.html?aid=838368476&bvid=BV14g4y1i7Af&cid=196123704&page=1

image-20210407180919134.png

通过调试分析,找到这个get请求,通过BV号参数提交,可以返回一些视频信息
http://api.bilibili.com/x/web-interface/view?bvid=BV14g4y1i7Af
返回数据:
image-20210407181201662.png

其中aid和cid是比较重要的
image-20210407181516112.png

从这个请求的返回值中,我们发现一个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,就可以正常返回

image-20210407182305093.png

请求精简为:https://api.bilibili.com/x/player/playurl?cid=196123704&qn=16&bvid=BV14g4y1i7Af

然后易语言实现代码:

  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
类_日志输出类_日志输出  
类_json类_json  
ThunderSDKThunderSDK  
集_任务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)
如果真 (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

子程序名返回值类型公开备 注
_时钟1_周期事件  
变量名类 型静态数组备 注
进度文本型 
进度 = 到文本 (到整数 (ThunderSDK.取下载进度 (集_任务ID) × 100)) + “%”
类_日志输出.输出编辑框 (_启动窗口.编辑框_日志.取窗口句柄 (), “下载进度:” + 进度, 0, )
如果真 (ThunderSDK.取状态 (集_任务ID)“COMPLETE”)
时钟1.时钟周期 = 0
类_日志输出.输出编辑框 (_启动窗口.编辑框_日志.取窗口句柄 (), “下载完成”, 0, )
类_日志输出.输出编辑框 (_启动窗口.编辑框_日志.取窗口句柄 (), 取运行目录 ()“\download\” + 集_文件名, 0, )

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
ThunderSDK.初始化 (取运行目录 (), )
运行界面:
image-20210407225753430.png

b站下载.zip (2.63 MB, 下载次数: 55)
image-20210407180155846.png

点评

为什么现在发源码都在闲聊区了?什么操作?   广东省东莞市  发表于 2021-4-8 00:16

签到天数: 5 天

发表于 2023-7-31 19:35:52 | 显示全部楼层   重庆市重庆市
试一下11111111111
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 2021-11-5 17:17:14 | 显示全部楼层   广东省东莞市
谢谢分享!
回复 支持 反对

使用道具 举报

结帖率:98% (79/81)

签到天数: 8 天

发表于 2021-4-27 04:22:41 | 显示全部楼层   江西省南昌市
好东西,支持支持,差点自己写一个
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)
发表于 2021-4-20 13:42:26 高大上手机用户 | 显示全部楼层   河北省石家庄市
谢谢源码,很有参考价值,大公无私,值得表扬
回复 支持 反对

使用道具 举报

签到天数: 7 天

发表于 2021-4-12 15:10:29 | 显示全部楼层   陕西省榆林市
分析得很好
回复 支持 反对

使用道具 举报

发表于 2021-4-10 23:35:10 | 显示全部楼层   山西省忻州市
谢谢源码,很有参考价值,大公无私,值得表扬!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-8 14:32:23 | 显示全部楼层   辽宁省沈阳市
Elite 发表于 2021-4-8 13:40
不错,唯一不足的就是不能下载高清的,下载回来的视频都太模糊了。

可以修改代码,加上登录获取cookie功能,然后网页访问传cookie,或许就能得到高清地址了
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)

签到天数: 16 天

发表于 2021-4-8 13:40:56 | 显示全部楼层   辽宁省沈阳市
不错,唯一不足的就是不能下载高清的,下载回来的视频都太模糊了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-8 12:05:39 | 显示全部楼层   辽宁省沈阳市

高清需要登录,传cookie
回复 支持 反对

使用道具 举报

结帖率:60% (9/15)

签到天数: 9 天

发表于 2021-4-8 11:33:52 | 显示全部楼层   广东省佛山市
下载的不是高清的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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