最近買了個榭蘭圖耳機頭,拿到手第一件事當然是煲機了。弄個舊手機做24小時煲機但是不想再裝多一個網易云音樂,省得一號多登錄會問題。對于軟工男最先想到的肯定是在本地直接播放音樂了,正好自己 有淘寶88VIP聯合會員,于是琢磨著怎么把網易云的試音碟下載下來,想著看看有沒有人弄過類似的。搜一下,還真有。
所以首先要感謝這個哥們:
網易云音樂加密緩存破解(python代碼)_網易云音樂 python下載mp3代碼-CSDN博客
方案是基于緩存進行導出,這樣只要把緩存清空后,播放一遍歌曲列表后音樂文件數據就都有了。
試了下腳本。3個問題:
1)導出的位置放到了我的文檔
2)沒有自動識別后綴,全部都保存為.mp3了
3)沒有根據歌曲自動命名
前倆問題拉著AI敲打幾輪很快就好了,唯獨第3個由于cache里沒有存相關信息,貌似不行。代碼里有嘗試讀ID3 TAG,但是下載的文件里沒有,所以下面代碼只能解決前兩項。如果誰解決了第三項方案麻煩給個留言,我來給你點贊:)
改進的python腳本(export.py):
# pip install mutagen
# 網易云cache導出為音頻
import os
from mutagen import File# 緩存文件存放目錄
cache_folder = '.\\cache\\Cache'
export_folder = '.\\export'def getAllCache():cache_list = []for root, _, fs in os.walk(cache_folder):for f in fs:if f.endswith('.uc'):fullname = os.path.join(root, f)cache_list.append(fullname)return cache_list# 音頻格式檢測(基于 mutagen)
def detect_audio_format(filepath):audio = File(filepath)if audio and audio.mime:mime = audio.mime[0]ext_map = {"audio/mpeg": ".mp3","audio/mp4": ".m4a","audio/x-aac": ".aac","audio/flac": ".flac","audio/ogg": ".ogg","audio/wav": ".wav",}return ext_map.get(mime, ".audio")return ".audio"# 提取音頻標簽(標題、作者)
def get_audio_tags(filepath):audio = File(filepath)if not audio:return None, Nonetitle, artist = None, Noneif audio.tags:for key in audio.tags.keys():k = key.lower()if "title" in k and not title:val = audio.tags[key]title = str(val[0] if isinstance(val, list) else val)if ("artist" in k or "author" in k) and not artist:val = audio.tags[key]artist = str(val[0] if isinstance(val, list) else val)return title, artist# 將uc文件轉換成音頻文件并保存
def transToAudio(cache_list, save_folder):nameid = 0for cache_file in cache_list:tmp_name = str(nameid) + '.tmp'tmp_path = os.path.join(save_folder, tmp_name)# 解密寫入臨時文件with open(cache_file, 'rb') as f:with open(tmp_path, 'wb') as s:byte = f.read(1)while byte:b = int.from_bytes(byte, byteorder='little', signed=False)b = b ^ 163 # 異或解密s.write(bytes([b]))byte = f.read(1)# 檢測格式ext = detect_audio_format(tmp_path)# 提取標簽title, artist = get_audio_tags(tmp_path)# 生成最終文件名if title or artist:safe_title = title if title else f"untitled{nameid}"safe_artist = artist if artist else "unknown"final_name = f"{safe_title}-{safe_artist}{ext}"else:final_name = f"{nameid}{ext}"# 清理非法字符final_name = "".join(c if c.isalnum() or c in " -_." else "_" for c in final_name)final_path = os.path.join(save_folder, final_name)os.rename(tmp_path, final_path)print(f"{cache_file} -> {final_path}")nameid += 1if __name__ == '__main__':os.makedirs(export_folder, exist_ok=True)cache_list = getAllCache()transToAudio(cache_list, export_folder)
把該腳本放到你的網易云音樂緩存目錄,例如:
D:\CloudMusic
然后python export.py運行后,緩存的文件都自動轉換到腳本同級的export目錄了。