從網(wǎng)易云音樂(lè)緩存文件得到 MP3

最近想獲取幾首好聽(tīng)的網(wǎng)易云音樂(lè)文件毁菱,但是不是會(huì)員米死,只有緩存文件,而且經(jīng)過(guò)加工了的贮庞。
以前獲取過(guò)某k歌的緩存文件峦筒,直接修改后綴名就行了,但是網(wǎng)易云音樂(lè)不行窗慎,sigh

下面開(kāi)始探索網(wǎng)易云音樂(lè)之旅:D

目錄

  • 解密緩存文件
  • 獲得歌曲信息
  • 獲取歌詞
    • lyric文件
    • 利用API獲取歌詞
  • 成果
    • 完整代碼
  • 感想
  • 注意
  • And finally

解密緩存文件

在手機(jī)上的緩存文件在 netease/cloudmusic/Cache/Music1
觀察可以發(fā)現(xiàn)物喷,歌曲緩存文件包括兩個(gè),一個(gè)是index文件.idx!遮斥,另一個(gè)是歌曲文件峦失,index文件和歌詞文件(歌曲id命名)都是txt文件,可以直接打開(kāi)术吗,而歌曲文件.uc!打開(kāi)錯(cuò)誤氓涣。緩存文件是修改過(guò)的捞慌。如圖:

file

進(jìn)一步地胸哥,緩存文件和源文件大小一樣大紫岩,所以沒(méi)有經(jīng)過(guò)壓縮实幕,最簡(jiǎn)單的想法是異或運(yùn)算吝镣,這樣最簡(jiǎn)單,加密昆庇,解密一樣的操作末贾。逐個(gè)嘗試,發(fā)現(xiàn)每字節(jié)和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!索引文件包含一些屬性府蛇,但是沒(méi)有歌曲標(biāo)題和歌手集索,不過(guò)重要的是musicId,這是歌曲的唯一標(biāo)識(shí)。然后發(fā)現(xiàn).idx! .uc!文件都是以id開(kāi)頭的务荆,且歌詞文件是id命名的妆距。

可以用這個(gè) api 來(lái)獲取信息
https://api.imjad.cn/cloudmusic/?type=detail&id=1234132

還有另一種方法,mp3等文件格式有一些metadata (元素?fù)?jù))函匕,mp3文件的 id3 tag里面就包含標(biāo)題娱据,歌手。這是wiki的介紹

mp3

然后找python模塊盅惜,網(wǎng)上說(shuō)eyeD3比較好用中剩,但是我安裝好后提示libmagic找不到,搜索問(wèn)題未能解決(如果你有解決辦法抒寂,請(qǐng)告訴我咽安,十分感謝), 然后用的mutagen模塊蓬推,這個(gè)模塊能操作很多格式的文件妆棒,這是效果

id3

獲取歌詞

有兩種方法

lyric文件

這是歌詞文件內(nèi)容

file

從這個(gè)文件中讀取。 解析這個(gè)文件沸伏,由于沒(méi)有統(tǒng)一的鍵,所以可以用正則表達(dá)式r'(lyric|lrc|klyric|kalaokLyric|tlyric)\s*[\'\"]:\s*[\'\"]\s*\[')來(lái)檢查是否有歌詞內(nèi)容

# 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]) 

檢查到有歌詞后糕珊,可以發(fā)現(xiàn)每句是這樣的

[0:09.000]平安夜,褻瀆的夜晚\n

最開(kāi)始用的r'\[\d+,\d+\](\(\d+,\d+\)(\w))+\n')毅糟,然而總是匹配不到红选,在交互模式又匹配得很精確,在這里浪費(fèi)了很多時(shí)間姆另,最后發(fā)現(xiàn)是\n的問(wèn)題喇肋,在正則表達(dá)式中要用\\n,作為字符串在交互模式下打印出來(lái)只顯示了\n, :weary: 迹辐, 心累 蝶防,改為r'\[\d+:\d+\.\d+\](.*?)\\n'.

利用API獲取歌詞

利用上面的 api , 傳遞 lyric 參數(shù)即可

注意由于是緩存文件,有極少的音樂(lè)可能id3 tag以及 api 都沒(méi)有信息明吩,對(duì)于這些间学,我直接用的id命名

成果

  • 展示
display.gif
  • 運(yùn)行輸出
  • 歌詞


  • MP3


完整代碼

github

感想

:flushed: (羞澀
有時(shí)看書(shū)有點(diǎn)沒(méi)有耐心,想實(shí)踐印荔,然而如果沒(méi)有掌握好知識(shí)低葫,實(shí)踐的話就會(huì)踩很多坑,甚至可能還爬不起來(lái)有些坑仍律。 還差得遠(yuǎn)呢嘿悬,還得加油哦!

注意

  • 有極少數(shù)的緩存文件 在 api 中沒(méi)有信息, 在 id3 tag 中也沒(méi)有, 這些歌曲我用的 id 來(lái)命令
  • 最新更新都在github上, 博客很少更新, 所以使用前最好去讀一下 github 的 readme

And finally

warning

(學(xué)習(xí)使用異或加密 :see_no_evil:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末水泉,一起剝皮案震驚了整個(gè)濱河市善涨,隨后出現(xiàn)的幾起案子主到,更是在濱河造成了極大的恐慌,老刑警劉巖躯概,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件登钥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡娶靡,警方通過(guò)查閱死者的電腦和手機(jī)牧牢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)姿锭,“玉大人塔鳍,你說(shuō)我怎么就攤上這事∩氪耍” “怎么了轮纫?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)焚鲜。 經(jīng)常有香客問(wèn)我掌唾,道長(zhǎng),這世上最難降的妖魔是什么忿磅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任糯彬,我火速辦了婚禮,結(jié)果婚禮上葱她,老公的妹妹穿的比我還像新娘撩扒。我一直安慰自己,他們只是感情好吨些,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布搓谆。 她就那樣靜靜地躺著,像睡著了一般豪墅。 火紅的嫁衣襯著肌膚如雪泉手。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,258評(píng)論 1 300
  • 那天但校,我揣著相機(jī)與錄音螃诅,去河邊找鬼啡氢。 笑死状囱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的倘是。 我是一名探鬼主播亭枷,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搀崭!你這毒婦竟也來(lái)了叨粘?” 一聲冷哼從身側(cè)響起猾编,我...
    開(kāi)封第一講書(shū)人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎升敲,沒(méi)想到半個(gè)月后答倡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驴党,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年瘪撇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片港庄。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倔既,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鹏氧,到底是詐尸還是另有隱情渤涌,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布把还,位于F島的核電站实蓬,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吊履。R本人自食惡果不足惜瞳秽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望率翅。 院中可真熱鬧练俐,春花似錦、人聲如沸冕臭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辜贵。三九已至悯蝉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間托慨,已是汗流浹背鼻由。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厚棵,地道東北人蕉世。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像婆硬,于是被迫代替她去往敵國(guó)和親狠轻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 使用GIT SUBTREE集成項(xiàng)目到子目錄 使用場(chǎng)景 例如彬犯,在項(xiàng)目Game中有一個(gè)子目錄AI向楼。Game和AI分別是...
    anddygon閱讀 1,066評(píng)論 0 0
  • 在回上古界的途中查吊,洛白真神一念思索這手串,想自己未蘇醒或許是件好事湖蜕。一念又覺(jué)得或許她這樣的命運(yùn)注定萬(wàn)世孤獨(dú)一身逻卖,不...
    嚒嚒噠閱讀 208評(píng)論 0 0
  • (一) 出了舞蹈室的門(mén),天已經(jīng)微微黑...
    夏天的子道閱讀 325評(píng)論 0 0