B站适配+一些小问题 / bili adapters and minor fixes#2540
B站适配+一些小问题 / bili adapters and minor fixes#2540HittyGubby wants to merge 6 commits intolyswhut:devfrom
Conversation
c09020b to
fe4e022
Compare
|
哦再提一嘴哈,细心的可能会发现我fork的介绍里加了个音乐标签分类,这是我打算做的一个功能 |
|
感谢PR,本项目使用 npm 管理项目,PR不要带上其他包管理器的文件,package.json 并不需要加这些多余的依赖,既然已经清除html标签, |
|
改好啦 补充一点,我在测试bili的自定义源时遇到 |
|
另外手机版也需要相应适配吗 |
|
啊是的... 搜索结果返回列表和可否播放有关系吗(? |
|
不对,m4s虽然无法直接播放,但是DASH是支持的,比如尝试把后缀名改一下就可以在浏览器播放 |
|
我试了下 listen1 的播放,m4s是可以直接播放的,但是播放链接需要加 |
|
进一步研究,是注入了请求头:https://github.com/listen1/listen1_chrome_extension/blob/24f04d3c9e80f1b076006aff493d312e0bfe6871/js/background.js#L70 遗憾的是这目前并不适用于LX,如果非要支持的话,也得添加相关功能,并且它的音频并不是mp3之类的格式,会导致下载功能异常,权衡后觉得改动太大,还是决定不添加这个源 :( |
|
覆写referer好像不是必须的吧?我用mpv/curl都可以直接下载/播放,只提供url即可 |
|
据测试现在似乎是必须的,你可以试试 |
|
我说的是播放链接本身,你直接把链接粘贴到浏览器地址栏打开会发现打不开,或者写一个自定义源测试下就知道了 |
|
对啊,连mpv/curl这种无状态的都能成功下载,不更说明这其实是返回Content-Type设置为octet-stream的原因吗 |
|
想要重现也很简单,你创建一个简单静态HTML文件,里面加个audio标签,将你拿到的链接设置到src上看能不能播放就知道了 |
|
我这边测试是返回403,是不是你那边的网络进行了什么处理? |
|
我除了挂梯子没有别的网络处理,会不会是比如你的浏览器装了什么插件屏蔽了? |
|
你可以修改这个方法,将传入的src重新赋值为你获取到的url,如果仍然可以播放,那估计是你那边网络特殊或者那个url确实不受限制?
我这边测试了如果不加那个请求头那么listen1也无法播放 |
|
你那边拿到的链接是怎样的?发下出来? |
|
我链接是这个: 和你那边cdn的地址大有不同,不会是运营商的问题吧? |
|
不过确实,我发现upos-sz-mirrorcoso开头的好像确实访问失败,*.mcdn.bilivideo的就没问题 |
|
我试了这个是没问题的: /**
* @name 测试音乐源
* @description 我只是一个测试音乐源哦
* @version 1.0.0
* @author xxx
* @homepage http://xxx
*/
const { EVENT_NAMES, request, on, send } = globalThis.lx
on(EVENT_NAMES.request, ({ source, action, info }) => {
// 被调用时必须返回 Promise 对象
switch (action) {
// action 为 musicUrl 时需要在 Promise 返回歌曲 url
case 'musicUrl':
return Promise.resolve('https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/69/81/32831048169/32831048169-1-30216.m4s')
}
})
// 脚本初始化完成后需要发送 inited 事件告知应用
// 注意:初始化事件被发送前,执行脚本的过程中出现任何错误将视为脚本初始化失败
send(EVENT_NAMES.inited, {
openDevTools: true, // 是否打开开发者工具,方便用于调试脚本
sources: { // 当前脚本支持的源
bili: { // 支持的源对象,可用 key 值:kw/kg/tx/wy/mg/local
name: '哔哩哔哩',
type: 'music', // 目前固定为 music
actions: ['musicUrl'], // 除了 local 外,其他的固定为 ['musicUrl']
qualitys: [],
},
},
}) |
|
草,才发现没在最后面注册b站的源对象(逃
|
|
研究之后发现好像短视频的cdn确实有referer限制,长视频的没有 我改过了,已经放PR里了 |











因为b站有很多音乐视频嘛,一个一个下下来搞比较难受,就想着加一下b站的适配
但是有些地方适配不了,比如专辑这种东西,到底对应up主呢,还是收藏夹呢,还是合集呢
像是歌单推荐这种也完全没法做,压根没有类似的东西
尝试过用up主的视频列表取代搜索结果中的歌单,但万万没想到最近b站加了个限制,无状态用户查看up主视频竟然还要过captcha,这就没办法了
还考虑过用b站的各个分区取代榜单,但是研究半天了还是搞不出来,貌似也有状态校验和风控
b站的评论也有限制,按时间排序的评论也要登录,所以最热和全部评论其实是同一个结果
还有多分p视频也没法做,本来想在加入歌单什么的时候蹦个弹窗选择分p但是感觉有点混乱
所以总之其实就加了热搜、搜索结果、导入收藏夹(对应导入歌单)、评论(只有一种)
做了相应的i18n,而且用eslint修了一些小问题,要不然每次调试都蹦出来怪烦的
至于其他的平台适配我没改,依然是formatter干的(能不能用prettier给仓库过一下,我本来想一并PR但不好意思)
至于从bvid(对应songmid)拿音频流还是蛮简单的,示例:
第二个commit是在用户脚本注入那里加了个md5的脚本,可有大用处了,比如酷狗的api必须得用md5,就可以避免用自定义脚本90%的空间写一堆奇奇怪怪的天书