从网易云音乐缓存文件得到 MP3

最近想获取几首好听的网易云音乐文件,但是不是会员,只有缓存文件,而且经过加工了的。
以前获取过某k歌的缓存文件,直接修改后缀名就行了,但是网易云音乐不行,sigh

下面开始探索网易云音乐之旅:D

目录

  • 解密缓存文件
  • 获得歌曲信息
  • 获取歌词
    • lyric文件
    • 利用API获取歌词
  • 成果
    • 完整代码
  • 感想
  • 注意
  • And finally

解密缓存文件

在手机上的缓存文件在 netease/cloudmusic/Cache/Music1
观察可以发现,歌曲缓存文件包括两个,一个是index文件.idx!,另一个是歌曲文件,index文件和歌词文件(歌曲id命名)都是txt文件,可以直接打开,而歌曲文件.uc!打开错误。缓存文件是修改过的。如图:

file

进一步地,缓存文件和源文件大小一样大,所以没有经过压缩,最简单的想法是异或运算,这样最简单,加密,解密一样的操作。逐个尝试,发现每字节和0xa3异或即可,得到正确的文件,可以播放,哈哈 :smiley: 下面是代码,注意用bytearray修改bytes

with open (fileName,'rb') as f:
    btay = bytearray(f.read())
with open(newFile,'wb') as out:
    for i,j in enumerate(btay):
        btay[i] = j ^ 0xa3
    out.write(bytes(btay))

获得歌曲信息

为了给歌曲文件正确命名,我想获得歌曲题目和歌手信息。虽然.idx!索引文件包含一些属性,但是没有歌曲标题和歌手,不过重要的是musicId,这是歌曲的唯一标识。然后发现.idx! .uc!文件都是以id开头的,且歌词文件是id命名的。

可以用这个 api 来获取信息
https://api.imjad.cn/cloudmusic/?type=detail&id=1234132

还有另一种方法,mp3等文件格式有一些metadata (元素据),mp3文件的 id3 tag里面就包含标题,歌手。这是wiki的介绍

mp3

然后找python模块,网上说eyeD3比较好用,但是我安装好后提示libmagic找不到,搜索问题未能解决(如果你有解决办法,请告诉我,十分感谢), 然后用的mutagen模块,这个模块能操作很多格式的文件,这是效果

id3

获取歌词

有两种方法

lyric文件

这是歌词文件内容

file

从这个文件中读取。 解析这个文件,由于没有统一的键,所以可以用正则表达式r'(lyric|lrc|klyric|kalaokLyric|tlyric)\s*[\'\"]:\s*[\'\"]\s*\[')来检查是否有歌词内容

# self.hasLrcPt= re.compile(r'(lyric|lrc|klyric|kalaokLyric|tlyric)\s*[\'\"]:\s*[\'\"]\s*\[')
# self.lrcKey = 'lyric|lrc|klyric|kalaokLyric|tlyric'.split('|')

def noLrc(self,s):
        '''judge if a dict or a string  has lyrics'''
        if isinstance(s,str):
            return self.hasLrcPt.search(s) is  None
        else:
            return not  reduce(or_,[i in s and s[i]!='' for i in self.lrcKey]) 

检查到有歌词后,可以发现每句是这样的

[0:09.000]平安夜,亵渎的夜晚\n

最开始用的r'\[\d+,\d+\](\(\d+,\d+\)(\w))+\n'),然而总是匹配不到,在交互模式又匹配得很精确,在这里浪费了很多时间,最后发现是\n的问题,在正则表达式中要用\\n,作为字符串在交互模式下打印出来只显示了\n, :weary: , 心累 ,改为r'\[\d+:\d+\.\d+\](.*?)\\n'.

利用API获取歌词

利用上面的 api , 传递 lyric 参数即可

注意由于是缓存文件,有极少的音乐可能id3 tag以及 api 都没有信息,对于这些,我直接用的id命名

成果

  • 展示
display.gif
  • 运行输出
  • 歌词


  • MP3


完整代码

github

感想

:flushed: (羞涩
有时看书有点没有耐心,想实践,然而如果没有掌握好知识,实践的话就会踩很多坑,甚至可能还爬不起来有些坑。 还差得远呢,还得加油哦!

注意

  • 有极少数的缓存文件 在 api 中没有信息, 在 id3 tag 中也没有, 这些歌曲我用的 id 来命令
  • 最新更新都在github上, 博客很少更新, 所以使用前最好去读一下 github 的 readme

And finally

warning

(学习使用异或加密 :see_no_evil:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容