diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 9260314..56d3b1f 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,7 +1,24 @@ # 更新日志 + +### 2.8.3 | 2018.01.12 + +优化部分功能和文档 + +### 2.8.2 | 2018.01.05 + +增加 Dockerfile,支持以 Docker 容器模式运行 + +### 2.8.1 | 2018.01.04 + +添加了 proxy 功能 + +### 2.8.0 | 2018.01.04 + +用 'request' 重写了请求函数 + ### 2.7.9 | 2017.12.11 -更新排行榜接口,新增云音乐ACG音乐榜,云音乐嘻哈榜 +更新排行榜接口 , 新增云音乐 ACG 音乐榜 , 云音乐嘻哈榜 ### 2.7.7 | 2017.11.27 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..55d4a93 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM mhart/alpine-node:8 + +WORKDIR /app +COPY . /app + +RUN npm install + +EXPOSE 3000 +CMD ["node", "app.js"] diff --git a/README.MD b/README.MD index b84b892..62a264f 100644 --- a/README.MD +++ b/README.MD @@ -1,12 +1,12 @@ # 网易云音乐 API -网易云音乐 Node.js 版 API +网易云音乐 Node.js API service
+ ## 灵感来自 [disoul/electron-cloud-music](https://github.com/disoul/electron-cloud-music) @@ -17,13 +17,22 @@ ## 版本新特性 +### 2.8.2 | 2018.01.05 +增加Dockerfile,支持以Docker容器模式运行 + +### 2.8.1 | 2018.01.04 +添加了proxy功能 + +### 2.8.0 | 2018.01.04 +用 'request' 重写了请求函数 + ### 2.6.5 | 2017.7.16 优化 CORS 设置 ### 2.6.4 | 2017.7.16 -添加缓存机制和随机 UA 机制 感谢[@u3u](https://github.com/u3u) +添加缓存机制和随机 UA 机制 感谢[@u3u](https://github.com/u3u) [issue:77](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/77) -优化请求代码 感谢 [@huhuime](https://github.com/huhuime) +优化请求代码 感谢 [@huhuime](https://github.com/huhuime) [issue:83](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/83) ### 2.6.2 | 2017.7.16 @@ -153,39 +162,45 @@ ## 环境要求 需要 NodeJS 6.0+ 环境 -## 安装 +## 安装 ``` shell $ git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git $ npm install ``` ## 运行 ``` shell -$ node app.js +$ node app.js ``` -服务器启动默认端口为3000,若不想使用3000端口,可使用以下命令: +服务器启动默认端口为3000,若不想使用3000端口,可使用以下命令: Mac/Linux ```shell $ PORT=4000 node app.js ``` -windows 下使用 git-bash 或者 cmder 等终端执行以下命令: +windows 下使用 git-bash 或者 cmder 等终端执行以下命令: ```shell $ set PORT=4000 && node app.js ``` +## Docker容器运行 +```shell +docker pull pengxiao/netease-music-api +docker run -d -p 3000:3000 pengxiao/netease-music-api +``` + ## 使用文档 [文档地址](https://binaryify.github.io/NeteaseCloudMusicApi)  ## 更新日志 -[changelog](https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/CHANGELOG.MD) +[changelog](https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/CHANGELOG.MD) ## 单元测试 ``` shell $ npm test -``` +```   diff --git a/app.js b/app.js index 2fec1b8..2b3d260 100644 --- a/app.js +++ b/app.js @@ -1,5 +1,4 @@ const express = require("express"); -const http = require("http"); const apicache = require("apicache"); const path = require("path"); @@ -7,23 +6,32 @@ const app = express(); let cache = apicache.middleware; // 跨域设置 -// app.all('*', function (req, res, next) { -// if (req.path !== '/' && !req.path.includes('.')) { -// res.header('Access-Control-Allow-Credentials', true) -// // 这里获取 origin 请求头 而不是用 * -// res.header('Access-Control-Allow-Origin', req.headers['origin'] || '*') -// res.header('Access-Control-Allow-Headers', 'X-Requested-With') -// res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS') -// res.header('Content-Type', 'application/json;charset=utf-8') -// } -// next() -// }) +app.all("*", function(req, res, next) { + if (req.path !== "/" && !req.path.includes(".")) { + res.header("Access-Control-Allow-Credentials", true); + // 这里获取 origin 请求头 而不是用 * + res.header("Access-Control-Allow-Origin", req.headers["origin"] || "*"); + res.header("Access-Control-Allow-Headers", "X-Requested-With"); + res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS"); + res.header("Content-Type", "application/json;charset=utf-8"); + } + next(); +}); + const onlyStatus200 = (req, res) => res.statusCode === 200; app.use(cache("2 minutes", onlyStatus200)); app.use(express.static(path.resolve(__dirname, "public"))); +app.use(function(req, res, next) { + const proxy = req.query.proxy; + if (proxy) { + req.headers.cookie = req.headers.cookie + `__proxy__${proxy}`; + } + next(); +}); + // 获取专辑内容 app.use("/album", require("./router/album")); @@ -248,7 +256,7 @@ app.use("/user/record", require("./router/user_playrecord")); const port = process.env.PORT || 3000; app.listen(port, () => { - console.log(`server running @${port}`); + console.log(`server running @ http://localhost:${port}`); }); module.exports = app; diff --git a/docs/README.md b/docs/README.md index 35ed6a6..508edb8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,6 +3,7 @@ 网易云音乐 NodeJS 版 API ## 灵感来自 + [disoul/electron-cloud-music](https://github.com/disoul/electron-cloud-music) [darknessomi/musicbox](https://github.com/darknessomi/musicbox) @@ -10,25 +11,64 @@ [sqaiyan/netmusic-node](https://github.com/sqaiyan/netmusic-node) ## 工作原理 -跨站请求伪造 (CSRF), 伪造请求头,调用官方 API -## 版本新特性 +跨站请求伪造 (CSRF), 伪造请求头 , 调用官方 API + +## 可以使用代理 + +在 query 参数中加上 proxy=your-proxy 即可让这一次的请求使用 proxy + +```javascript +// 例子 +const url = `http://localhost:3000/music/url?id=33894312&proxy=http://121.196.226.246:84` +fetch(url).then(function() { + // do what you want +}) + +// 结果 +// {"data":[{"id":33894312,"url":"http://m10.music.126.net/20180104125640/930a968b3fb04908b733506b3833e60b/ymusic/0fd6/4f65/43ed/a8772889f38dfcb91c04da915b301617.mp3","br":320000,"size":10691439,"md5":"a8772889f38dfcb91c04da915b301617","code":200,"expi":1200,"type":"mp3","gain":-2.0E-4,"fee":0,"uf":null,"payed":0,"flag":0,"canExtend":false}],"code": 200} +``` + +## 版本新特性 + +### 2.8.3 | 2018.01.12 + +优化部分功能和文档 + +### 2.8.2 | 2018.01.05 + +增加 Dockerfile,支持以 Docker 容器模式运行 + +### 2.8.1 | 2018.01.04 + +添加了 proxy 功能 + +### 2.8.0 | 2018.01.04 + +用 'request' 重写了请求函数 + ### 2.6.5 | 2017.7.16 + 优化 CORS 设置 ### 2.6.4 | 2017.7.16 + 添加缓存机制和随机 UA 机制 感谢[@u3u](https://github.com/u3u) -[issue:77](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/77) -优化请求代码 感谢 [@huhuime](https://github.com/huhuime) +[issue:77](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/77) 优化请求 +代码 感谢 [@huhuime](https://github.com/huhuime) [issue:83](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/83) ### 2.5.0 | 2017.4.29 -增加 mv/专辑/歌单评论接口,增加云盘相关接口,增加获取用户动态/信息接口,增加关注/粉丝列表接口,增加收藏歌单接口,增加相似 mv/歌曲/用户接口,增加 banner 接口,增加刷新登录接口,增加电台相关接口,补充评论接口,更新文档 + +增加 mv/ 专辑 / 歌单评论接口 , 增加云盘相关接口 , 增加获取用户动态 / 信息接口 , +增加关注 / 粉丝列表接口 , 增加收藏歌单接口 , 增加相似 mv/ 歌曲 / 用户接口 , 增加 +banner 接口 , 增加刷新登录接口 , 增加电台相关接口 , 补充评论接口 , 更新文档 ## 功能特性 + 1. 登录 2. 刷新登录 -3. 获取用户信息,歌单,收藏,mv, dj 数量 +3. 获取用户信息 , 歌单,收藏,mv, dj 数量 4. 获取用户歌单 5. 获取用户电台 6. 获取用户关注列表 @@ -57,14 +97,14 @@ 29. 获取相似歌单 30. 相似 mv 31. 获取相似音乐 -32. 获取最近5个听了这首歌的用户 +32. 获取最近 5 个听了这首歌的用户 33. 获取每日推荐歌单 34. 获取每日推荐歌曲 35. 私人 FM 36. 签到 37. 喜欢音乐 38. 垃圾桶 -39. 歌单(网友精选碟) +39. 歌单 ( 网友精选碟 ) 40. 新碟上架 41. 热门歌手 42. 最新 mv @@ -80,465 +120,422 @@ 52. 排行榜 53. 歌手榜 54. 云盘 -55. 电台-推荐 -56. 电台-分类 -57. 电台-分类推荐 -58. 电台-订阅 -59. 电台-详情 -60. 电台-节目 +55. 电台 - 推荐 +56. 电台 - 分类 +57. 电台 - 分类推荐 +58. 电台 - 订阅 +59. 电台 - 详情 +60. 电台 - 节目 61. 给评论点赞 62. 获取动态 -## 安装 -``` shell +## 安装 + +```shell $ git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git $ npm install ``` + ## 运行 -``` shell + +```shell $ node app.js ``` -服务器启动默认端口为3000,若不想使用3000端口,可使用以下命令: -Mac/Linux +服务器启动默认端口为 3000, 若不想使用 3000 端口 , 可使用以下命令 : Mac/Linux + ```shell $ PORT=4000 node app.js ``` -windows 下使用 git-bash 或者 cmder 等终端执行以下命令: +windows 下使用 git-bash 或者 cmder 等终端执行以下命令 : + ```shell $ set PORT=4000 && node app.js ``` +## Docker 容器运行 + +```shell +docker pull pengxiao/netease-music-api +docker run -d -p 3000:3000 pengxiao/netease-music-api +``` ## 接口文档 + ### 调用前须知 -- 由于接口做了缓存处理(缓存2分钟,可在 app.js 设置,可能会导致登陆后获取不到 cookie),相同的 url 会在两分钟内只向网易服务器发一次请求,如果遇到不需要缓存结果的接口,可在请求 url 后面加一个时间戳参数使url 不同,例子: `/simi/playlist?id=347230×tamp=1503019930000` +* 为使用方便,降低门槛,登录接口直接使用了 get 明文请求,请按实际需求对源码修改 -- 301 错误基本都是没登录就调用了需要登录的接口,如果登陆了还是提示 301, 基本都是缓存把数据缓存起来了,解决方法是等待 2 分钟或者重启服务重新登录后再调用接口 +* 由于接口做了缓存处理 ( 缓存 2 分钟 , 可在 app.js 设置 , 可能会导致登陆后获取不 + 到 cookie), 相同的 url 会在两分钟内只向网易服务器发一次请求 , 如果遇到不需要缓 + 存结果的接口 , 可在请求 url 后面加一个时间戳参数使 url 不同 , 例子 : + `/simi/playlist?id=347230×tamp=1503019930000` -- 部分接口如登录接口不能调用太频繁,否则可能会触发503错误或者 ip 高频错误,若需频繁调用,需要准备 IP 代理池. +* 如果是跨域请求 , 请在所有请求带上 `xhrFields: { withCredentials: true }` 否则可能会因为没带上 cookie 导致 301, 具体例子可看 `public/test.html`, 例子使用 jquery, axios 版本也类似 -- 本项目仅供学习使用,文档可能会有缓存,如果文档版本和 github 上的版本不一致,请清除缓存再查看 +* 301 错误基本都是没登录就调用了需要登录的接口 , 如果登陆了还是提示 301, 基本都 + 是缓存把数据缓存起来了 , 解决方法是等待 2 分钟或者重启服务重新登录后再调用接口 -- 2.5.0 版本对部分原有 api 做了微调,不过只是调整了下地址,参数和返回结果不受影响 +* 部分接口如登录接口不能调用太频繁 , 否则可能会触发 503 错误或者 ip 高频错误 , + 若需频繁调用 , 需要准备 IP 代理池 . -- 由于网易限制,此项目在国外服务器上使用会受到限制,如需解决,可使用大陆服务器或者使用代理,感谢 [@hiyangguo](https://github.com/hiyangguo)提出的[解决方法](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/29#issuecomment-298358438),在 'util.js' 的 'headers'处增加 -`X-Real-IP':'211.161.244.70' //任意国内IP` 即可解决 +* 本项目仅供学习使用 , 文档可能会有缓存 , 如果文档版本和 github 上的版本不一致 , + 请清除缓存再查看 + +* 2.5.0 版本对部分原有 api 做了微调 , 不过只是调整了下地址 , 参数和返回结果不受影响 + +* 由于网易限制 , 此项目在国外服务器上使用会受到限制 , 如需解决 , 可使用大陆服务 + 器或者使用代理 , 感谢 [@hiyangguo](https://github.com/hiyangguo)提出 + 的[解决方法](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/29#issuecomment-298358438), + 在 'util.js' 的 'headers' 处增加 `X-Real-IP':'211.161.244.70' // 任意国内 IP` + 即可解决 ### 登录 -说明:登录有两个接口 -#### 1. 手机登录 -**必选参数:** -`phone`: 手机号码 -`password`: 密码 +说明 : 登录有两个接口 -**接口地址:** -`/login/cellphone` +#### 1. 手机登录 -**调用例子:** -`/login/cellphone?phone=xxx&password=yyy` +**必选参数 :** `phone`: 手机号码 `password`: 密码 -#### 2. 邮箱登录 ->注意:此接口被网易和谐了,待修复,暂时使用手机登录(2017.05.20) +**接口地址 :** `/login/cellphone` -**必选参数:** -`email`: 163网易邮箱 -`password`: 密码 +**调用例子 :** `/login/cellphone?phone=xxx&password=yyy` -**接口地址:** -`/login` +#### 2. 邮箱登录 -**调用例子:** -`/login?email=xxx@163.com&password=yyy` +> 注意 : 此接口被网易和谐了 , 待修复 , 暂时使用手机登录 (2017.05.20) -返回数据如下图: +**必选参数 :** `email`: 163 网易邮箱 `password`: 密码 + +**接口地址 :** `/login` + +**调用例子 :** `/login?email=xxx@163.com&password=yyy` + +返回数据如下图 :  - -完成登录后,会在浏览器保存一个 Cookies 用作登录凭证,大部分 API 都需要用到这个 Cookies +完成登录后 , 会在浏览器保存一个 Cookies 用作登录凭证 , 大部分 API 都需要用到这个 +Cookies #### 注意 -调用登录接口的速度比调用其他接口慢,因为登录过程调用了加密算法 + +调用登录接口的速度比调用其他接口慢 , 因为登录过程调用了加密算法 ### 刷新登录 -说明:调用此接口,可刷新登录状态 -**调用例子:** -`/login/refresh` +说明 : 调用此接口 , 可刷新登录状态 + +**调用例子 :** `/login/refresh` ### 获取用户详情 -说明:登陆后调用此接口,传入用户 id, 可以获取用户详情 -**必选参数:** -`uid` : 用户 id +说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户详情 -**接口地址:** -`/user/detail` +**必选参数 :** `uid` : 用户 id -**调用例子:** -`/user/detail?uid=32953014` +**接口地址 :** `/user/detail` +**调用例子 :** `/user/detail?uid=32953014` -### 获取用户信息,歌单,收藏,mv, dj 数量 -说明:登陆后调用此接口,可以获取用户信息 +### 获取用户信息 , 歌单,收藏,mv, dj 数量 -**接口地址:** -`/user/subcount` +说明 : 登陆后调用此接口 , 可以获取用户信息 -**调用例子:** -`/user/subcount` +**接口地址 :** `/user/subcount` +**调用例子 :** `/user/subcount` ### 获取用户歌单 -说明:登陆后调用此接口,传入用户 id, 可以获取用户歌单 -**必选参数:** -`uid` : 用户 id +说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户歌单 -**接口地址:** -`/user/playlist` +**必选参数 :** `uid` : 用户 id -**调用例子:** -`/user/playlist?uid=32953014` +**接口地址 :** `/user/playlist` -返回数据如下图: +**调用例子 :** `/user/playlist?uid=32953014` + +返回数据如下图 :  ### 获取用户电台 -说明:登陆后调用此接口,传入用户 id, 可以获取用户电台 -**必选参数:** -`uid` : 用户 id +说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户电台 -**接口地址:** -`/user/dj` +**必选参数 :** `uid` : 用户 id -**调用例子:** -`/user/dj?uid=32953014` +**接口地址 :** `/user/dj` -### 获取用户关注列表 -说明:登陆后调用此接口,传入用户 id, 可以获取用户关注列表 +**调用例子 :** `/user/dj?uid=32953014` -**必选参数:** -`uid` : 用户 id +### 获取用户关注列表 -**可选参数:** -`limit` : 返回数量,默认为30 -`offset` : 偏移数量,用于分页,如: 如:(页数-1)*30, 其中 30 为 limit 的值,默认为0 +说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户关注列表 -**接口地址:** -`/user/follows` +**必选参数 :** `uid` : 用户 id -**调用例子:** -`/user/follows?uid=32953014` +**可选参数 :** `limit` : 返回数量 , 默认为 30 `offset` : 偏移数量,用于分页 , 如 +: 如 :( 页数 -1)\*30, 其中 30 为 limit 的值 , 默认为 0 -### 获取用户粉丝列表 -说明:登陆后调用此接口,传入用户 id, 可以获取用户粉丝列表 +**接口地址 :** `/user/follows` -**必选参数:** -`uid` : 用户 id +**调用例子 :** `/user/follows?uid=32953014` -**可选参数:** -`limit` : 返回数量,默认为30 -`offset` : 偏移数量,用于分页,如: 如:(页数-1)*30, 其中 30 为 limit 的值,默认为0 +### 获取用户粉丝列表 -**接口地址:** -`/user/followeds` +说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户粉丝列表 -**调用例子:** -`/user/followeds?uid=32953014` +**必选参数 :** `uid` : 用户 id + +**可选参数 :** `limit` : 返回数量 , 默认为 30 `offset` : 偏移数量,用于分页 , 如 +: 如 :( 页数 -1)\*30, 其中 30 为 limit 的值 , 默认为 0 + +**接口地址 :** `/user/followeds` + +**调用例子 :** `/user/followeds?uid=32953014` ### 获取用户动态 -说明:登陆后调用此接口,传入用户 id, 可以获取用户动态 -**必选参数:** -`uid` : 用户 id +说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户动态 -**接口地址:** -`/user/event` +**必选参数 :** `uid` : 用户 id -**调用例子:** -`/user/event?uid=32953014` +**接口地址 :** `/user/event` + +**调用例子 :** `/user/event?uid=32953014` ### 获取用户播放记录 -说明:登陆后调用此接口,传入用户 id,可获取用户播放记录 -**必选参数:** -`uid` : 用户 id +说明 : 登陆后调用此接口 , 传入用户 id, 可获取用户播放记录 -**可选参数:** -`type` : type=1时只返回weekData, type=0时返回allData +**必选参数 :** `uid` : 用户 id -**接口地址:** -`/user/record` +**可选参数 :** `type` : type=1 时只返回 weekData, type=0 时返回 allData -**调用例子:** -`/user/record?uid=32953014&type=1` +**接口地址 :** `/user/record` + +**调用例子 :** `/user/record?uid=32953014&type=1` ### 获取动态消息 -说明:调用此接口,可获取各种动态,对应网页版网易云,朋友界面里的各种动态消息,如分享的视频,音乐,照片等! -**必选参数:** -未知 +说明 : 调用此接口 , 可获取各种动态 , 对应网页版网易云,朋友界面里的各种动态消息 +,如分享的视频,音乐,照片等! -**接口地址:** -`/event` +**必选参数 :** 未知 -**调用例子:** -`/event` +**接口地址 :** `/event` -### 获取精品歌单 -说明:调用此接口,可获取精品歌单 +**调用例子 :** `/event` -**可选参数:** -`cat`: tag, 比如 "华语"、"古风" 、"欧美"、"流行",默认为"全部" +### 获取精品歌单 -`limit`: 取出歌单数量,默认为20 +说明 : 调用此接口 , 可获取精品歌单 -**接口地址:** -`/top/playlist/highquality` +**可选参数 :** `cat`: tag, 比如 " 华语 "、" 古风 " 、" 欧美 "、" 流行 ", 默认为 +" 全部 " -**调用例子:** -`/top/playlist/highquality?limit=30` +`limit`: 取出歌单数量 , 默认为 20 +**接口地址 :** `/top/playlist/highquality` -### 获取歌单详情 -说明:歌单能看到歌单名字,但看不到具体歌单内容,调用此接口,传入歌单 id,可以获取对应歌单内的所有的音乐 +**调用例子 :** `/top/playlist/highquality?limit=30` -**必选参数:** -`id` : 歌单 id +### 获取歌单详情 -**接口地址:** -`/playlist/detail` +说明 : 歌单能看到歌单名字,但看不到具体歌单内容 , 调用此接口 , 传入歌单 id, 可 +以获取对应歌单内的所有的音乐 -**调用例子:** -`/playlist/detail?id=24381616` +**必选参数 :** `id` : 歌单 id -返回数据如下图: +**接口地址 :** `/playlist/detail` + +**调用例子 :** `/playlist/detail?id=24381616` + +返回数据如下图 :  ### 获取音乐 url -说明:使用歌单详情接口后,能得到的音乐的 id, 但不能得到的音乐 url, 调用此接口,传入的音乐 id(可多个,用逗号隔开),可以获取对应的音乐的 url(不需要登录) ->注:部分用户反馈获取的 url 会 403,[hwaphon](https://github.com/hwaphon)找到的解决方案是当获取到音乐的 id 后,将 http://music.163.com/song/media/outer/url?id=id.mp3 以src 赋予 Audio即可播放 +说明 : 使用歌单详情接口后 , 能得到的音乐的 id, 但不能得到的音乐 url, 调用此接口 +, 传入的音乐 id( 可多个 , 用逗号隔开 ), 可以获取对应的音乐的 url( 不需要登录 ) -**必选参数:** -`id` : 音乐 id +> 注 : 部分用户反馈获取的 url 会 403,[hwaphon](https://github.com/hwaphon)找到的 +> 解决方案是当获取到音乐的 id 后,将 +> http://music.163.com/song/media/outer/url?id=id.mp3 以 src 赋予 Audio 即可播放 -**接口地址:** -`/music/url` +**必选参数 :** `id` : 音乐 id -**调用例子:** -`/music/url?id=347230` -`/music/url?id=347230,347231` +**接口地址 :** `/music/url` -返回数据如下图: +**调用例子 :** `/music/url?id=33894312` `/music/url?id=405998841,33894312` + +返回数据如下图 :  ### 搜索 -说明:调用此接口,传入搜索关键词可以搜索该音乐/专辑/歌手/歌单/用户,关键词可以多个,以空格隔开,如"周杰伦 搁浅"(不需要登录),搜索获取的 mp3url 不能直接用,可通过 `/music/url` 接口传入歌曲 id 获取具体的播放链接 -**必选参数:** -`keywords` : 关键词 +说明 : 调用此接口 , 传入搜索关键词可以搜索该音乐 / 专辑 / 歌手 / 歌单 / 用户 , +关键词可以多个 , 以空格隔开 , 如 " 周杰伦 搁浅 "( 不需要登录 ), 搜索获取的 +mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具体的播放链接 -**可选参数:** -`limit` : 返回数量,默认为30 -`offset` : 偏移数量,用于分页,如: 如:(页数-1)*30, 其中 30 为 limit 的值,默认为0 +**必选参数 :** `keywords` : 关键词 -`type`: 搜索类型;默认为1即单曲,取值意义: -1: 单曲 -10: 专辑 -100: 歌手 -1000: 歌单 -1002: 用户 -1004: MV -1006: 歌词 -1009: 电台 +**可选参数 :** `limit` : 返回数量 , 默认为 30 `offset` : 偏移数量,用于分页 , 如 +: 如 :( 页数 -1)\*30, 其中 30 为 limit 的值 , 默认为 0 +`type`: 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲 10: 专辑 100: 歌手 1000: +歌单 1002: 用户 1004: MV 1006: 歌词 1009: 电台 +**接口地址 :** `/search` -**接口地址:** -`/search` +**调用例子 :** `/search?keywords= 海阔天空` -**调用例子:** -`/search?keywords=海阔天空` - -返回数据如下图: +返回数据如下图 :  ### 搜索建议 -说明:调用此接口,传入搜索关键词可获得搜索建议,搜索结果同时包含单曲,歌手,歌单,mv 信息 -**必选参数:** -`keywords` : 关键词 +说明 : 调用此接口,传入搜索关键词可获得搜索建议 , 搜索结果同时包含单曲 , 歌手 , +歌单 ,mv 信息 -**可选参数:** -`limit` : 返回数量,默认为30 -`offset` : 偏移数量,用于分页,如: 如:(页数-1)*30, 其中 30 为 limit 的值,默认为0 +**必选参数 :** `keywords` : 关键词 -`type`: 搜索类型;默认为1即单曲,取值意义: -1: 单曲 -10: 专辑 -100: 歌手 -1000: 歌单 -1002: 用户 -1004: MV -1006: 歌词 -1009: 电台 +**可选参数 :** `limit` : 返回数量 , 默认为 30 `offset` : 偏移数量,用于分页 , 如 +: 如 :( 页数 -1)\*30, 其中 30 为 limit 的值 , 默认为 0 +`type`: 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲 10: 专辑 100: 歌手 1000: +歌单 1002: 用户 1004: MV 1006: 歌词 1009: 电台 +**接口地址 :** `/search/suggest` -**接口地址:** -`/search/suggest` - -**调用例子:** -`/search/suggest?keywords=海阔天空` +**调用例子 :** `/search/suggest?keywords= 海阔天空` ### 搜索多重匹配 -说明:调用此接口,传入搜索关键词可获得搜索结果 -**必选参数:** -`keywords` : 关键词 +说明 : 调用此接口 , 传入搜索关键词可获得搜索结果 -**接口地址:** -`/search/multimatch` +**必选参数 :** `keywords` : 关键词 -**调用例子:** -`/search/multimatch?keywords=海阔天空` +**接口地址 :** `/search/multimatch` -### 收藏单曲到歌单 -说明:调用此接口,传入音乐 id和 limit 参数, 可获得该专辑的所有评论(需要登录) +**调用例子 :** `/search/multimatch?keywords= 海阔天空` -**必选参数:** -`op`: 从歌单增加单曲为add,删除为 del -`pid`: 歌单id -`tracks`: 歌曲id +### 对歌单添加或删除歌曲 -**接口地址:** -`/playlist/tracks` +说明 : 调用此接口 , 可以添加歌曲到歌单或者从歌单删除某首歌曲 ( 需要登录 ) -**调用例子:** -`/playlist/tracks?op=add&pid=24381616&tracks=347230` (对应把'海阔天空'添加到'我'的歌单,测试的时候请把这里的 pid换成你自己的) +**必选参数 :** `op`: 从歌单增加单曲为 add, 删除为 del `pid`: 歌单 id `tracks`: +歌曲 id +**接口地址 :** `/playlist/tracks` + +**调用例子 :** `/playlist/tracks?op=add&pid=24381616&tracks=347230` ( 对应把 ' +海阔天空 ' 添加到 ' 我 ' 的歌单 , 测试的时候请把这里的 pid 换成你自己的 ) ### 获取歌词 -说明:调用此接口,传入音乐 id 可获得对应音乐的歌词(不需要登录) -**必选参数:** -`id`: 音乐 id +说明 : 调用此接口 , 传入音乐 id 可获得对应音乐的歌词 ( 不需要登录 ) -**接口地址:** -`/lyric` +**必选参数 :** `id`: 音乐 id -**调用例子:** -`/lyric?id=347230` +**接口地址 :** `/lyric` -返回数据如下图: +**调用例子 :** `/lyric?id=33894312` + +返回数据如下图 :  ### 歌曲评论 -说明:调用此接口,传入音乐 id和 limit 参数, 可获得该音乐的所有评论(不需要登录) -**必选参数:** -`id`: 音乐 id +说明 : 调用此接口 , 传入音乐 id 和 limit 参数 , 可获得该音乐的所有评论 ( 不需要 +登录 ) -**可选参数:** -`limit`: 取出评论数量,默认为20 +**必选参数 :** `id`: 音乐 id -`offset`: 偏移数量,用于分页,如:(评论页数-1)*20, 其中 20 为 limit 的值 +**可选参数 :** `limit`: 取出评论数量 , 默认为 20 -**接口地址:** -`/comment/music` +`offset`: 偏移数量 , 用于分页 , 如 :( 评论页数 -1)\*20, 其中 20 为 limit 的值 -**调用例子:** -`/comment/music?id=186016&limit=1` 对应晴天评论 +**接口地址 :** `/comment/music` -返回数据如下图: +**调用例子 :** `/comment/music?id=186016&limit=1` 对应晴天评论 + +返回数据如下图 :  - ### 专辑评论 -说明:调用此接口,传入音乐 id和 limit 参数, 可获得该专辑的所有评论(不需要登录) -**必选参数:** -`id`: 专辑 id +说明 : 调用此接口 , 传入音乐 id 和 limit 参数 , 可获得该专辑的所有评论 ( 不需要 +登录 ) -**可选参数:** -`limit`: 取出评论数量,默认为20 +**必选参数 :** `id`: 专辑 id -`offset`: 偏移数量,用于分页,如:(评论页数-1)*20, 其中 20 为 limit 的值 +**可选参数 :** `limit`: 取出评论数量 , 默认为 20 -**接口地址:** -`/comment/album` +`offset`: 偏移数量 , 用于分页 , 如 :( 评论页数 -1)\*20, 其中 20 为 limit 的值 -**调用例子:** -`/comment/album?id=32311` +**接口地址 :** `/comment/album` + +**调用例子 :** `/comment/album?id=32311` ### 歌单评论 -说明:调用此接口,传入音乐 id和 limit 参数, 可获得该歌单的所有评论(不需要登录) -**必选参数:** -`id`: 歌单 id +说明 : 调用此接口 , 传入音乐 id 和 limit 参数 , 可获得该歌单的所有评论 ( 不需要 +登录 ) -**可选参数:** -`limit`: 取出评论数量,默认为20 +**必选参数 :** `id`: 歌单 id -`offset`: 偏移数量,用于分页,如:(评论页数-1)*20, 其中 20 为 limit 的值 +**可选参数 :** `limit`: 取出评论数量 , 默认为 20 -**接口地址:** -`/comment/playlist` +`offset`: 偏移数量 , 用于分页 , 如 :( 评论页数 -1)\*20, 其中 20 为 limit 的值 -**调用例子:** -`/comment/playlist?id=705123491` +**接口地址 :** `/comment/playlist` + +**调用例子 :** `/comment/playlist?id=705123491` ### mv 评论 -说明:调用此接口,传入音乐 id和 limit 参数, 可获得该 mv 的所有评论(不需要登录) -**必选参数:** -`id`: mv id +说明 : 调用此接口 , 传入音乐 id 和 limit 参数 , 可获得该 mv 的所有评论 ( 不需要 +登录 ) -**可选参数:** -`limit`: 取出评论数量,默认为20 +**必选参数 :** `id`: mv id -`offset`: 偏移数量,用于分页,如:(评论页数-1)*20, 其中 20 为 limit 的值 +**可选参数 :** `limit`: 取出评论数量 , 默认为 20 -**接口地址:** -`/comment/mv` +`offset`: 偏移数量 , 用于分页 , 如 :( 评论页数 -1)\*20, 其中 20 为 limit 的值 -**调用例子:** -`/comment/mv?id=5436712` +**接口地址 :** `/comment/mv` + +**调用例子 :** `/comment/mv?id=5436712` ### 电台节目评论 -说明:调用此接口,传入音乐 id和 limit 参数, 可获得该 电台节目 的所有评论(不需要登录) -**必选参数:** -`id`: 电台节目的 id +说明 : 调用此接口 , 传入音乐 id 和 limit 参数 , 可获得该 电台节目 的所有评论 ( +不需要登录 ) -**可选参数:** -`limit`: 取出评论数量,默认为20 +**必选参数 :** `id`: 电台节目的 id -`offset`: 偏移数量,用于分页,如:(评论页数-1)*20, 其中 20 为 limit 的值 +**可选参数 :** `limit`: 取出评论数量 , 默认为 20 -**接口地址:** -`/comment/dj` +`offset`: 偏移数量 , 用于分页 , 如 :( 评论页数 -1)\*20, 其中 20 为 limit 的值 -**调用例子:** -`/comment/dj?id=794062371` +**接口地址 :** `/comment/dj` + +**调用例子 :** `/comment/dj?id=794062371` ### 给评论点赞 -说明:调用此接口,传入 type, 资源 id, 和评论id cid和 是否点赞参数 t 即可给对应评论点赞(需要登录) -**必选参数:** -`id` : 资源 id, 如歌曲 id,mv id +说明 : 调用此接口 , 传入 type, 资源 id, 和评论 id cid 和 是否点赞参数 t 即可给对 +应评论点赞 ( 需要登录 ) -`cid` : 评论 id +**必选参数 :** `id` : 资源 id, 如歌曲 id,mv id -`t` :是否点赞,1为点赞,0为取消点赞 +`cid` : 评论 id -`tpye`: 数字,资源类型,对应歌曲, mv, 专辑,歌单,电台 -对应以下类型 +`t` : 是否点赞 ,1 为点赞 ,0 为取消点赞 + +`tpye`: 数字 , 资源类型 , 对应歌曲 , mv, 专辑 , 歌单 , 电台对应以下类型 ``` 0: 歌曲 @@ -546,578 +543,519 @@ $ set PORT=4000 && node app.js 2: 歌单 3: 专辑 4: 电台 -``` +``` -**接口地址:** -`comment/like` +**接口地址 :** `comment/like` -**调用例子:** -`/comment/like?id=186016&cid=4956438&t=1&type=0` 对应给晴天最热门的那条评论点赞 +**调用例子 :** `/comment/like?id=186016&cid=4956438&t=1&type=0` 对应给晴天最热门 +的那条评论点赞 ### banner -说明:调用此接口,可获取 banner(轮播图)数据 -注:因参数未知,只能获取比较旧的数据,如果有知道参数的小伙伴,可提交 PR -**接口地址:** -`/banner` +说明 : 调用此接口 , 可获取 banner( 轮播图 ) 数据注 : 因参数未知 , 只能获取比较旧 +的数据 , 如果有知道参数的小伙伴 , 可提交 PR -**调用例子:** -`/banner` +**接口地址 :** `/banner` + +**调用例子 :** `/banner` ### 获取歌曲详情 -说明:调用此接口,传入音乐 id, 可获得歌曲详情 -**必选参数:** -`ids`: 音乐 id,如 `ids=347230` +说明 : 调用此接口 , 传入音乐 id, 可获得歌曲详情 -**接口地址:** -`/song/detail` +**必选参数 :** `ids`: 音乐 id, 如 `ids=347230` -**调用例子:** -`/song/detail?ids=347230` +**接口地址 :** `/song/detail` -返回数据如下图: +**调用例子 :** `/song/detail?ids=347230` + +返回数据如下图 :  - ### 获取专辑内容 -说明:调用此接口,传入专辑 id,可获得专辑内容 -**必选参数:** -`id`: 专辑 id +说明 : 调用此接口 , 传入专辑 id, 可获得专辑内容 -**接口地址:** -`/album` +**必选参数 :** `id`: 专辑 id -**调用例子:** -`/album?id=32311` +**接口地址 :** `/album` -返回数据如下图: +**调用例子 :** `/album?id=32311` + +返回数据如下图 :  ### 获取歌手单曲 -说明:调用此接口,传入歌手 id,可获得歌手单曲 -**必选参数:** -`id`: 歌手 id,可由搜索接口获得 +说明 : 调用此接口 , 传入歌手 id, 可获得歌手单曲 -**接口地址:** -`/artists` +**必选参数 :** `id`: 歌手 id, 可由搜索接口获得 -**调用例子:** -`/artists?id=6452` +**接口地址 :** `/artists` -返回数据如下图: +**调用例子 :** `/artists?id=6452` + +返回数据如下图 :  ### 获取歌手 mv -说明:调用此接口,传入歌手 id,可获得歌手 mv 信息,具体 mv 播放地址可调用`/mv`传入此接口获得的mvid 来拿到,如: + +说明 : 调用此接口 , 传入歌手 id, 可获得歌手 mv 信息 , 具体 mv 播放地址可调 +用`/mv`传入此接口获得的 mvid 来拿到 , 如 : `/artist/mv?id=6452`,`/mv?mvid=5461064` -**必选参数:** -`id`: 歌手 id,可由搜索接口获得 +**必选参数 :** `id`: 歌手 id, 可由搜索接口获得 -**接口地址:** -`/artist/mv` +**接口地址 :** `/artist/mv` -**调用例子:** -`/artist/mv?id=6452` +**调用例子 :** `/artist/mv?id=6452` ### 获取歌手专辑 -说明:调用此接口,传入歌手 id,可获得歌手专辑内容 -**必选参数:** -`id`: 歌手 id +说明 : 调用此接口 , 传入歌手 id, 可获得歌手专辑内容 -**可选参数:** -`limit`: 取出数量,默认为50 +**必选参数 :** `id`: 歌手 id -`offset`: 偏移数量,用于分页,如:(页数-1)*50, 其中 50 为 limit 的值,默认为0 +**可选参数 :** `limit`: 取出数量 , 默认为 50 -**接口地址:** -`/artist/album` +`offset`: 偏移数量 , 用于分页 , 如 :( 页数 -1)\*50, 其中 50 为 limit 的值 , 默认 +为 0 -**调用例子:** -`/artist/album?id=6452&limit=30` (周杰伦) +**接口地址 :** `/artist/album` -返回数据如下图: +**调用例子 :** `/artist/album?id=6452&limit=30` ( 周杰伦 ) + +返回数据如下图 :  ### 获取歌手描述 -说明:调用此接口,传入歌手 id,可获得歌手描述 -**必选参数:** -`id`: 歌手 id +说明 : 调用此接口 , 传入歌手 id, 可获得歌手描述 -**接口地址:** -`/artist/desc` +**必选参数 :** `id`: 歌手 id -**调用例子:** -`/artist/desc?id=6452` (周杰伦) +**接口地址 :** `/artist/desc` + +**调用例子 :** `/artist/desc?id=6452` ( 周杰伦 ) ### 获取相似歌手 -说明:调用此接口,传入歌手 id,可获得相似歌手 -**必选参数:** -`id`: 歌手 id +说明 : 调用此接口 , 传入歌手 id, 可获得相似歌手 -**接口地址:** -`/simi/artist` +**必选参数 :** `id`: 歌手 id -**调用例子:** -`/simi/artist?id=6452` (对应和周杰伦相似歌手) +**接口地址 :** `/simi/artist` + +**调用例子 :** `/simi/artist?id=6452` ( 对应和周杰伦相似歌手 ) ### 获取相似歌单 -说明:调用此接口,传入歌曲 id,可获得相似歌单 -**必选参数:** -`id`: 歌曲 id +说明 : 调用此接口 , 传入歌曲 id, 可获得相似歌单 -**接口地址:** -`/simi/playlist` +**必选参数 :** `id`: 歌曲 id -**调用例子:** -`/simi/playlist?id=347230` (对应'光辉岁月'相似歌单) +**接口地址 :** `/simi/playlist` +**调用例子 :** `/simi/playlist?id=347230` ( 对应 ' 光辉岁月 ' 相似歌单 ) ### 相似 mv -说明:调用此接口,传入 `mvid` 可获取相似 mv -**必选参数:** -`mvid`: mv id -**接口地址:** -`/simi/mv` +说明 : 调用此接口 , 传入 `mvid` 可获取相似 mv **必选参数 :** `mvid`: mv id -**调用例子:** -`/simi/mv?mvid=5436712` +**接口地址 :** `/simi/mv` +**调用例子 :** `/simi/mv?mvid=5436712` ### 获取相似音乐 -说明:调用此接口,传入歌曲 id,可获得相似歌曲 -**必选参数:** -`id`: 歌曲 id +说明 : 调用此接口 , 传入歌曲 id, 可获得相似歌曲 -**接口地址:** -`/simi/song` +**必选参数 :** `id`: 歌曲 id -**调用例子:** -`/simi/song?id=347230` (对应'光辉岁月'相似歌曲) +**接口地址 :** `/simi/song` -### 获取最近5个听了这首歌的用户 -说明:调用此接口,传入歌曲 id,最近5个听了这首歌的用户 +**调用例子 :** `/simi/song?id=347230` ( 对应 ' 光辉岁月 ' 相似歌曲 ) -**必选参数:** -`id`: 歌曲 id +### 获取最近 5 个听了这首歌的用户 -**接口地址:** -`/simi/user` +说明 : 调用此接口 , 传入歌曲 id, 最近 5 个听了这首歌的用户 -**调用例子:** -`/simi/user?id=347230` (对应'光辉岁月'相似歌曲) +**必选参数 :** `id`: 歌曲 id +**接口地址 :** `/simi/user` + +**调用例子 :** `/simi/user?id=347230` ( 对应 ' 光辉岁月 ' 相似歌曲 ) ### 获取每日推荐歌单 -说明:调用此接口,可获得每日推荐歌单(需要登录) -**接口地址:** -`/recommend/resource` +说明 : 调用此接口 , 可获得每日推荐歌单 ( 需要登录 ) -**调用例子:** -`/recommend/resource` +**接口地址 :** `/recommend/resource` -返回数据如下图: +**调用例子 :** `/recommend/resource` + +返回数据如下图 :  ### 获取每日推荐歌曲 -说明:调用此接口,可获得每日推荐歌曲(需要登录) -**接口地址:** -`/recommend/songs` +说明 : 调用此接口 , 可获得每日推荐歌曲 ( 需要登录 ) -**调用例子:** -`/recommend/songs` +**接口地址 :** `/recommend/songs` -返回数据如下图: +**调用例子 :** `/recommend/songs` + +返回数据如下图 :  - ### 私人 FM -说明:私人 FM( 需要登录) -**接口地址:** -`/personal_fm` +说明 : 私人 FM( 需要登录 ) -**调用例子:** -`/personal_fm` +**接口地址 :** `/personal_fm` -返回数据如下图: +**调用例子 :** `/personal_fm` + +返回数据如下图 :  ### 签到 -说明:调用此接口,传入签到类型(可不传,默认安卓端签到),可签到(需要登录),其中安卓端签到可获得3点经验, web/PC 端签到可获得2点经验 -**可选参数:** -`type`: 签到类型,默认 0, 其中 0 为安卓端签到,1为 web/PC 签到 -**接口地址:** -`/daily_signin` +说明 : 调用此接口 , 传入签到类型 ( 可不传 , 默认安卓端签到 ), 可签到 ( 需要登录 +), 其中安卓端签到可获得 3 点经验 , web/PC 端签到可获得 2 点经验 -**调用例子:** -`/daily_signin` +**可选参数 :** +`type`: 签到类型 , 默认 0, 其中 0 为安卓端签到 ,1 为 web/PC 签到 -返回数据如下图: +**接口地址 :** `/daily_signin` + +**调用例子 :** `/daily_signin` + +返回数据如下图 :   - ### 喜欢音乐 -说明:调用此接口,传入音乐 id, 可喜欢该音乐 -**必选参数:** -`id`: 歌曲 id +说明 : 调用此接口 , 传入音乐 id, 可喜欢该音乐 -**可选参数:** -`like`: 布尔值,默认为 true 即喜欢,若传 false, 则取消喜欢 +**必选参数 :** `id`: 歌曲 id -**接口地址:** -`/like` +**可选参数 :** `like`: 布尔值 , 默认为 true 即喜欢 , 若传 false, 则取消喜欢 -**调用例子:** -`/like?id=347230` +**接口地址 :** `/like` -返回数据如下图: +**调用例子 :** `/like?id=347230` + +返回数据如下图 :  -喜欢成功则返回数据的 code 为200,其余为失败 +喜欢成功则返回数据的 code 为 200, 其余为失败  - - ### 垃圾桶 -说明:调用此接口,传入音乐 id, 可把该音乐从私人 FM中移除至垃圾桶 -**必选参数:** -`id`: 歌曲 id +说明 : 调用此接口 , 传入音乐 id, 可把该音乐从私人 FM 中移除至垃圾桶 -**接口地址:** -`/fm_trash` +**必选参数 :** `id`: 歌曲 id -**调用例子:** -`/fm_trash?id=347230` +**接口地址 :** `/fm_trash` -返回数据如下图: +**调用例子 :** `/fm_trash?id=347230` + +返回数据如下图 :  -### 歌单(网友精选碟) -说明:调用此接口,可获取网友精选碟歌单 +### 歌单 ( 网友精选碟 ) -**可选参数:** -`order`: 可选值为 'new' 和 'hot',分别对应最新和最热,默认为 'hot' +说明 : 调用此接口 , 可获取网友精选碟歌单 -**接口地址:** -`/top/playlist` +**可选参数 :** `order`: 可选值为 'new' 和 'hot', 分别对应最新和最热 , 默认为 +'hot' -**调用例子:** -`/top/playlist?limit=10&order=new` +**接口地址 :** `/top/playlist` -返回数据如下图: +**调用例子 :** `/top/playlist?limit=10&order=new` + +返回数据如下图 :  ### 新碟上架 -说明:调用此接口,可获取新碟上架列表,如需具体音乐信息需要调用获取专辑列表接口 `/album` ,然后传入 id, 如 `/album?id=32311&limit=30` -**可选参数:** -`limit`: 取出数量,默认为50 +说明 : 调用此接口 , 可获取新碟上架列表 , 如需具体音乐信息需要调用获取专辑列表接 +口 `/album` , 然后传入 id, 如 `/album?id=32311&limit=30` -`offset`: 偏移数量,用于分页,如:(页数-1)*50, 其中 50 为 limit 的值,默认为0 +**可选参数 :** `limit`: 取出数量 , 默认为 50 -**接口地址:** -`/top/album` +`offset`: 偏移数量 , 用于分页 , 如 :( 页数 -1)\*50, 其中 50 为 limit 的值 , 默认 +为 0 -**调用例子:** -`/top/album?offset=0&limit=30` +**接口地址 :** `/top/album` -返回数据如下图: +**调用例子 :** `/top/album?offset=0&limit=30` + +返回数据如下图 :  ### 热门歌手 -说明:调用此接口,可获取热门歌手数据 -**可选参数:** -`limit`: 取出数量,默认为50 +说明 : 调用此接口 , 可获取热门歌手数据 -`offset`: 偏移数量,用于分页,如:(页数-1)*50, 其中 50 为 limit 的值,默认为0 +**可选参数 :** `limit`: 取出数量 , 默认为 50 -**接口地址:** -`/top/artists` +`offset`: 偏移数量 , 用于分页 , 如 :( 页数 -1)\*50, 其中 50 为 limit 的值 , 默认 +为 0 -**调用例子:** -`/top/artists?offset=0&limit=30` +**接口地址 :** `/top/artists` -返回数据如下图: +**调用例子 :** `/top/artists?offset=0&limit=30` + +返回数据如下图 :  ### 最新 mv -说明:调用此接口,可获取最新 mv -**可选参数:** -`limit`: 取出数量,默认为 30 +说明 : 调用此接口 , 可获取最新 mv -**接口地址:** -`/mv/first` +**可选参数 :** `limit`: 取出数量 , 默认为 30 -**调用例子:** -`/mv/first?limit=10` +**接口地址 :** `/mv/first` + +**调用例子 :** `/mv/first?limit=10` ### 推荐 mv -说明:调用此接口,可获取推荐 mv -**接口地址:** -`/personalized/mv` +说明 : 调用此接口 , 可获取推荐 mv -**调用例子:** -`/personalized/mv` +**接口地址 :** `/personalized/mv` + +**调用例子 :** `/personalized/mv` ### 推荐歌单 -说明:调用此接口,可获取推荐歌单 -**接口地址:** -`/personalized` +说明 : 调用此接口 , 可获取推荐歌单 -**调用例子:** -`/personalized` +**接口地址 :** `/personalized` + +**调用例子 :** `/personalized` ### 推荐新音乐 -说明:调用此接口,可获取推荐新音乐 -**接口地址:** -`/personalized/newsong` +说明 : 调用此接口 , 可获取推荐新音乐 -**调用例子:** -`/personalized/newsong` +**接口地址 :** `/personalized/newsong` + +**调用例子 :** `/personalized/newsong` ### 推荐电台 -说明:调用此接口,可获取推荐电台 -**接口地址:** -`/personalized/djprogram` +说明 : 调用此接口 , 可获取推荐电台 -**调用例子:** -`/personalized/djprogram` +**接口地址 :** `/personalized/djprogram` + +**调用例子 :** `/personalized/djprogram` ### 推荐节目 -说明:调用此接口,可获取推荐电台 -**接口地址:** -`/program/recommend` +说明 : 调用此接口 , 可获取推荐电台 -**调用例子:** -`/program/recommend` +**接口地址 :** `/program/recommend` + +**调用例子 :** `/program/recommend` ### 独家放送 -说明:调用此接口,可获取独家放送 -**接口地址:** -`/personalized/privatecontent` +说明 : 调用此接口 , 可获取独家放送 -**调用例子:** -`/personalized/privatecontent` +**接口地址 :** `/personalized/privatecontent` +**调用例子 :** `/personalized/privatecontent` ### mv 排行 -说明:调用此接口,可获取 mv 排行 -**可选参数:** -`limit`: 取出数量,默认为 30 +说明 : 调用此接口 , 可获取 mv 排行 -`offset`: 偏移数量,用于分页,如:(页数-1)*30, 其中 30 为 limit 的值,默认为0 +**可选参数 :** `limit`: 取出数量 , 默认为 30 -**接口地址:** -`top/mv` +`offset`: 偏移数量 , 用于分页 , 如 :( 页数 -1)\*30, 其中 30 为 limit 的值 , 默认 +为 0 -**调用例子:** -`top/mv?limit=10` +**接口地址 :** `top/mv` + +**调用例子 :** `top/mv?limit=10` ### 获取 mv 数据 -说明:调用此接口,传入 mvid (在搜索音乐的时候传 type=1004获得) ,可获取对应 MV 数据,数据包含 mv 名字,歌手,发布时间, mv 视频地址等数据,其中 mv 视频网易做了防盗链处理,不能直接播放,需要播放的话需要调用'播放 mv' 接口 -**必选参数:** -`mvid`: mv 的 id +说明 : 调用此接口 , 传入 mvid ( 在搜索音乐的时候传 type=1004 获得 ) , 可获取对应 +MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等数据 , 其中 mv 视频 +网易做了防盗链处理 , 不能直接播放 , 需要播放的话需要调用 ' 播放 mv' 接口 -**接口地址:** -`/mv` +**必选参数 :** `mvid`: mv 的 id -**调用例子:** -`/mv?mvid=5436712` +**接口地址 :** `/mv` -返回数据如下图: +**调用例子 :** `/mv?mvid=5436712` + +返回数据如下图 :  - ### 播放 mv -说明:调用此接口,传入 mv 地址,可播放 mv,也可将接口嵌入 video 标签使用,由于使用了 'pipe',进度条无法通过拖动进度条控制进度,如有解决方案可提出 PR 或者自行改造 -**可选参数:** -`url`: mv 的 地址 +说明 : 调用此接口 , 传入 mv 地址 , 可播放 mv, 也可将接口嵌入 video 标签使用 , 由 +于使用了 'pipe', 进度条无法通过拖动进度条控制进度 , 如有解决方案可提出 PR 或者自 +行改造 -**接口地址:** -`/mv/url` +**可选参数 :** `url`: mv 的 地址 -**调用例子:** -`/mv/url?url=http://v4.music.126.net/20170422034915/c98eab2f5e2c85fc8de2ab3f0f8ed1c6/web/cloudmusic/MjQ3NDQ3MjUw/89a6a279dc2acfcd068b45ce72b1f560/533e4183a709699d566180ed0cd9abe9.mp4` +**接口地址 :** `/mv/url` -如下图: +**调用例子 :** +`/mv/url?url=http://v4.music.126.net/20170422034915/c98eab2f5e2c85fc8de2ab3f0f8ed1c6/web/cloudmusic/MjQ3NDQ3MjUw/89a6a279dc2acfcd068b45ce72b1f560/533e4183a709699d566180ed0cd9abe9.mp4` + +如下图 :  - ### 排行榜 -说明:调用此接口,传入数字 idx, 可获取不同排行榜 -**必选参数:** -`idx`: 对象 key, 对应以下排行榜 +说明 : 调用此接口 , 传入数字 idx, 可获取不同排行榜 + +**必选参数 :** `idx`: 对象 key, 对应以下排行榜 ``` -"0": 云音乐新歌榜, -"1": 云音乐热歌榜, -"2": 网易原创歌曲榜, -"3": 云音乐飙升榜, -"4": 云音乐电音榜, -"5": UK排行榜周榜, -"6": 美国Billboard周榜 -"7": KTV嗨榜, -"8": iTunes榜, -"9": Hit FM Top榜, -"10": 日本Oricon周榜 -"11": 韩国Melon排行榜周榜, -"12": 韩国Mnet排行榜周榜, -"13": 韩国Melon原声周榜, -"14": 中国TOP排行榜(港台榜), -"15": 中国TOP排行榜(内地榜) -"16": 香港电台中文歌曲龙虎榜, -"17": 华语金曲榜, -"18": 中国嘻哈榜, -"19": 法国 NRJ EuroHot 30周榜, -"20": 台湾Hito排行榜, +"0": 云音乐新歌榜, +"1": 云音乐热歌榜, +"2": 网易原创歌曲榜, +"3": 云音乐飙升榜, +"4": 云音乐电音榜, +"5": UK排行榜周榜, +"6": 美国Billboard周榜 +"7": KTV嗨榜, +"8": iTunes榜, +"9": Hit FM Top榜, +"10": 日本Oricon周榜 +"11": 韩国Melon排行榜周榜, +"12": 韩国Mnet排行榜周榜, +"13": 韩国Melon原声周榜, +"14": 中国TOP排行榜(港台榜), +"15": 中国TOP排行榜(内地榜) +"16": 香港电台中文歌曲龙虎榜, +"17": 华语金曲榜, +"18": 中国嘻哈榜, +"19": 法国 NRJ EuroHot 30周榜, +"20": 台湾Hito排行榜, "21": Beatport全球电子舞曲榜, "22": 云音乐ACG音乐榜, "23": 云音乐嘻哈榜 ``` -**接口地址:** -`/top/list` +**接口地址 :** `/top/list` -**调用例子:** -`/top/list?idx=6` +**调用例子 :** `/top/list?idx=6` -返回数据如下图: +返回数据如下图 :  ### 歌手榜 -说明:调用此接口,可获取PC版排行榜中的歌手榜 -**接口地址:** -`/toplist/artist` +说明 : 调用此接口 , 可获取 PC 版排行榜中的歌手榜 -**调用例子:** -`/toplist/artist` +**接口地址 :** `/toplist/artist` + +**调用例子 :** `/toplist/artist` ### 云盘 -说明:登陆后调用此接口,可获取云盘数据,获取的数据没有对应 url,需要再调用一次 `/music/url` 获取 url -**接口地址:** -`/user/cloud` +说明 : 登陆后调用此接口 , 可获取云盘数据 , 获取的数据没有对应 url, 需要再调用一 +次 `/music/url` 获取 url -**调用例子:** -`/user/cloud` +**接口地址 :** `/user/cloud` -### 电台-推荐 -说明:登陆后调用此接口,可获得推荐电台 +**调用例子 :** `/user/cloud` -**接口地址:** -`/dj/recommend` +### 电台 - 推荐 -**调用例子:** -`/dj/recommend` +说明 : 登陆后调用此接口 , 可获得推荐电台 -### 电台-分类 -说明:登陆后调用此接口,可获得电台类型 +**接口地址 :** `/dj/recommend` -**接口地址:** -`/dj/catelist` +**调用例子 :** `/dj/recommend` -**调用例子:** -`/dj/catelist` +### 电台 - 分类 -### 电台-分类推荐 -说明:登陆后调用此接口,可获得推荐电台 +说明 : 登陆后调用此接口 , 可获得电台类型 -**必选参数:** -`type`: 电台类型,数字,可通过`/dj/catelist`获取,对应关系为 id 对应 此接口的 type, name 对应类型意义 +**接口地址 :** `/dj/catelist` -**接口地址:** -`/dj/recommend/type` +**调用例子 :** `/dj/catelist` -**调用例子:** -`/dj/recommend/type?type=1` +### 电台 - 分类推荐 -### 电台-订阅 -说明:登陆后调用此接口,传入`rid`,可订阅 dj,dj 的 `rid` 可通过搜索指定 type='1009'获取其 id,如`/search?keywords=代码时间&type=1009` +说明 : 登陆后调用此接口 , 可获得推荐电台 -**必选参数:** -`rid`: 电台 的 id +**必选参数 :** `type`: 电台类型 , 数字 , 可通过`/dj/catelist`获取 , 对应关系为 +id 对应 此接口的 type, name 对应类型意义 -**接口地址:** -`/dj/sub` +**接口地址 :** `/dj/recommend/type` -**调用例子:** -`/dj/sub?rid=336355127&t=1` (对应关注'代码时间') -`/dj/sub?rid=336355127&t=0` (对应取消关注'代码时间') +**调用例子 :** `/dj/recommend/type?type=1` -### 电台-详情 -说明:登陆后调用此接口,传入`rid`,可获得对应电台的详情介绍 +### 电台 - 订阅 -**必选参数:** -`rid`: 电台 的 id +说明 : 登陆后调用此接口 , 传入`rid`, 可订阅 dj,dj 的 `rid` 可通过搜索指定 +type='1009' 获取其 id, 如`/search?keywords= 代码时间 &type=1009` -**接口地址:** -`/dj/detail?rid=336355127` +**必选参数 :** `rid`: 电台 的 id -**调用例子:** -`/dj/detail?rid=336355127` (对应'代码时间'的详情介绍) +**接口地址 :** `/dj/sub` -### 电台-节目 -说明:登陆后调用此接口,传入`rid`,可查看对应电台的电台节目以及对应的 id, 需要注意的是这个接口返回的 mp3Url 已经无效,都为 null, 但是通过调用 `/music/url` 这个接口,传入节目 id 仍然能获取到节目音频,如 `/music/url?id=478446370` 获取代码时间的一个节目的音频 +**调用例子 :** `/dj/sub?rid=336355127&t=1` ( 对应关注 ' 代码时间 ') +`/dj/sub?rid=336355127&t=0` ( 对应取消关注 ' 代码时间 ') -**必选参数:** -`rid`: 电台 的 id +### 电台 - 详情 -**接口地址:** -`/dj/program` +说明 : 登陆后调用此接口 , 传入`rid`, 可获得对应电台的详情介绍 -**调用例子:** -`/dj/program?rid=336355127` (对应'代码时间'的节目列表) +**必选参数 :** `rid`: 电台 的 id +**接口地址 :** `/dj/detail?rid=336355127` +**调用例子 :** `/dj/detail?rid=336355127` ( 对应 ' 代码时间 ' 的详情介绍 ) + +### 电台 - 节目 + +说明 : 登陆后调用此接口 , 传入`rid`, 可查看对应电台的电台节目以及对应的 id, 需要 +注意的是这个接口返回的 mp3Url 已经无效 , 都为 null, 但是通过调用 `/music/url` 这 +个接口 , 传入节目 id 仍然能获取到节目音频 , 如 `/music/url?id=478446370` 获取代 +码时间的一个节目的音频 + +**必选参数 :** `rid`: 电台 的 id + +**接口地址 :** `/dj/program` + +**调用例子 :** `/dj/program?rid=336355127` ( 对应 ' 代码时间 ' 的节目列表 ) ## 离线访问此文档 -此文档同时也是 Progressive Web Apps(PWA), 加入了serviceWorker,可离线访问 +此文档同时也是 Progressive Web Apps(PWA), 加入了 serviceWorker, 可离线访问 ## 关于此文档 -此文档由 [docsify](https://github.com/QingWei-Li/docsify/) 生成 -docsify 是一个动态生成文档网站的工具。不同于 GitBook、Hexo 的地方是它不会生成将 .md 转成 .html 文件,所有转换工作都是在运行时进行。 + +此文档由 [docsify](https://github.com/QingWei-Li/docsify/) 生成 docsify 是一个动 +态生成文档网站的工具。不同于 GitBook、Hexo 的地方是它不会生成将 .md 转成 .html +文件,所有转换工作都是在运行时进行。 ## License + [The MIT License (MIT)](https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/LICENSE) diff --git a/package.json b/package.json index e758489..bef4ab6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "2.7.9", + "version": "2.8.3", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", diff --git a/public/test.html b/public/test.html new file mode 100644 index 0000000..2d19a76 --- /dev/null +++ b/public/test.html @@ -0,0 +1,41 @@ + + + + + + + +