网易云旧版 API 总结

声明:本文提及的一切 API、算法、秘钥等内容均为本人靠聪明的大脑猜解而得,没有对任何软件进行任何反编译等违反软件使用协议的行为

本文所提及 API 来自网易云音乐 Windows 客户端。具体版本会在下文说明。失效链接会单独说明。
另外,返回的数据是 json 格式,简单易懂,请大家自行解析,本文不再赘述。

一、PC-1.0.0 Beta

1.获取评论:

http://music.163.com/api/resource/comments/R_SO_4_{song_id}/?rid=R_SO_4_{song_id}&offset={offset}&total=true&limit={limit}

所需 cookie: os=pc

字段解释:
song_id:乐曲 id
offset:评论偏移量,返回从第 offset 个开始的评论
limit:数量限制,共返回 limit 个评论

2.获取专辑详情

http://music.163.com/api/album/{album_id}?ext=true&id={album_id}&offset={offset}&total=true&limit={limit}
cookie 同上,字段解释类似。

3.获取歌单详情

http://music.163.com/api/playlist/detail?id={playlist_id}&offset={offset}&total=true&limit={limit}
cookie 同上,字段解释类似。

4.歌手相关

4.1 获取歌手信息及其热门歌曲

http://music.163.com/api/artist/{artist_id}?ext=true&top=50&id={artist_id}

4.2 获取歌手的所有专辑

http://music.163.com/api/artist/albums/{artist_id}?id={artist_id}&offset={offset}&total=false&limit={limit}

cookie同上,字段解释类似。

5.歌曲相关

5.1获取歌词

在这个版本的云音乐软件中,此 API 可能是一个同时获取歌曲的 mp3 文件链接和歌词的 API,但是现在 mp3 文件链接已不再返回,只返回歌词
http://music.163.com/api/song/media?id={song_id}
cookie同上,字段解释类似。

二、 PC-1.5.0

1.搜索

1.1 搜索结果

POST请求,
http://music.163.com/api/search/pc
请求体:
格式为 URL 编码后的 form(x-www-form-urlencoded)
内容为:hlpretag=<span class="s-fc2">&hlposttag=</span>&s={search_content}&offset={offset}&total=true&limit={limit}&type={type}
cookie同上,字段解释类似。offset默认为0,limit默认为100.
type项选择搜索类型
1:歌曲;10:专辑;100:歌手;1000:歌单;1002:用户;
1006:歌词;1009:主播电台

1.2 搜索建议

POST请求,
http://music.163.com/api/search/suggest/web
请求体:
格式同上,内容:s={search_content}&limit={limit}
cookie同上,字段解释类似。limit默认值为6。

2.评论

http://music.163.com/api/v1/resource/comments/R_SO_4_{song_id}?rid=R_SO_4_{song_id}&offset={offset}&total=true&limit={limit}
cookie同上,字段解释类似。limit默认为20.

3.歌曲信息及 mp3 文件地址

http://music.163.com/api/song/detail/?ids=%5B{song_id}%5D
注:这个 API 返回的 mp3 文件地址只是最低级的 96kbps 的 mp3 文件。此 json 内包含了不同音质各自对应的dfsID一项, 用于下载对应的高音质 mp3 文件。
此处附上由 dfsID 获取 mp3 文件 URL 的 Python 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#python_version: 2.7

def encrypted_id(id):
magic = bytearray('3go8&$8*3*3h0k(2)2', 'u8')
song_id = bytearray(id, 'u8')
magic_len = len(magic)
for i, sid in enumerate(song_id):
song_id[i] = sid ^ magic[i % magic_len]
m = hashlib.md5(song_id)
result = m.digest()
result = base64.b64encode(result)
result = result.replace(b'/', b'_')
result = result.replace(b'+', b'-')
return result.decode('utf-8')

def get_mp3_URL(dfsID):
enc_id = encrypted_id(dfsID);
return 'http://m2.music.126.net/%s/%s.mp3' % ( enc_id, dfsID)

对于在网页端提示"由于版权原因无法播放"的音乐,此方法无效。

不需要cookie.

4.歌词

http://music.163.com/api/song/lyric?os=pc&id={song_id}&lv=-1&kv=-1&tv=-1
不需要cookie.


网易云旧版 API 总结
http://blog.yotubird.club/posts/2017/bbbc0577.html
作者
nqr
发布于
2017年2月13日
许可协议