From 1d9935fb0771c903bc831ab691e560a1c57e9339 Mon Sep 17 00:00:00 2001 From: Gavin Gong Date: Wed, 22 Aug 2018 18:16:37 +0800 Subject: [PATCH 1/3] use absolute path to read router files --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 84ea762..6b4c91a 100644 --- a/app.js +++ b/app.js @@ -45,7 +45,7 @@ const { createWebAPIRequest, request } = require("./util/util"); const Wrap = fn => (req, res) => fn(req, res, createWebAPIRequest, request); // 同步读取 router 目录中的js文件, 根据命名规则, 自动注册路由 -fs.readdirSync("./router/").reverse().forEach(file => { +fs.readdirSync(path.resolve(__dirname, "router")).reverse().forEach(file => { if (/\.js$/i.test(file) === false) { return; } From 4fa3f7b53ba1f138a45d50560f80af1a76bb0a0c Mon Sep 17 00:00:00 2001 From: binaryify Date: Tue, 28 Aug 2018 10:05:30 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3=20#302?= =?UTF-8?q?=20,=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3,=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E6=B3=A8=E5=86=8C=20#297=20v2.17.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.MD | 3 +++ docs/README.md | 25 +++++++++++++++++++++++++ package.json | 2 +- router/check_music.js | 26 +++++++++++++------------- 4 files changed, 42 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.MD b/CHANGELOG.MD index e2225fa..6f4d8dc 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,4 +1,7 @@ # 更新日志 +### 2.17.0 | 2018.08.28 +新增登录状态查询接口 #302 ,完善文档,完善路由注册 #297 + ### 2.16.0 | 2018.08.09 - Fixed #288,#289,#290 diff --git a/docs/README.md b/docs/README.md index 8c07faa..a0ed926 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,6 +15,9 @@ 跨站请求伪造 (CSRF), 伪造请求头 , 调用官方 API ## 版本新特性 +### 2.17.0 | 2018.08.28 +新增登录状态查询接口 + ### 2.15.0 | 2018.07.30 新增相关歌单推荐和付费精选接口,增加歌手列表接口按首字母索引查找参数 @@ -131,6 +134,8 @@ banner 接口 , 增加刷新登录接口 , 增加电台相关接口 , 补充评 70. 订阅的电台列表 71. 相关歌单推荐 72. 付费精选接口 +73. 音乐是否可用检查接口 +74. 登录状态 ## 安装 @@ -269,8 +274,17 @@ Cookies 说明 : 调用此接口 , 可刷新登录状态 + **调用例子 :** `/login/refresh` + +### 登录状态 +说明 : 调用此接口,可获取登录状态 + +**接口地址 :** `/login/status` +返回数据如下图: +![数据](https://ws2.sinaimg.cn/large/006tNbRwgy1fup6q18kk6j316i0nw0wa.jpg) + ### 获取用户详情 说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户详情 @@ -588,6 +602,17 @@ category Code 取值: 返回数据如下图 : ![音乐 url](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E9%9F%B3%E4%B9%90%20url.png) +### 音乐是否可用 +说明: 调用此接口,传入歌曲 id, 可获取音乐是否可用,返回 `{ success: true, message: 'ok' }` 或者 `{ success: false, message: '亲爱的,暂无版权' }` + +**必选参数 :** `id` : 歌曲 id + +**可选参数** : `br`: 码率,默认设置了999000即最大码率,如果要 320k 则可设置为 320000,其他类推 + +**接口地址 :** `/check/music` + +**调用例子 :** `/check/music?id=33894312` + ### 搜索 说明 : 调用此接口 , 传入搜索关键词可以搜索该音乐 / 专辑 / 歌手 / 歌单 / 用户 , diff --git a/package.json b/package.json index 3113a90..513e9c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "2.16.0", + "version": "2.17.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", diff --git a/router/check_music.js b/router/check_music.js index 782cfa3..e3d5c4c 100644 --- a/router/check_music.js +++ b/router/check_music.js @@ -1,27 +1,27 @@ module.exports = (req, res, createWebAPIRequest, request) => { - const id = parseInt(req.query.id); - const br = parseInt(req.query.br || 999000); + const id = parseInt(req.query.id) + const br = parseInt(req.query.br || 999000) const data = { ids: [id], br: br, - csrf_token: "" - }; - const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + csrf_token: '' + } + const cookie = req.get('Cookie') ? req.get('Cookie') : '' createWebAPIRequest( - "music.163.com", - "/weapi/song/enhance/player/url", - "POST", + 'music.163.com', + '/weapi/song/enhance/player/url', + 'POST', data, cookie, music_req => { if (JSON.parse(music_req).code == 200) { - return res.send({ success: true, message: "ok" }); + return res.send({ success: true, message: 'ok' }) } - return res.send({ success: false, message: "亲爱的,暂无版权" }); + return res.send({ success: false, message: '亲爱的,暂无版权' }) }, err => { - res.status(502).send("fetch error"); + res.status(502).send('fetch error') } - ); -}; + ) +} From e0dd7a0836599e74d8cf68269265bdb0bf040f63 Mon Sep 17 00:00:00 2001 From: binaryify Date: Wed, 29 Aug 2018 11:00:13 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3,?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=96=87=E6=A1=A3=20#301?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.MD | 3 +++ README.MD | 3 +++ docs/README.md | 34 ++++++++++++++++++++++++++-------- package.json | 2 +- router/search.js | 28 ++++++++++++++-------------- router/video.js | 18 ++++++++++++++++++ 6 files changed, 65 insertions(+), 23 deletions(-) create mode 100644 router/video.js diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 6f4d8dc..50624c0 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,4 +1,7 @@ # 更新日志 +### 2.18.0 | 2018.08.29 +新增获取视频数据接口,完善文档 #301,感谢 @izhenyuls + ### 2.17.0 | 2018.08.28 新增登录状态查询接口 #302 ,完善文档,完善路由注册 #297 diff --git a/README.MD b/README.MD index cc2eaf8..88e4fb7 100644 --- a/README.MD +++ b/README.MD @@ -92,6 +92,9 @@ 70. 订阅的电台列表 71. 相关歌单推荐 72. 付费精选接口 +73. 音乐是否可用检查接口 +74. 登录状态 +75. 获取视频数据 ## 环境要求 diff --git a/docs/README.md b/docs/README.md index a0ed926..806ae22 100644 --- a/docs/README.md +++ b/docs/README.md @@ -15,6 +15,9 @@ 跨站请求伪造 (CSRF), 伪造请求头 , 调用官方 API ## 版本新特性 +### 2.18.0 | 2018.08.29 +新增获取视频数据接口 + ### 2.17.0 | 2018.08.28 新增登录状态查询接口 @@ -112,7 +115,7 @@ banner 接口 , 增加刷新登录接口 , 增加电台相关接口 , 补充评 48. 独家放送 49. mv 排行 50. 获取 mv 数据 -51. 播放 mv +51. 播放 mv/视频 52. 排行榜 53. 歌手榜 54. 云盘 @@ -136,7 +139,7 @@ banner 接口 , 增加刷新登录接口 , 增加电台相关接口 , 补充评 72. 付费精选接口 73. 音乐是否可用检查接口 74. 登录状态 - +75. 获取视频数据 ## 安装 @@ -624,8 +627,8 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具 **可选参数 :** `limit` : 返回数量 , 默认为 30 `offset` : 偏移数量,用于分页 , 如 : 如 :( 页数 -1)\*30, 其中 30 为 limit 的值 , 默认为 0 -`type`: 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲 10: 专辑 100: 歌手 1000: -歌单 1002: 用户 1004: MV 1006: 歌词 1009: 电台 +`type`: 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲, 10: 专辑, 100: 歌手, 1000: +歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 **接口地址 :** `/search` @@ -1164,7 +1167,7 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具 说明 : 调用此接口 , 传入 mvid ( 在搜索音乐的时候传 type=1004 获得 ) , 可获取对应 MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等数据 , 其中 mv 视频 -网易做了防盗链处理 , 不能直接播放 , 需要播放的话需要调用 ' 播放 mv' 接口 +网易做了防盗链处理 , 可能不能直接播放 , 需要播放的话需要调用 ' 播放 mv/视频' 接口 **必选参数 :** `mvid`: mv 的 id @@ -1176,13 +1179,28 @@ MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等 ![热门歌手](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/mv.png) -### 播放 mv +### 获取视频数据 -说明 : 调用此接口 , 传入 mv 地址 , 可播放 mv, 也可将接口嵌入 video 标签使用 , 由 +说明 : 调用此接口 , 传入视频的 id ( 在搜索音乐的时候传 type=1014 获得 ) , 可获取对应 +视频数据,其中视频网易做了防盗链处理 , 可能不能直接播放 , 需要播放的话需要调用 ' 播放 mv/视频' 接口 + +**必选参数 :** ` id`: 视频 的 id + +**接口地址 :** `/video` + +**调用例子 :** `/video?id=89ADDE33C0AAE8EC14B99F6750DB954D` + +返回数据如下图 : + +![视频数据](https://ws1.sinaimg.cn/large/006tNbRwgy1fuqdv10p5rj31kw0da76y.jpg) + +### 播放 mv/视频 + +说明 : 调用此接口 , 传入 mv/视频 地址 , 可播放 mv/视频, 也可将接口嵌入 video 标签使用 , 由 于使用了 'pipe', 进度条无法通过拖动进度条控制进度 , 如有解决方案可提出 PR 或者自 行改造 -**可选参数 :** `url`: mv 的 地址 +**可选参数 :** `url`: mv/视频 的 地址 **接口地址 :** `/mv/url` diff --git a/package.json b/package.json index 513e9c7..2d36f96 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "2.17.0", + "version": "2.18.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", diff --git a/router/search.js b/router/search.js index dab25f1..25114e8 100644 --- a/router/search.js +++ b/router/search.js @@ -1,26 +1,26 @@ // 搜索 module.exports = (req, res, createWebAPIRequest, request) => { - const cookie = req.get("Cookie") ? req.get("Cookie") : ""; - const keywords = req.query.keywords; - const type = req.query.type || 1; - const limit = req.query.limit || 30; - const offset = req.query.offset || 0; - // *(type)* 搜索单曲(1),歌手(100),专辑(10),歌单(1000),用户(1002) + const cookie = req.get('Cookie') ? req.get('Cookie') : '' + const keywords = req.query.keywords + const type = req.query.type || 1 + const limit = req.query.limit || 30 + const offset = req.query.offset || 0 + // *(type)* 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 const data = { - csrf_token: "", + csrf_token: '', limit, type, s: keywords, offset - }; + } createWebAPIRequest( - "music.163.com", - "/weapi/search/get", - "POST", + 'music.163.com', + '/weapi/search/get', + 'POST', data, cookie, music_req => res.send(music_req), - err => res.status(502).send("fetch error") - ); -}; + err => res.status(502).send('fetch error') + ) +} diff --git a/router/video.js b/router/video.js new file mode 100644 index 0000000..e826350 --- /dev/null +++ b/router/video.js @@ -0,0 +1,18 @@ +//video +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get('Cookie') ? req.get('Cookie') : '' + const videoId = req.query.id + const data = {} + + createWebAPIRequest( + 'music.163.com', + `/api/cloudvideo/playurl?ids=['${videoId}']&resolution=720`, + 'POST', + data, + cookie, + music_req => { + res.send(music_req) + }, + err => res.status(502).send('fetch error') + ) +}