我的MusicFree写源之旅
引言
最初听音乐还是用的洛雪,只要找到好的音源就可以听着,那个时候还是一直用的六音。然后研究了一下它的音源的写法,基本就是一个解析服务器,对接了5大平台,把真实的链接给出来就行了。5大平台里的歌单和分类排行等,都是洛雪自己弄好了的。后来又接触了MusicFree,发现它的插件挺自由的,可拓展性较高,粗略浏览了一下开发文档和模板,其实也不难,无非就是那些借口,用ts开发出来就行了。
抱着学习写写TS的心态,想着搞一个网站练练手,当时在web网页上弄数据嫌麻烦,就随手在海阔视界里找了一个歌曲类的插件,分析了一下,然后按照MusicFree的插件开发文档格式开始写插件了。
插件官方网站
很熟悉的vitePress的味道 官网:https://musicfree.catcat.work 插件开发:https://musicfree.catcat.work/plugin/introduction.html
第一个练手插件
在小程序里找了一个叫“岸听”的进行分析,然后学写MusicFree插件,由于有现成的借口规范和借口地址,以及音源的加解密函数,写起来挺顺利。记得当时只写了一个分类、排行、搜索以及播放加歌词等核心接口,然后进行打包测试,使用起来还可以,歌单打开流畅,音源解析也很快。
于是我随手把它分享到了MusicFree的QQ频道里,竟然还有不小的浏览器和点赞。后面就有人在下面留言说岸听APP的服务器频繁失效,可能与我分享的插件有关,我倒是觉得无所谓,如果要下掉就下了,反正只是练手的。之后原作者更新了一版后就下线了这个APP。我当时在他更新了一版后也修改了一版,但是没有再分享了,尊重一下原开发者的成果。
逐渐熟练
有了第一个插件的开发经验之后,我又陆陆续续开发了很多web端网页版的插件,对于插件开发文档也逐渐熟悉,基本清楚了接口的入参与返回结构,只要把数据通过web网页抓取的方式获得,按照指定结构返回,即可完成一个插件的接口开发。
期间也遇到了一些问题,也花费了不少时间,但是也基本解决了,没有遇到什么过不去的坑。
关于https证书的问题
不确定是什么原因导致的问题,表现来看就是在接口中发起请求用https时,采用axios需要配置调过证书验证,而设置了调过证书验证之后,打包出来的插件无法导入到MusicFree中,可能是MusicFree解析模块时不支持这种方式,最后还是改用http请求打包导入成功了,但是对于有些站点必须https可能会是一个麻烦
var html = axios.get(url, {
params: params,
headers: {},
/*httpsAgent: new (require('https').Agent)({
rejectUnauthorized: false // 忽略证书验证
})*/
});
关于某些歌单无法进入详情页的问题
在开发过程中,某些歌单列表的返回数据中,如果没有指定返回platform字段,特别是返回的any对象{}而不是TS对象,MusicFree可能不会自动补全,导致从歌单进入详情时无法获取id而报错,解决方法也很简单,自己补全就好了
关于第三方插件的使用问题
遇到过一个dj网站,使用的gbk编码方式进行urlEncode,需要引入相关的插件,尝试了很多方法,将第三方的依赖源码打包到插件中,测试使用无法播放,而在dev测试时是无问题的,可能是打包方式不对,MusicFree作者大大也没有给一个打包第三方依赖的案例,测试也看不到日志。只能期待作者大大能给个打包demo了
继续输出
有了这些踩坑经历以后,能越发熟练的写插件了。在上述插件都开发完成并稍微优化了几版以后,我也发到了MusicFree的QQ频道上。这时,不断有人留言希望写某个网站的插件。对于这样的反馈,我会先分析一下这个网站写成插件的价值,觉得还不错的网站,先把最难的解析音源先给扒出来。 因为一般的web网站,对音源都做了一定程度的加密混淆,所以我基本都是用js逆向的常用手法解析音源,能够解析成功就写成插件。期间也请我的QQ群里的大佬帮忙分析了一些js逆向获取key及解密算法等。
就这样又开发了几个插件:
后面甚至还开发了听书的插件:六月听书。虽然MusicFree的模式不太适合听书网站,但是也基本能用。我把每一本书当成了一个歌单,每个选集当成了歌曲,做好排序就行。 之后的插件就没有在QQ频道里分享了,一是觉得上面的这些足够普通用户使用,二是考虑到太多会增加以后的维护成本(其实后来对失效的插件我维护更新了一波,好在插件都比较坚挺,不会轻易失效)。
我还根据洛雪的音源文件解析接口,在Huibq的插件代码的基础上,将多个洛雪源接到MusicFree的插件中,防止封禁IP等问题出现,虽然后来那几个洛雪的源都失效了,只能再接入其他的源,只剩下一个有效源了,现在也还算稳定。能够在MusicFree上使用五大平台了。
关于插件使用
其实MusicFree不仅支持单个插件导入,还支持批量订阅地址,可以在插件管理--订阅设置里面,新增一条订阅,就能批量同步多个插件了。里面不仅有我开发的插件,也有收集的一些还不错的搜索插件,至于与5大平台类似的插件就忽略了。
写在最后
插件开发是一个很耗时的过程,需要不断调试,不断优化,不断测试,不断迭代,不断学习,不断提高自己的技术水平,才能开发出好的插件。 关于播放器MusicFree,可以在他的官网上找链接下载,也可以通过我的123盘进行下载,我只放了安卓版和win10版。https://www.123684.com/s/QFXKjv-2oa7d
需要获取我的订阅链接的,可以在我的微信公众号后台,发送“MusicFree”关键词获取。