网易云音乐API - picone/MusicUnionSearch GitHub Wiki
本文档仅用于个人研究,请勿用于商业或违法用途。
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接口。