From 0baed1a63474711fc0a61d29bfb24b6396b25a8c Mon Sep 17 00:00:00 2001 From: binaryify Date: Thu, 20 Apr 2017 17:22:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=AD=8C=E5=8D=95=EF=BC=88?= =?UTF-8?q?=E7=BD=91=E5=8F=8B=E7=B2=BE=E9=80=89=E7=A2=9F),=E6=96=B0?= =?UTF-8?q?=E7=A2=9F=E4=B8=8A=E6=9E=B6,=E7=83=AD=E9=97=A8=E6=AD=8C?= =?UTF-8?q?=E6=89=8B=E7=AD=89=E6=8E=A5=E5=8F=A3,=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=96=87=E6=A1=A3,=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=88=B02.4.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.MD | 3 ++ README.MD | 4 +++ app.js | 11 +++++- docs/README.md | 72 +++++++++++++++++++++++++++++++++++++--- package.json | 2 +- router/fm_trash.js | 2 +- router/like.js | 2 +- router/new_albums.js | 19 +++++++++++ router/playlistDetail.js | 4 +-- router/songDetail.js | 3 +- router/top_artists.js | 19 +++++++++++ router/top_playlist.js | 26 +++++++++++++++ 12 files changed, 154 insertions(+), 13 deletions(-) create mode 100644 router/new_albums.js create mode 100644 router/top_artists.js create mode 100644 router/top_playlist.js diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 89e2fe9..c312be6 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,4 +1,7 @@ # 更新日志 +### 2.4.0 | 2017.4.20 +增加歌单(网友精选碟),新碟上架,热门歌手等接口,更新文档 + ### 2.3.4 | 2017.4.20 增加歌曲详情接口,更新文档 diff --git a/README.MD b/README.MD index 9319c89..e6e843b 100644 --- a/README.MD +++ b/README.MD @@ -14,6 +14,9 @@ [darknessomi/musicbox](https://github.com/darknessomi/musicbox) ## 版本新特性 +### 2.4.0 | 2017.4.20 +增加歌单(网友精选碟),新碟上架,热门歌手等接口,更新文档 + ### 2.3.4 | 2017.4.20 增加歌曲详情接口,更新文档 @@ -45,6 +48,7 @@ 13. 把私人 FM 的歌曲移动至垃圾桶 14. 签到 15. 各排行榜 +16. 歌曲详情 ## 环境要求 需要 NodeJS 6.0+ 环境 diff --git a/app.js b/app.js index c518fb9..2fd6ebe 100644 --- a/app.js +++ b/app.js @@ -23,7 +23,16 @@ app.use('/lyric', require('./router/lyric')) // 获取专辑 app.use('/album', require('./router/album')) -// 获取歌单 +// 歌单(网友精选碟) hot||new http://music.163.com/#/discover/playlist/ +app.use('/top_playlist', require('./router/top_playlist')) + +// 新碟上架 http://music.163.com/#/discover/album/ +app.use('/new_albums', require('./router/new_albums')) + +// 热门歌手 http://music.163.com/#/discover/artist/ +app.use('/top_artists', require('./router/top_artists')) + +// 获取用户歌单 app.use('/user/playlist', require('./router/userPlaylist')) // 获取歌单内列表 diff --git a/docs/README.md b/docs/README.md index 698c8b7..cc21ce6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,6 +11,9 @@ 跨站请求伪造 (CSRF), 伪造请求头,调用官方 API ## 版本新特性 +Version 2.4.0 +增加歌单(网友精选碟),新碟上架,热门歌手等接口,更新文档 + Version 2.3.4 增加歌曲详情接口,更新文档 @@ -37,6 +40,9 @@ Version 2.2.0 14. 签到 15. 各排行榜 16. 歌曲详情 +17. 歌单(网友精选碟) +18. 新碟上架 +19. 热门歌手 ## 安装 ``` shell @@ -159,7 +165,7 @@ $ set PORT=4000 && node app.js 1000: 歌单 1002: 用户 -`offset` : 偏移数量,用于分页,如: 如:(评论页数-1)*30, 其中 30 为 limit 的值 +`offset` : 偏移数量,用于分页,如: 如:(评论页数-1)*30, 其中 30 为 limit 的值,默认为0 **接口地址:** `/search` @@ -299,10 +305,10 @@ $ set PORT=4000 && node app.js ### 喜欢音乐 说明:调用此接口,传入音乐 id, 可喜欢该音乐 **必选参数:** -` id`: 歌曲 id +`id`: 歌曲 id **可选参数:** -` like`: 布尔值,默认为 true 即喜欢,若传 false, 则取消喜欢 +`like`: 布尔值,默认为 true 即喜欢,若传 false, 则取消喜欢 **接口地址:** `/like` @@ -324,7 +330,7 @@ $ set PORT=4000 && node app.js 说明:调用此接口,传入音乐 id, 可把该音乐从私人 FM中移除至垃圾桶 **必选参数:** -` id`: 歌曲 id +`id`: 歌曲 id **接口地址:** `/fm_trash` @@ -336,11 +342,67 @@ $ set PORT=4000 && node app.js ![移除成功](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/fm_trash.png) +### 歌单(网友精选碟) +说明:调用此接口,可获取网友精选碟歌单 + +**可选参数:** +`limit`: 取出数量,默认为50 + +`offset`: 偏移数量,用于分页,如:(评论页数-1)*20, 其中 20 为 limit 的值,默认为0 + +`order`: 可选值为 'new' 和 'hot',分别对应最新和最热,默认为 'hot' + +**接口地址:** +`/top_playlist` + +**调用例子:** +`/top_playlist?limit=10&order=new` + +返回数据如下图: + +![精选碟](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/top_playlist.png) + +### 新碟上架 +说明:调用此接口,可获取新碟上架数据 + +**可选参数:** +`limit`: 取出数量,默认为50 + +`offset`: 偏移数量,用于分页,如:(评论页数-1)*50, 其中 50 为 limit 的值,默认为0 + +**接口地址:** +`/new_albums` + +**调用例子:** +`/new_albums?offset=0&limit=30` + +返回数据如下图: + +![新碟上架](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/new_albums.png) + +### 热门歌手 +说明:调用此接口,可获取热门歌手数据 + +**可选参数:** +`limit`: 取出数量,默认为50 + +`offset`: 偏移数量,用于分页,如:(评论页数-1)*50, 其中 50 为 limit 的值,默认为0 + +**接口地址:** +`/top_artists` + +**调用例子:** +`/top_artists?offset=0&limit=30` + +返回数据如下图: + +![热门歌手](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/top_artists.png) + ### 排行榜 说明:调用此接口,传入数字 idx, 可获取不同排行榜 **必选参数:** -` idx`: 对象 key, 对应以下排行榜 +`idx`: 对象 key, 对应以下排行榜 ``` "0": 云音乐新歌榜, diff --git a/package.json b/package.json index e25d18e..dd02de3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "2.3.4", + "version": "2.4.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", diff --git a/router/fm_trash.js b/router/fm_trash.js index 602fe14..c0919de 100644 --- a/router/fm_trash.js +++ b/router/fm_trash.js @@ -12,7 +12,7 @@ router.get("/", (req, res) => { const time = req.query.time || 25 createWebAPIRequest( 'music.163.com', - `http://music.163.com/api/radio/trash/add?alg=${alg}&songId=${songid}&time=${time}`, + `/api/radio/trash/add?alg=${alg}&songId=${songid}&time=${time}`, 'POST', data, cookie, diff --git a/router/like.js b/router/like.js index cc5cd9b..f23b6af 100644 --- a/router/like.js +++ b/router/like.js @@ -13,7 +13,7 @@ router.get("/", (req, res) => { const time = req.query.time || 25 createWebAPIRequest( 'music.163.com', - `http://music.163.com/api/radio/like?alg=${alg}&trackId=${trackId}&like=${like}&time=${time}`, + `/api/radio/like?alg=${alg}&trackId=${trackId}&like=${like}&time=${time}`, 'POST', data, cookie, diff --git a/router/new_albums.js b/router/new_albums.js new file mode 100644 index 0000000..32ad837 --- /dev/null +++ b/router/new_albums.js @@ -0,0 +1,19 @@ +const express = require("express") +const router = express() +const { createRequest } = require("../util/util") + +router.get("/", (req, res) => { + const offset = req.query.offset || 0 + const limit = req.query.limit || 50 + createRequest(`/api/album/new?area=ALL&offset=${offset}&total=true&limit=${limit}`, 'GET', null) + .then(result => { + res.setHeader("Content-Type", "application/json") + res.send(result) + }) + .catch(err => { + res.status(502).send('fetch error') + }) +}) + + +module.exports = router \ No newline at end of file diff --git a/router/playlistDetail.js b/router/playlistDetail.js index 1a653ba..33dbffa 100644 --- a/router/playlistDetail.js +++ b/router/playlistDetail.js @@ -21,12 +21,12 @@ router.get("/", (req, res) => { 'POST', data, cookie, - music_req=> { + music_req => { console.log(music_req) detail = music_req mergeRes() }, - err =>{ + err => { res.status(502).send('fetch error') } ) diff --git a/router/songDetail.js b/router/songDetail.js index dae6eb9..c7ba850 100644 --- a/router/songDetail.js +++ b/router/songDetail.js @@ -4,8 +4,7 @@ const { createRequest } = require("../util/util") router.get("/", (req, res) => { const ids = req.query.ids - console.log(ids) - createRequest(`http://music.163.com/api/song/detail?ids=%5B${ids}%5D`, 'GET', null) + createRequest(`/api/song/detail?ids=%5B${ids}%5D`, 'GET', null) .then(result => { res.setHeader("Content-Type", "application/json") res.send(result) diff --git a/router/top_artists.js b/router/top_artists.js new file mode 100644 index 0000000..fcfbfc3 --- /dev/null +++ b/router/top_artists.js @@ -0,0 +1,19 @@ +const express = require("express") +const router = express() +const { createRequest } = require("../util/util") + +router.get("/", (req, res) => { + const offset = req.query.offset || 0 + const limit = req.query.limit || 50 + createRequest(`/api/artist/top?offset=${offset}&total=false&limit=${limit}`, 'GET', null) + .then(result => { + res.setHeader("Content-Type", "application/json") + res.send(result) + }) + .catch(err => { + res.status(502).send('fetch error') + }) +}) + + +module.exports = router \ No newline at end of file diff --git a/router/top_playlist.js b/router/top_playlist.js new file mode 100644 index 0000000..0d9a532 --- /dev/null +++ b/router/top_playlist.js @@ -0,0 +1,26 @@ +const express = require("express") +const router = express() +const { createWebAPIRequest } = require("../util/util") + +router.get("/", (req, res) => { + const cookie = req.get('Cookie') ? req.get('Cookie') : '' + // order可为 'hot' 可为 'new' + const data = { + cat: req.query.cat || "全部", + order: req.query.order || "hot", + offset: req.query.offset || 0, + total: req.query.offset ? 'true' : 'false', + limit: req.query.limit || 50 + } + createWebAPIRequest( + 'music.163.com', + '/api/playlist/list', + 'POST', + data, + cookie, + music_req => res.send(music_req), + err => res.status(502).send('fetch error') + ) +}) + +module.exports = router \ No newline at end of file -- GitLab