网易云音乐API分析

1. 总览

本文档是通过对网易云音乐Android客户端(1.5.2)的部分功能进行分析得出的

在所有的交互中,均需要在cookie中添加这对键值appver=1.5.2;

(Update 2014-07-13) cookie中添加appver=2.0.2 referer设置为http://music.163.com

2. 搜索

POST http://music.163.com/api/search/get/

参数

s: 搜索词

limit: 返回数量

sub: 意义不明(非必须参数);取值:false

type: 搜索类型;取值意义

1 单曲

10 专辑

100 歌手

1000 歌单

1002 用户

offset: 偏移数量,用于分页

MUSIC_U: 意义不明(非必须参数)

示例

curl -d "s=玫瑰色的你&limit=20&type=1&offset=0" -b "appver=1.5.2;" http://music.163.com/api/search/get/

结果:

{

"code": 200,

"result": {

"songCount": 1,

"songs": [

{

"album": {

"status": 1,

"copyrightId": 0,

"name": "\u795e\u7684\u6e38\u620f",

"artist": {

"alias": [],

"picUrl": null,

"id": 0,

"name": ""

},

"publishTime": 1344528000000,

"id": 32311,

"size": 10

},

"status": 1,

"copyrightId": 0,

"name": "\u73ab\u7470\u8272\u7684\u4f60",

"mvid": 5102,

"alias": [],

"artists": [

{

"alias": [],

"picUrl": null,

"id": 10557,

"name": "\u5f20\u60ac"

}

],

"duration": 297927,

"id": 326695

}

]

}

}

3. 获取歌手专辑列表

GET http://music.163.com/api/artist/albums/[artist_id]/

其中artist_id用歌手id替换

参数

offset: 偏移数量,用于分页

limit: 返回数量

示例

curl -b "appver=1.5.2;" "http://music.163.com/api/artist/albums/10557?offset=0&limit=3"

结果:

{

"hotAlbums": [

{

"status": 1,

"blurPicUrl": "http://p2.music.126.net/mic-HzsY8tNY6DD1eHzdlg==/612427976714915.jpg",

"commentThreadId": "R_AL_3_2263047",

"description": "",

"tags": "",

"briefDesc": "",

"artist": {

"img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",

"name": "\u5f20\u60ac",

"briefDesc": "",

"albumSize": 8,

"img1v1Id": 0,

"alias": [

"\u7126\u5b89\u6ea5"

],

"picId": 168225279065170,

"picUrl": "http://p1.music.126.net/F7i_-eBbuhpBXodY5U2oTw==/168225279065170.jpg",

"id": 10557

},

"companyId": 0,

"publishTime": 1349366400007,

"name": "\u795e\u7684\u6e38\u620f \u5de1\u6f14\u7cbe\u534e\u5b9e\u5f55",

"alias": [],

"picId": 612427976714915,

"copyrightId": 0,

"picUrl": "http://p1.music.126.net/mic-HzsY8tNY6DD1eHzdlg==/612427976714915.jpg",

"company": "\u7d22\u5c3c\u97f3\u4e50",

"songs": null,

"type": null,

"id": 2263047,

"size": 7

},

...

],

"more": true,

"code": 200,

"artist": {

"img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",

"name": "\u5f20\u60ac",

"briefDesc": "",

"albumSize": 8,

"img1v1Id": 0,

"alias": [

"\u7126\u5b89\u6ea5"

],

"picId": 168225279065170,

"picUrl": "http://p1.music.126.net/F7i_-eBbuhpBXodY5U2oTw==/168225279065170.jpg",

"id": 10557

}

}

4. 获取专辑音乐列表

GET http://music.163.com/api/album/[album_id]/

其中album_id用专辑id替换

示例

curl -b "appver=1.5.2;" "http://music.163.com/api/album/32311/"

结果:

{

"album": {

"alias": [

"Games We Play"

],

"artist": {

"albumSize": 8,

"alias": [

"\u7126\u5b89\u6ea5"

],

"briefDesc": "",

"id": 10557,

"img1v1Id": 0,

"img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",

"name": "\u5f20\u60ac",

"picId": 168225279065170,

"picUrl": "http://p1.music.126.net/F7i_-eBbuhpBXodY5U2oTw==/168225279065170.jpg"

},

"blurPicUrl": "http://p1.music.126.net/cdoUJ2yO5LRuJhGeIsRdjQ==/46179488380332.jpg",

"briefDesc": "",

"commentThreadId": "R_AL_3_32311",

"company": "\u7d22\u5c3c\u97f3\u4e50\u5a31\u4e50",

"companyId": 0,

"copyrightId": 0,

"description": "2012...\n\n",

"id": 32311,

"info": {

"commentCount": 1,

"comments": null,

"latestLikedUsers": null,

"liked": false,

"likedCount": 0,

"shareCount": 2,

"threadId": "R_AL_3_32311"

},

"name": "\u795e\u7684\u6e38\u620f",

"picId": 46179488380332,

"picUrl": "http://p1.music.126.net/cdoUJ2yO5LRuJhGeIsRdjQ==/46179488380332.jpg",

"publishTime": 1344528000000,

"size": 10,

"songs": [

{

"album": {

"alias": [

"Games We Play"

],

"artist": {

"albumSize": 0,

"alias": [],

"briefDesc": "",

"id": 0,

"img1v1Id": 0,

"img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",

"name": "",

"picId": 0,

"picUrl": ""

},

"blurPicUrl": "http://p1.music.126.net/cdoUJ2yO5LRuJhGeIsRdjQ==/46179488380332.jpg",

"briefDesc": "",

"commentThreadId": "R_AL_3_32311",

"company": "\u7d22\u5c3c\u97f3\u4e50\u5a31\u4e50",

"companyId": 0,

"copyrightId": 0,

"description": "",

"id": 32311,

"name": "\u795e\u7684\u6e38\u620f",

"picId": 46179488380332,

"picUrl": "http://p1.music.126.net/cdoUJ2yO5LRuJhGeIsRdjQ==/46179488380332.jpg",

"publishTime": 1344528000000,

"size": 10,

"songs": null,

"status": 1,

"tags": "",

"type": ""

},

"alias": [],

"artists": [

{

"albumSize": 0,

"alias": [],

"briefDesc": "",

"id": 10557,

"img1v1Id": 0,

"img1v1Url": "http://p1.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg",

"name": "\u5f20\u60ac",

"picId": 0,

"picUrl": ""

}

],

"bMusic": {

"bitrate": 320000,

"dfsId": 1012650209189891,

"id": 10334056,

"name": "\u73ab\u7470\u8272\u7684\u4f60",

"playTime": 297927,

"size": 11930240

},

"commentThreadId": "R_SO_4_326695",

"copyrightId": 0,

"dayPlays": 0,

"duration": 297927,

"hMusic": {

"bitrate": 320000,

"dfsId": 1012650209189888,

"id": 10334053,

"name": "\u73ab\u7470\u8272\u7684\u4f60",

"playTime": 297927,

"size": 11930240

},

"hearTime": 0,

"id": 326695,

"lMusic": {

"bitrate": 96000,

"dfsId": 1012650209189890,

"id": 10334055,

"name": "\u73ab\u7470\u8272\u7684\u4f60",

"playTime": 297927,

"size": 3595194

},

"mMusic": {

"bitrate": 160000,

"dfsId": 1012650209189889,

"id": 10334054,

"name": "\u73ab\u7470\u8272\u7684\u4f60",

"playTime": 297927,

"size": 5976935

},

"mp3Url": "http://m1.music.126.net/uCNvR9xHLoQIj1kIRyzadQ==/1012650209189889.mp3",

"mvid": 5102,

"name": "\u73ab\u7470\u8272\u7684\u4f60",

"playedNum": 0,

"popularity": 95.0,

"position": 1,

"score": 95,

"starred": false,

"starredNum": 0,

"status": 1

},

...

],

"status": 1,

"tags": "",

"type": ""

},

"code": 200

}

5. 下载音乐文件

GET http://m1.music.126.net/[encrypted_song_id]/[song_dfsId].mp3

其中song_dfsId为歌曲id,同一歌曲不同比特率有不同的id,见上结果。encrypted_song_id为song_dfsId加密后的字符串。

歌曲id加密代码

import md5

def encrypted_id(id):

byte1 = bytearray('3go8&$8*3*3h0k(2)2')

byte2 = bytearray(id)

byte1_len = len(byte1)

for i in xrange(len(byte2)):

byte2[i] = byte2[i]^byte1[i%byte1_len]

m = md5.new()

m.update(byte2)

result = m.digest().encode('base64')[:-1]

result = result.replace('/', '_')

result = result.replace('+', '-')

return result

android网易云音乐api接口,网易云音乐API分析相关推荐

  1. 唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口

    一.唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口接口可获取到宝贝标题,宝贝价格,宝贝ID,宝贝图片,优惠价,宝贝链接,卖家昵称,店铺所在 ...

  2. 淘宝/天猫/1688拍立淘API接口(以图搜商品API接口,图片搜索API接口,图片搜索商品API接口)代码对接教程

    淘宝/天猫/1688拍立淘API接口(以图搜商品API接口,图片搜索API接口,图片搜索商品API接口)代码对接教程如下: 1.公共参数 名称 类型 必须 描述(接口代码教程wx19970108018 ...

  3. 京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口

    一.京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口代码对接如下: 1.请求参数: 名称 类型 必须 描述 key String 是 调用key ...

  4. 京东商品详情页API接口、京东商品销量API接口、京东商品列表API接口、京东APP详情API接口、京东详情API接口,京东SKU信息接口

    京东商品详情页API接口.京东商品销量API接口.京东商品列表API接口.京东APP详情API接口.京东详情API接口,京东SKU信息接口,通过商品ID提取商品详情页各项数据,包含商品标题,sku i ...

  5. 京东商品详情APP原数据API接口-(item_get_app-获得JD商品详情原数据API接口),京东API接口

    一.京东商品详情APP原数据API接口-(item_get_app-获得JD商品详情原数据API接口),京东API接口代码如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用k ...

  6. 京东商品详情页API接口、京东详情API接口、京东商品销量API接口、京东商品列表API接口、京东APP详情API接口、京东SKU信息接口,京东API接口

    通过商品ID或是商品url中的商品ID调用提取京东商品详情页API接口.京东商品销量API接口.京东商品列表API接口.京东APP详情API接口.京东详情API接口,京东SKU信息接口拿到商品详情页各 ...

  7. 淘宝/天猫店铺的所有商品 API接口,店铺商品API接口,店铺详情API接口

    一.淘宝/天猫店铺的所有商品 API接口,店铺商品API接口,店铺详情API接口,店铺所有商品接口代码分享 1.公共参数: 名称 类型 必须 描述 key String 是 调用key(必须以GET方 ...

  8. api接口加密_谈谈API接口开发中的安全性如何解决

    如今各种API接口层出不穷,一个API的好与不好可以从很多方面来考量,其中"安全性"就是一个API接口最基本也是最重要的一个特点.本文就来跟大家聊聊关于API接口开发的安全性问题. ...

  9. 淘宝/天猫获取卖出的商品订单列表API接口,店铺订单API接口,店铺订单详情API接口

    一.淘宝/天猫获取卖出的商品订单列表API接口,店铺订单API接口,店铺订单详情API接口代码如下: 1.公共参数: 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接 ...

  10. 京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口

    一.京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GE ...

最新文章

  1. E2Cloud体验-快速构建一个开发项目环境
  2. 一文读懂语音识别技术原理
  3. 维护库存地点的装运点确认
  4. matlab直流电机双闭环控制系统设计,基于MATLAB的直流电机双闭环调速系统设计毕业论文.doc...
  5. [BUUCTF-pwn]——mrctf2020_easyoverflow
  6. 如何使用python脚本下载git代码_通过pycharm使用git的步骤(图文详解)
  7. grub的说明与配置方法
  8. php过去文件夹总数,用php获取文件夹内文件的数量
  9. 笔记本cpu排名_2020年双十一哪一款笔记本电脑值得买?高性价比笔记本电脑推荐(10月更新)...
  10. github 检查代码质量_使用Gradle做Java代码质量检查
  11. win7便签点击删除按钮的时候不弹出提示框
  12. 一款很好用的软还原卡
  13. JAVA生成随机数工具类
  14. Android录屏解决方案调研
  15. 第1章 Python 顺序结构
  16. 使用BMFont工具来精简字体库
  17. opencv的抠图程序
  18. 超级卡特兰数(又称大施罗德数)
  19. 鸿蒙之初彩蛋rpg10个,CSGO皮肤彩蛋第10期:二次元最喜欢屁股?FN57就是证明
  20. 冒泡排序,鸡尾酒排序,选择排序

热门文章

  1. webstorm js没有代码提示
  2. Linux压力测试工具
  3. 黑苹果系统发热与续航
  4. T-SQL 小数点转换百分数
  5. 程序员的故事 007 程序员是吃青春饭的
  6. 程序员自学软件编程开发的“3 个技巧”,掌握好,菜鸟变大神
  7. 这份好用视频拼接的软件干货分享,值得收藏
  8. 韦东山《嵌入式Linux应用开发完全手册》配套视频教程
  9. 01-Axure9入门培训
  10. Hadoop 安装教程