用Python转码网易云的缓存文件成mp3。
原理就是读取缓存字节码与0xa3做异或运算,然后分析缓存名称调用网易的api得到歌曲名称,别的没啥。这里有个要注意的地方bytearray笔者一开始当成数组处理了,导致兜了很大的弯子,其实人家是一个独立的对象,立字为据,引以为戒。
# -*- coding: utf-8 -*-
import sys, os, urllib, json, glob
class Song(object):
def __init__(self, path):
super(Song, self).__init__()
self.file_path = path
self.id = os.path.basename(path).split("-")[0]
self.json = {}
self.name = ""
self.artists = ""
def net_info(self):
url = 'http://music.163.com/api/song/detail/?id={}&ids=%5B{}%5D)'.format(self.id, self.id)
print(url)
self.json = json.load(urllib.urlopen(url))
self.name = self.json["songs"][0]["name"]
self.artists = self.json["songs"][0]["artists"][0]["name"]