将网易云音乐歌单导出为M3U8播放列表文件

用网易云音乐快四五年,累计播放量两千多。从去年开始就有不想再用网易云音乐的打算,上半年买了一台索尼NW-A55(本来是有一台山灵M0的,但是它太小了被我随手丢洗衣机做了一套全机清洁后就坏掉了)。

但是听歌习惯真的好难改,也舍不得就这么抛弃掉自己用网易这么多年攒下的二十多个播放列表,把帐号注销后才意识到少了歌单就好像生活中少了很重要的一部分一样,然后急匆匆的联系客服能不能恢复注销的帐号。换一种听歌风格突然从一个自己用得很顺手的音乐软件换到别的软件还是很不适应的。发现大多数人并非是因为对网易云有感情才一直用网易,而是对自己的歌单恋恋不舍才坚持用网易的。曾经看到一篇热评说自己死了歌单也要传给下一代不能丢,有人说音乐就像一个神奇的“盒子”当你打开它你曾经很多记忆也会浮现出来,而歌单将这些“盒子”按时间顺序规整起来,一个人的时候打开看一看。像我这种曾经听歌每天三四个小时的人,歌单对于我的意义更重要一些了吧。


前一阵子用python照着某大神的代码搞了个课表转ics文件的小程序,正好顺便把忘掉的东西捡回来一些,数据结构的老师跟我们说python是最没技术含量的语言,不知是他糊弄我们还是真就是这样,不过确实只需要照着参考资料再调用一大堆库它就能解决很多问题实现许多功能,自学起来门槛也蛮低,这也许是它在我们辣鸡学校的学生里很热门的原因之一吧。

大致在网上查了一下有很多现成的网易云音乐播放列表导出的工具,大多都是不能导出M3U8只能搞个txt出来,再就是网易云更新了就不能用有各种问题的。

觉得那些工具有些太复杂了我也看不懂,一个播放列表用不着破解缓存文件,也用不着对客户端文件做什么手脚,更犯不上给浏览器装一两个插件然后装完发现网页更新那个插件已经不好用了。一个python程序就能搞出来的东西干嘛非要搞个数据库什么的,这些我也都没学过也没兴趣,就算真的把缓存文件格式弄明白了解码出了文件也未必就能轻易把播放列表按我喜欢的方式排出来。于是用python抓了云音乐网页版的播放列表数据,对它实施一堆字符串查找加字符串分割(这玩意要是让我用C写我怕不是会累死),意外的发现好像还真的能用。

不过抓取网页的数据只能获取到歌曲名称和歌曲的id,没找到明文显示的歌手信息(不知道是加密了还是在什么别的页面显示的),所以只好再通过歌曲id抓取歌曲信息的页面获取歌手名字,这样一来程序运行速度会大大降低,要一首一首的获取歌手信息,不过能用就行,一个300多首歌的列表一两分钟也就能处理完还是能接受。

为了让播放列表直接被导出成能播放的M3U8文件,需要查找每首歌对应的文件所在的位置,一开始打算直接把名字改为“歌手名称 - 歌曲名称”这种格式去搜索文件,实测发现下载完的歌曲文件名把半角的"/"变成了全角的"/",还有半角"*"变成"*",以及有的歌手名之间没有逗号分隔直接空格,那些半角全角转换可以用字符替换来实现但我没办法确定你歌手是逗号还是空格还是斜杠间隔的啊,不过好在这些只是个别案例,生成播放列表文件后手动修改过来就好了。

最后把M3U8和CloudMusic目录一起复制到内存卡根目录里插入Walkman中就可以完美食用了。

代码放到github上,就不在这里贴出来了。


还是NW-A55的音质好,少了网易云的热评总感觉少了点灵魂,不过它没有广告啊,启动时不用担心你一不小心点到广告跳转到别的页面,把音乐全保存到本地不用每个月都充会员什么黑胶VIP了,尽管一个月不到十块钱但学生党穷没办法啊,更不用担心会员到期了它还会把你下载完的会员专属歌曲再全删掉。

也不要跟我说什么A55音质还不如手机这类的,都有钱买A55了为啥不再加几百块钱买这个那个国砖什么的,我需要的是一个小巧精致的音乐播放器而非你用来脑放烧钱的设备,对我来说A55足够,音质比我手机好(一耳朵就能听出来的),做工的确不是国产能比的,还能当蓝牙接收器,毕竟索尼大法好啊。。。

然后就是不用受那些与音乐无关的直播什么的干扰了,尽管日推和私人FM和电台这几个功能很多人用但是我几乎没用过几次所以我完全不需要,音乐播放器就要有音乐播放器的亚子,你搞那么多花玩意出来把一个音乐播放器搞得乱七八糟跟一个毒瘤软件一样,就很不舒服了。

除此之外还有版权问题,用Walkman就不会遇到某讯的音乐上独家版权网易上没有版权这种恶心问题了,有些歌我都是在itunes上买了正版的但是搞到网易云音乐里听还很费劲。

之前为了备份我在网易上听过的歌曲都是把CloudMusic文件夹囫囵个复制下来,时间久了搞不好有些歌就重了,flac文件和mp3文件混了,再就是npm一加密cnm我也听不了啊mmp(玩耿勿当真)......

最后希望我写这些不会给网易招黑(逃


说实话给我一天加一下午的时间也够我一首一首把播放列表排序出来了,不过还是写个轮子更好一些,这样一旦以后我网易上又有新播放列表了我只需要重新生成一下然后同步一下就好了省事很多,我不喜欢蛮力重复又无趣的做一件事情啊。

最后附上效果图:(A55太好看了啊啊啊)

想喝咖啡!