diff --git a/CHANGELOG.MD b/CHANGELOG.MD index ad4963f6817f8c142f29286a2a7f45be4ec5ee8c..aea5ef494a077d7f0dc37cd018186ff2b09d9905 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,8 +1,10 @@ # 更新日志 +### 2.2.0 |2017.4.14 +增加私人 FM, 喜欢歌曲,垃圾桶,每日签到等接口,更新文档 + ## 2.1.3 | 2017.4.6 改善文档 - ## 2.1.0 | 2017.4.6 增加获取评论接口以及对应单元测试,增加更新日志 diff --git a/README.MD b/README.MD index 8e46c5d8dda5a9acf8b14cf68571460695d7e4d6..f071f2755a664705ff5c9a88550f19e6b811f39e 100644 --- a/README.MD +++ b/README.MD @@ -8,14 +8,35 @@

+## 灵感来自 +[disoul/electron-cloud-music](https://github.com/disoul/electron-cloud-music) + +[darknessomi/musicbox](https://github.com/darknessomi/musicbox) ## 版本新特性 +### 2.2.0 |2017.4.14 +增加私人 FM, 喜欢歌曲,垃圾桶,每日签到等接口,更新文档 + ### 2.1.0 | 2017.4.6 增加获取评论接口以及对应单元测试,增加更新日志 ### 2.0.0 | 2017.4.1 版本升级到 2.0.增加使用文档,完成项目重构,增加更完善的单元测试,升级 api 到 v2+,支持登录并获取用户信息和创建的歌单,可通过获取音乐 url 接口获取用户歌单里的的音乐,获取每日推荐歌单和每日推荐音乐 +## 功能特性 +1. 登录 +2. 获取用户歌单 +3. 获取歌曲详情 +4. 获取音乐 url +5. 搜索音乐 +6. 获取歌词 +7. 获取评论 +8. 获取歌手专辑 +9. 获取每日推荐歌单 +10. 获取每日推荐歌曲 +11. 喜欢歌曲 +12. 私人FM +13. 把私人 FM 的歌曲移动至垃圾桶 ## 环境要求 需要 NodeJS 6.0+ 环境 diff --git a/app.js b/app.js index 4f1359388ca5744ba3f8ec2185f6b411f47036b7..697d89af7b48da1685660c6a8f3a04a99cb25305 100644 --- a/app.js +++ b/app.js @@ -27,14 +27,29 @@ app.use('/user/playlist', require('./router/userPlaylist')) // 获取歌单内列表 app.use('/playlist/detail', require('./router/playlistDetail')) +//不明 api app.use('/playlist/tracks', require('./router/playlistTracks')) + // 获取音乐 url app.use('/music/url', require('./router/musicUrl')) + // 搜歌 app.use('/search', require('.//router/search')) app.use('/log/web', require('./router/logWeb')) +// 私人 FM +app.use("/personal_fm",require("./router/personal_fm")) + +// 喜欢歌曲 +app.use("/like",require("./router/like")) + +//签到 +app.use("/daily_signin",require("./router/daily_signin")) + +//垃圾桶 +app.use("/fm_trash",require("./router/fm_trash")) + process.on('SIGHUP', () => { console.log('server: bye bye') process.exit() diff --git a/docs/README.md b/docs/README.md index 6d5da89f8a7fa1068dfc247af08ca0fc2166d195..efb444333ba22c918f39f92dd1586bbfbd2501f7 100644 --- a/docs/README.md +++ b/docs/README.md @@ -4,7 +4,24 @@ ## 版本新特性 -版本升级到 2.0 .增加使用文档,完成项目重构,增加更完善的单元测试,升级 api 到 v2+,支持登录并获取用户信息和创建的歌单,可通过获取音乐 url 接口获取用户歌单里的的音乐,获取每日推荐歌单和每日推荐音乐 +Version 2.2.0 +新增喜欢歌曲,私人 FM, 垃圾桶,签到等接口 + +## 功能特性 +1. 登录 +2. 获取用户歌单 +3. 获取歌曲详情 +4. 获取音乐 url +5. 搜索音乐 +6. 获取歌词 +7. 获取评论 +8. 获取歌手专辑 +9. 获取每日推荐歌单 +10. 获取每日推荐歌曲 +11. 喜欢歌曲 +12. 私人FM +13. 把私人 FM 的歌曲移动至垃圾桶 +14. 签到 ## 安装 ``` shell @@ -51,7 +68,7 @@ $ node app.js ![登录](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E7%99%BB%E5%BD%95.png) -完成登录后,会在浏览器保存一个 cookie 用作登录凭证, 除了搜索的音乐和歌词,以及获取音乐 url 都需要用到这个 cookie +完成登录后,会在浏览器保存一个 Cookies 用作登录凭证,大部分 API 都需要用到这个 Cookies #### 注意 调用登录接口的速度比调用其他接口慢,因为登录过程调用了加密算法 @@ -204,6 +221,78 @@ $ node app.js 返回数据如下图: ![搜索音乐](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E6%8E%A8%E8%8D%90%E6%AD%8C%E6%9B%B2.png) + +### 私人 FM +说明:私人 FM( 需要登录) + +**接口地址:** +`/personal_fm` + +**调用例子:** +`/personal_fm` + +返回数据如下图: + +![私人 FM](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/personal_fm.png) + +### 签到 +说明:调用此接口,传入签到类型(可不传,默认安卓端签到),可签到(需要登录),其中安卓端签到可获得3点经验, web/PC 端签到可获得2点经验 +**可选参数:** +`type`: 签到类型,默认 0, 其中 0 为安卓端签到,1为 web/PC 签到 + +**接口地址:** +`/daily_signin` + +**调用例子:** +`/daily_signin` + +返回数据如下图: + +![签到成功](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/signinSuccess) + +![签到失败](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/signinError.png) + + +### 喜欢音乐 +说明:调用此接口,传入音乐 id, 可喜欢该音乐 +**必选参数:** +` id`: 歌曲 id + +**可选参数:** +` like`: 布尔值,默认为 true 即喜欢,若传 false, 则取消喜欢 + +**接口地址:** +`/like` + +**调用例子:** +`/like?id=347230` + +返回数据如下图: + +![喜欢成功](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/like.png) + +![喜欢成功截图](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/likeSuccess.png) + +喜欢成功则返回数据的 code 为200,其余为失败 + +### 垃圾桶 +说明:调用此接口,传入音乐 id, 可把该音乐从私人 FM中移除至垃圾桶 + +**必选参数:** +` id`: 歌曲 id + +**接口地址:** +`/fm_trash` + +**调用例子:** +`/fm_trash?id=347230` + +返回数据如下图: + +![移除成功](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/fm_trash.png) + + + ## 离线访问此文档 此文档同时也是 Progressive Web Apps(PWA), 加入了serviceWorker,可离线访问 diff --git a/router/daily_signin.js b/router/daily_signin.js new file mode 100644 index 0000000000000000000000000000000000000000..1027b04434e247ed00fe6e8b9294caec2b6923c9 --- /dev/null +++ b/router/daily_signin.js @@ -0,0 +1,29 @@ +const express = require("express") +const router = express() +const { createWebAPIRequest } = require("../util/util") + +router.get("/", (req, res) => { + const cookie = req.get('Cookie') ? req.get('Cookie') : '' + const data = { + "csrf_token": "" + } + // {'android': {'point': 3, 'code': 200}, 'web': {'point': 2, 'code': 200}} + // {'android': {'code': -2, 'msg': '重复签到'}, 'web': {'code': -2, 'msg': '重复签到'}} + // 'android': {'code': 301}, 'web': {'code': 301}} + + let type = req.query.type || 0 //0为安卓端签到 3点经验,1为网页签到,2点经验 + const action = `http://music.163.com/weapi/point/dailyTask?type=${type}` + createWebAPIRequest( + 'music.163.com', + action, + '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 diff --git a/router/fm_trash.js b/router/fm_trash.js new file mode 100644 index 0000000000000000000000000000000000000000..602fe146108bf068e60f9f7dfa162bcb60fe9cf1 --- /dev/null +++ b/router/fm_trash.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') : '' + const data = { + "csrf_token": "" + } + const songid = req.query.id + const alg = "RT" + const time = req.query.time || 25 + createWebAPIRequest( + 'music.163.com', + `http://music.163.com/api/radio/trash/add?alg=${alg}&songId=${songid}&time=${time}`, + '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 diff --git a/router/like.js b/router/like.js new file mode 100644 index 0000000000000000000000000000000000000000..cc5cd9bc4070ee7d71913a0de1ec723f6c0a2d65 --- /dev/null +++ b/router/like.js @@ -0,0 +1,27 @@ +const express = require("express") +const router = express() +const { createWebAPIRequest } = require("../util/util") + +router.get("/", (req, res) => { + const cookie = req.get('Cookie') ? req.get('Cookie') : '' + const data = { + "csrf_token": "" + } + const trackId = req.query.id + const like = req.query.like || true + const alg = "itembased" + 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}`, + '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 diff --git a/router/personal_fm.js b/router/personal_fm.js new file mode 100644 index 0000000000000000000000000000000000000000..4439e2feb5595bd0317bd4530623c4602e7a3341 --- /dev/null +++ b/router/personal_fm.js @@ -0,0 +1,24 @@ +const express = require("express") +const router = express() +const { createWebAPIRequest } = require("../util/util") + +router.get("/", (req, res) => { + const cookie = req.get('Cookie') ? req.get('Cookie') : '' + const data = { + "csrf_token": "" + } + + createWebAPIRequest( + 'music.163.com', + 'http://music.163.com/api/radio/get', + '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 diff --git a/static/fm_trash.png b/static/fm_trash.png new file mode 100644 index 0000000000000000000000000000000000000000..64dff51b70daa1285bb2f34d5198ef25a9ea71dd Binary files /dev/null and b/static/fm_trash.png differ diff --git a/static/like.png b/static/like.png new file mode 100644 index 0000000000000000000000000000000000000000..0d10b0295feefe41e7cb8eab9afb07d63878e515 Binary files /dev/null and b/static/like.png differ diff --git a/static/likeSuccess.png b/static/likeSuccess.png new file mode 100644 index 0000000000000000000000000000000000000000..d882a6bca3faa727df34cadbacd52b47b6df203a Binary files /dev/null and b/static/likeSuccess.png differ diff --git a/static/personal_fm.png b/static/personal_fm.png new file mode 100644 index 0000000000000000000000000000000000000000..ba0d2973471463baea4d70b2928445f9106e5f4e Binary files /dev/null and b/static/personal_fm.png differ diff --git a/static/signinError.png b/static/signinError.png new file mode 100644 index 0000000000000000000000000000000000000000..9558946fa8b82cd4a2745a903bc673e4760b4b1a Binary files /dev/null and b/static/signinError.png differ diff --git a/static/signinSuccess.png b/static/signinSuccess.png new file mode 100644 index 0000000000000000000000000000000000000000..6669570588a7f8205659730f3e1386254a146e35 Binary files /dev/null and b/static/signinSuccess.png differ