diff --git a/README.MD b/README.MD index f2c3697..096b961 100644 --- a/README.MD +++ b/README.MD @@ -499,6 +499,11 @@ banner({ type: 0 }).then((res) => { 314. 广播电台 - 收藏/取消收藏电台 315. 用户的创建歌单列表 316. 用户的收藏歌单列表 +317. DIFM电台 - 分类 +318. DIFM电台 - 收藏列表 +319. DIFM电台 - 收藏频道 +320. DIFM电台 - 取消收藏频道 +321. DIFM电台 - 播放列表 ## 单元测试 diff --git a/module/dj_difm_all_style_channel.js b/module/dj_difm_all_style_channel.js new file mode 100644 index 0000000..d7b0caa --- /dev/null +++ b/module/dj_difm_all_style_channel.js @@ -0,0 +1,9 @@ +// DIFM电台 - 分类 + +const createOption = require('../util/option.js') +module.exports = (query, request) => { + const data = { + sources: query.sources || '[0]', + } + return request(`/api/dj/difm/all/style/channel/v2`, data, createOption(query)) +} diff --git a/module/dj_difm_channel_subscribe.js b/module/dj_difm_channel_subscribe.js new file mode 100644 index 0000000..8dcf884 --- /dev/null +++ b/module/dj_difm_channel_subscribe.js @@ -0,0 +1,9 @@ +// DIFM电台 - 收藏频道 + +const createOption = require('../util/option.js') +module.exports = (query, request) => { + const data = { + id: query.id, + } + return request(`/api/dj/difm/channel/subscribe`, data, createOption(query)) +} diff --git a/module/dj_difm_channel_unsubscribe.js b/module/dj_difm_channel_unsubscribe.js new file mode 100644 index 0000000..a34b27b --- /dev/null +++ b/module/dj_difm_channel_unsubscribe.js @@ -0,0 +1,9 @@ +// DIFM电台 - 取消收藏频道 + +const createOption = require('../util/option.js') +module.exports = (query, request) => { + const data = { + id: query.id, + } + return request(`/api/dj/difm/channel/unsubscribe`, data, createOption(query)) +} diff --git a/module/dj_difm_playing_tracks_list.js b/module/dj_difm_playing_tracks_list.js new file mode 100644 index 0000000..e0fe61c --- /dev/null +++ b/module/dj_difm_playing_tracks_list.js @@ -0,0 +1,11 @@ +// DIFM电台 - 播放列表 + +const createOption = require('../util/option.js') +module.exports = (query, request) => { + const data = { + limit: query.limit || 5, + source: query.source || 0, + channelId: query.channelId, + } + return request(`/api/dj/difm/playing/tracks/list`, data, createOption(query)) +} diff --git a/module/dj_difm_subscribe_channels_get.js b/module/dj_difm_subscribe_channels_get.js new file mode 100644 index 0000000..6a928d6 --- /dev/null +++ b/module/dj_difm_subscribe_channels_get.js @@ -0,0 +1,13 @@ +// DIFM电台 - 收藏列表 + +const createOption = require('../util/option.js') +module.exports = (query, request) => { + const data = { + sources: query.sources || '[0]', + } + return request( + `/api/dj/difm/subscribe/channels/get/v2`, + data, + createOption(query), + ) +} diff --git a/package.json b/package.json index 2b76092..cece4ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NeteaseCloudMusicApi", - "version": "4.29.0", + "version": "4.30.0", "description": "网易云音乐 NodeJS 版 API", "scripts": { "start": "node app.js", @@ -65,26 +65,24 @@ "data" ], "dependencies": { - "@unblockneteasemusic/server": "^0.28.0", - "axios": "^1.13.2", + "axios": "^1.2.2", "crypto-js": "^4.2.0", - "dotenv": "^17.2.3", - "express": "^4.22.1", - "express-fileupload": "^1.5.2", + "express": "^4.17.1", + "express-fileupload": "^1.1.9", "md5": "^2.3.0", - "music-metadata": "^7.14.0", - "node-forge": "^1.3.3", - "pac-proxy-agent": "^7.2.0", - "qrcode": "^1.5.4", + "music-metadata": "^7.5.3", + "node-forge": "^1.3.1", + "pac-proxy-agent": "^7.0.0", + "qrcode": "^1.4.4", "safe-decode-uri-component": "^1.2.1", "tunnel": "^0.0.6", "xml2js": "^0.6.2", - "yargs": "^17.7.2" + "yargs": "^17.1.1" }, "devDependencies": { - "@types/express": "^4.17.25", - "@types/express-fileupload": "^1.5.1", - "@types/mocha": "^9.1.1", + "@types/express": "^4.17.13", + "@types/express-fileupload": "^1.2.2", + "@types/mocha": "^9.1.0", "@types/node": "16.11.19", "@typescript-eslint/eslint-plugin": "5.0.0", "@typescript-eslint/parser": "5.0.0", @@ -96,7 +94,7 @@ "intelli-espower-loader": "1.1.0", "lint-staged": "12.1.7", "mocha": "10.0.0", - "pkg": "^5.8.1", + "pkg": "^5.8.0", "power-assert": "1.6.1", "prettier": "2.7.1", "typescript": "4.5.2" diff --git a/public/docs/home.md b/public/docs/home.md index c148eaa..3134753 100644 --- a/public/docs/home.md +++ b/public/docs/home.md @@ -332,6 +332,11 @@ 314. 广播电台 - 收藏/取消收藏电台 315. 用户的创建歌单列表 316. 用户的收藏歌单列表 +317. DIFM电台 - 分类 +318. DIFM电台 - 收藏列表 +319. DIFM电台 - 收藏频道 +320. DIFM电台 - 取消收藏频道 +321. DIFM电台 - 播放列表 ## 安装 @@ -5175,6 +5180,72 @@ let data = encodeURIComponent( **调用例子 :** `/user/playlist/collect?uid=32953014` +### DIFM电台 - 分类 + +说明: 调用此接口, 获取DIFM电台分类 + +**必选参数 :** + +`sources`: 来源列表, 0: 最嗨电音 1: 古典电台 2: 爵士电台 + +**接口地址:** `/dj/difm/all/style/channel` + +**调用例子:** `/dj/difm/all/style/channel?sources=[0]` + +### DIFM电台 - 收藏列表 + +说明: 调用此接口, 获取DIFM电台收藏列表 + +**必选参数 :** + +`sources`: 来源列表, 0: 最嗨电音 1: 古典电台 2: 爵士电台 + +**接口地址:** `/dj/difm/subscribe/channels/get` + +**调用例子:** `/dj/difm/subscribe/channels/get?sources=[0]` + +### DIFM电台 - 收藏频道 + +说明: 调用此接口, 可收藏DIFM频道 + +**必选参数 :** + +`id`: 频道id + +**接口地址:** `/dj/difm/channel/subscribe` + +**调用例子:** `/dj/difm/channel/subscribe?id=1` + +### DIFM电台 - 取消收藏频道 + +说明: 调用此接口, 可取消收藏DIFM频道 + +**必选参数 :** + +`id`: 频道id + +**接口地址:** `/dj/difm/channel/unsubscribe` + +**调用例子:** `/dj/difm/channel/unsubscribe?id=1` + +### DIFM电台 - 播放列表 + +说明: 调用此接口, 获取DIFM播放列表 + +**必选参数 :** + +`source`: 来源, 0: 最嗨电音 1: 古典电台 2: 爵士电台 + +`channelId`: 频道id + +**可选参数 :** + +`limit`: 返回数量, 默认为 5 + +**接口地址:** `/dj/difm/playing/tracks/list` + +**调用例子:** `/dj/difm/playing/tracks/list?source=0&channelId=1012` + ## 离线访问此文档 此文档同时也是 Progressive Web Apps(PWA), 加入了 serviceWorker, 可离线访问 diff --git a/util/request.js b/util/request.js index d67247c..4a73c3d 100644 --- a/util/request.js +++ b/util/request.js @@ -237,6 +237,7 @@ const createRequest = (uri, data, options) => { headers['User-Agent'] = options.ua || chooseUserAgent('api', 'iphone') if (crypto === 'eapi') { + // headers['x-aeapi'] = true // 服务器会使用gzip压缩返回值 data.header = header data.e_r = toBoolean( options.e_r !== undefined @@ -320,6 +321,7 @@ const createRequest = (uri, data, options) => { if (crypto === 'eapi' && data.e_r) { answer.body = encrypt.eapiResDecrypt( body.toString('hex').toUpperCase(), + headers['x-aeapi'], ) } else { answer.body =