
我重构了网易云解析工具
Mar 28, 2025
在去年十月, 我因为想要把网易云的歌曲全部下载到手机上用本地播放器听歌, 就一直在找解析工具, 但是发现很多解析工具都只有单曲解, 这就比较麻烦了, 歌单里面几十上百首歌总不能我一首一首去下吧, 就寻思自己写一个批量下载.
最开始我是使用苏晓倩的网易云api, 但是我发现她这个只有单曲解析, 那就尴尬了, 但是想到之前有个很大型的网易云api项目, 翻了一下让我找到获取歌单所有歌曲的api. 那就好办了, 直接通过歌单id获取到所有歌曲的id再批量下载就好了, 原理就这么简单.
因为当时还没学nuxt, 所以我用了一个比较麻烦的方案, 直接把两个api项目部署到服务器上, 然后写一个vue应用去使用api实现批量下载.
这个方案的弊端也比较明显, 有些难维护, 因为我发现总是出现下载失败的问题, 而且问题大部分是服务器的锅, 例如不知道什么原因pm2托管的服务掉了, 或者nginx报错了.
而且因为苏晓倩的api是使用python编写的, 我也不会python, 想自己加一些功能比较麻烦.
终于, 前两天我实在受不了了, 就用nuxt直接重构, 顺便玩玩新学的typescript
和tailwind css
.
我真的太喜欢了nuxt了, 直接可以把前后端写在一个项目中, 启动一次就好了, 之前写需要前后端的项目的时候, 每次都得手动启动两个项目, 非常不健康. 而且nuxt还有自动导入, 不需要我每次都写
import
说实话要感谢科技的发展, 接口的转移大部分靠ai直接帮我从python翻译成typescript, 如果没有ai我得花更多的时间去理解那些我从来没学过的代码.
其实这些接口实际上是对网易云的接口进行了二次封装, 因为网易云的接口返回的数据很多很杂, 当然, 这并不意味着我们就需要大费心思去写后端, 直接用pinia去处理就好了.
实际上我对接口二次封装的原因是因为获取歌曲下载链接getSongUrl.get
接口需要使用黑胶会员的cookie, 如果我直接在前端使用cookie获取, 会有泄漏的风险, 这明显不安全, 所以我写了个后端, 保证cookie不会在前端泄漏.
接下来按照解析流程来说说接口代码吧.
首先用户输入完url点击获取按钮后就会调用getPlaylist.get.js
这个接口, 接口接受一个id, 既歌单id.
向https://music.163.com/api/v6/playlist/detail
这个接口发起请求, 获取歌单的信息, 因为这个接口能够获取到的单曲只有前十首有详细信息, 剩下的只有单曲idresult.playlist.trackIds
.
所以我们需要另外一个接口去获取所有单曲.
这件事比较简单粗暴, 前端直接使用上一个接口返回的单曲id去向getSongInfo.get
接口逐个获取, 这个接口会返回一些歌曲名, 作者专辑信息.
现在就可以开始下载需要的歌曲了, 我们需要下载歌曲本体
、歌词
、封面
.
当按下下载时, 前端创建一个zip对象用于保存下载的文件, 然后下载getSongInfo.get
接口返回的封面, 再向getSongLyric.get
& getSongUrl.get
接口发起请求, 获取歌词和下载链接, 下载完这三样直接打包下载.
就这样, 一首需要vip的歌就这样下载完成了.
我觉得比较抽象, 我弄这个玩意的本意就是想白嫖, 并且避免网易云的版权问题, 结果还是开了个会员去用这个接口, 有点本末倒置了.