
最近买了个榭兰图耳机头,拿到手第一件事当然是煲机了。弄个旧手机做24小时煲机但是不想再装多一个网易云音乐,省得一号多登录会问题。对于软工男最先想到的肯定是在本地直接播放音乐了,正好自己 有淘宝88VIP联合会员,于是琢磨着怎么把网易云的试音碟下载下来,想着看看有没有人弄过类似的。搜一下,还真有。
所以首先要感谢这个哥们:
网易云音乐加密缓存破解(python代码)_网易云音乐 python下载mp3代码-CSDN博客
方案是基于缓存进行导出,这样只要把缓存清空后,播放一遍歌曲列表后音乐文件数据就都有了。
试了下脚本。3个问题:
1)导出的位置放到了我的文档
2)没有自动识别后缀,全部都保存为.mp3了
3)没有根据歌曲自动命名
前俩问题拉着AI敲打几轮很快就好了,唯独第3个由于cache里没有存相关信息,貌似不行。代码里有尝试读ID3 TAG,但是下载的文件里没有,所以下面代码只能解决前两项。如果谁解决了第三项方案麻烦给个留言,我来给你点赞:)
改进的python脚本(export.py):
python
# 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, None
title, artist = None, None
if 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 = 0
for 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 += 1
if __name__ == '__main__':
os.makedirs(export_folder, exist_ok=True)
cache_list = getAllCache()
transToAudio(cache_list, export_folder)
把该脚本放到你的网易云音乐缓存目录,例如:
D:\CloudMusic
然后python export.py运行后,缓存的文件都自动转换到脚本同级的export目录了。