LifeActor / ykdl

a video downloader focus on China mainland video sites.
https://github.com/zhangn1985/ykdl
Other
1.43k stars 284 forks source link

support bilibili v2 api #250

Closed zhangn1985 closed 6 years ago

zhangn1985 commented 6 years ago

http://interface.bilibili.com/playurl http://bangumi.bilibili.com/player/web_api/playurl 可能很快就要不能用了 它们会被v2 api,取代: http://interface.bilibili.com/v2/playurl

这个api有如下特点: 如果按v1 api传参数,将只能得到最低清晰度。 v2 api需要appkey和正确的check_sum

目前v1api 的状态: 只能得到自动清晰度和最低清晰度。

airdge commented 6 years ago

好像用python写会比较困难,倒不如直接调用nodejs 可以参考这个 https://github.com/kamikat/bilibili-playurl 相关js https://static.hdslb.com/player/js/bilibiliPlayer.min.js?v=7d9a020e

另外这个接口并不像app.bilibili.com/playurl可以指定platform参数

https://interface.bilibili.com/v2/playurl?cid=15195741&appkey=84956560bc028eb7&otype=json&type=&quality=16&qn=16&sign=52415457788b3631f011df7d369a3633

https://interface.bilibili.com/v2/playurl?appkey=84956560bc028eb7&cid=15195741&otype=json&platform=html5&qn=16&quality=16&sign=275f9473af4465f7f1b44dc86b62016f&type=

对于一些用户来说 这个接口真没啥用

zhangn1985 commented 6 years ago

如果不是强迫多分辨率,其实v2没啥用。

airdge commented 6 years ago

那你可以用iPhone的接口,多分辨率 其中qn为16/64/80和pc应该一样

 var appkey = 'YvirImLGlLANCLvM';
var appsecret= 'JNlZNgfNGKZEpaDTkCdPQVXntXhuiJEM'; 

https://app.bilibili.com/playurl?appkey=YvirImLGlLANCLvM&build=4140&buvid=ef5efdc0452641eb235cd424dfa03660&cid=15195741&device=phone&otype=json&platform=html5&qn=64&sign=d3d35035ef541600b3d25c0923715f3f 
SeaHOH commented 6 years ago

插个题外话: 发现现在大多数结果都是 http://upos-hz-mirror****.acgvideo.com/ 优先,45* 无法直接播放, backup_url 里面的 http://ws.acgvideo.com/ 就没问题。 像我这种情况的多吗?

zhangn1985 commented 6 years ago

这个地址从来都没有看到过。

SeaHOH commented 6 years ago

有一段时间了,愈来愈多。 这儿也有 https://github.com/zhangn1985/ykdl/issues/251#issue-300249282

airdge commented 6 years ago

platform=pc有来源限制 改用html5就行

SeaHOH commented 6 years ago

我现在是自己过滤了一下,暂时能用。 还有,刚才发现有视频的 quality 是 48,需要添加。

airdge commented 6 years ago
wget "http://upos-hz-mirrorkodo.acgvideo.com/upgcxcode/41/57/15195741/15195741-1-80.flv?e=ig8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNC8xNEVE9EKE9IMvXBvE2ENvNCImNEVEK9GVqJIwqa80WXIekXRE9IMvXBvEuENvNCImNEVEua6m2jIxux0CkF6s2JZv5x0DQJZY2F8SkXKE9IB5to8euxZM2rNcNbUVhwdVhoM1hwdVhwdVNCM=&platform=pc&uipk=5&uipv=5&deadline=1520244769&gen=playurl&um_deadline=1520244769&rate=0&um_sign=886b1b6254b964f16ab18b3e5e9b1bfe&dynamic=1&os=kodo&oi=463345104&upsig=422a4cdb841c0605236481fc6cd01a9f"  --referer "https://www.bilibili.com"

Resolving upos-hz-mirrorkodo.acgvideo.com (upos-hz-mirrorkodo.acgvideo.com)... 2
18.92.152.69, 27.148.203.40, 27.148.203.39, ...
Connecting to upos-hz-mirrorkodo.acgvideo.com (upos-hz-mirrorkodo.acgvideo.com)|
218.92.152.69|:80... connected.
HTTP request sent, awaiting response... 454 Unknown
2018-03-05 16:16:27 ERROR 454: Unknown.

wget "http://upos-hz-mirrorkodo.acgvideo.com/upgcxcode/41/57/15195741/15195741-1-80.flv?e=ig8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNC8xNEVE9EKE9IMvXBvE2ENvNCImNEVEK9GVqJIwqa80WXIekXRE9IMvXBvEuENvNCImNEVEua6m2jIxux0CkF6s2JZv5x0DQJZY2F8SkXKE9IB5to8euxZM2rNcNbUVhwdVhoM1hwdVhwdVNCM=&platform=pc&uipk=5&uipv=5&deadline=1520244769&gen=playurl&um_deadline=1520244769&rate=0&um_sign=886b1b6254b964f16ab18b3e5e9b1bfe&dynamic=1&os=kodo&oi=463345104&upsig=422a4cdb841c0605236481fc6cd01a9f"  --referer "https://www.bilibili.com/"

Connecting to upos-hz-mirrorkodo.acgvideo.com (upos-hz-mirrorkodo.acgvideo.com)|
218.92.152.69|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 30695642 (29M) [video/x-flv]

上面referer为https://www.bilibili.com会出现454 设置https://www.bilibili.com/正常 还是referer的事 问题不大

zhangn1985 commented 6 years ago

@airdge 看了很久才发现哪里不一样。。。

SeaHOH commented 6 years ago

居然是这样,也太讲究了。。。

SeaHOH commented 6 years ago

https://github.com/SeaHOH/ykdl/commit/5a42ce8d878cc73b51f64f10b9178fd2d9f462dc 我把 api 参数 quality 替换为 qn,然后发现这样好用多了,可以减少 api 请求次数; 测试后发现 http://www.bilibili.com/https://www.bilibili.com/ 都可以作为 referer 使用, 获取视频页面 Url 时使用 http 会重定向到 https,api Url 不会重定向,统一修改为 https。

最后发现个问题,我这里不管用哪个 api 返回的结果好像都没变化,感觉是根据 User-Agent判断的,没仔细测试。

zhangn1985 commented 6 years ago

看了你的patch,终于发现我之前犯的一个错误。

zhangn1985 commented 6 years ago

for q in self.supported_stream_profile: 改成 for q in self.qlt_2_profile.keys(): 这样就能正确处理qn了吧?

zhangn1985 commented 6 years ago

@SeaHOH 你觉得patch OK,就提PR,自己合并吧。

SeaHOH commented 6 years ago

好,那我就把 supported_stream_profile 去掉咯。

SeaHOH commented 6 years ago

刚才修改时发现个问题,bangumi.py 中的 get_api_url 完全可以用 video.py 中的来替代, 只使用 https://interface.bilibili.com/playurl 这一个 api 就够了。

SeaHOH commented 6 years ago

那啥,referer 又失效了,难道还要查 cookie?

SeaHOH commented 6 years ago

改成 api v2 就好了。。。

airdge commented 6 years ago

@SeaHOH 有些(最新)番剧CID必须要bangumi接口, 不然会出现 video is hidden 错误

SeaHOH commented 6 years ago

有些(最新)番剧CID必须要bangumi接口, 不然会出现 video is hidden 错误

原来如此

不过。。。好吧,我这儿 v2 也不行了,无法播放。。。只好继续用 http://ws.acgvideo.com, 怀疑 secretkey 过期了,这是咋个算出来的?能更新吗?

SeaHOH commented 6 years ago

发现问题所在: 因为我传了 otype=json 以 json 格式解析,所以怎么都没有浏览权限,恢复成 xml 就好了。

@zhangn1985 还有 interface api 可以直接改成 v2 了,我这里这样才正常,你试试?

SeaHOH commented 6 years ago

还有个问题就是,live 就一个质量?怎么换感觉都一样。。。分辨率相同,码率(看下载速率)都差不多。

zhangn1985 commented 6 years ago

大部分直播间都不支持清晰度切换。

SeaHOH commented 6 years ago

@zhangn1985 试试下面这个能不能正常工作?我这里测试了几十个视频没遇到问题。 https://github.com/zhangn1985/ykdl/tree/bilibili-v2-api

zhangn1985 commented 6 years ago

@SeaHOH 谢谢,已经合并到主线了。

SeaHOH commented 6 years ago

还有 bangumi v2 api 没解决,但是我不会反向,搞出 secretkey 的人真厉害。

helinwang commented 4 years ago

请问appsecret是怎么获得的?好奇。谢谢!