-
Notifications
You must be signed in to change notification settings - Fork 9
网易云音乐API
ChienHo edited this page Oct 29, 2018
·
1 revision
本文档仅用于个人研究,请勿用于商业或违法用途。
eapi是网易云音乐客户端新的API接口,加密算法比较简单,下面以OSX客户端为例。
- 组装当前接口的参数
params,并使用json序列化为字符串,请求后端的接口path。 - 计算sign。
sign = md5("nobody" + path + "use" + params + "md5forencrypt") - AES加密请求参数。AES模式为ECB,原文为
path + "-36cd479b6b5-" + params + "-36cd479b6b5-" + sign,密钥为e82ckenh8dichen8。 - 发起请求,请求URL为
"https://music.163.com/" + gateway_path,body为params=AES加密结果,Content-Type: application/x-www-form-urlencoded。
具体实现如下:
def _eapi_encrypt(path, params): """ eapi接口参数加密 :param bytes path: 请求的路径 :param params: 请求参数 :return str: 加密结果 """ params = json.dumps(params, separators=(',', ':')).encode() sign_src = b'nobody' + path + b'use' + params + b'md5forencrypt' m = hashlib.md5() m.update(sign_src) sign = m.hexdigest() aes_src = path + b'-36cd479b6b5-' + params + b'-36cd479b6b5-' + sign.encode() pad = 16 - len(aes_src) % 16 aes_src = aes_src + bytearray([pad] * pad) crypt = AES.new(b'e82ckenh8dichen8', AES.MODE_ECB) ret = crypt.encrypt(aes_src) return b2a_hex(ret).upper()
- path: /api/cloudsearch/pc
- params:
- offset: 0
- limit: 100
- hlposttag:
- hlpretag:
- total: true
- type: 1
- type=1,歌曲
- type=1006,歌词
- type=1009,主播电台
- s: 周杰伦
- path: /api/song/enhance/player/url
- params:
- ids: [10001, 10002] #歌曲ID列表
- br: 128000 #码率
- br=128000
- br=320000
weapi是网易云Web端新的API接口。