Compare commits

..

2 Commits

Author SHA1 Message Date
c50aeddf5f
update deps 2026-03-20 19:55:24 +08:00
b8af386082
update to 4.30.0 2026-03-20 19:54:16 +08:00
10 changed files with 202 additions and 325 deletions

View File

@ -499,6 +499,11 @@ banner({ type: 0 }).then((res) => {
314. 广播电台 - 收藏/取消收藏电台 314. 广播电台 - 收藏/取消收藏电台
315. 用户的创建歌单列表 315. 用户的创建歌单列表
316. 用户的收藏歌单列表 316. 用户的收藏歌单列表
317. DIFM电台 - 分类
318. DIFM电台 - 收藏列表
319. DIFM电台 - 收藏频道
320. DIFM电台 - 取消收藏频道
321. DIFM电台 - 播放列表
## 单元测试 ## 单元测试

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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))
}

View File

@ -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),
)
}

View File

@ -1,6 +1,6 @@
{ {
"name": "NeteaseCloudMusicApi", "name": "NeteaseCloudMusicApi",
"version": "4.29.0", "version": "4.30.0",
"description": "网易云音乐 NodeJS 版 API", "description": "网易云音乐 NodeJS 版 API",
"scripts": { "scripts": {
"start": "node app.js", "start": "node app.js",
@ -65,10 +65,8 @@
"data" "data"
], ],
"dependencies": { "dependencies": {
"@unblockneteasemusic/server": "^0.28.0", "axios": "^1.13.6",
"axios": "^1.13.2",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"dotenv": "^17.2.3",
"express": "^4.22.1", "express": "^4.22.1",
"express-fileupload": "^1.5.2", "express-fileupload": "^1.5.2",
"md5": "^2.3.0", "md5": "^2.3.0",

392
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -332,6 +332,11 @@
314. 广播电台 - 收藏/取消收藏电台 314. 广播电台 - 收藏/取消收藏电台
315. 用户的创建歌单列表 315. 用户的创建歌单列表
316. 用户的收藏歌单列表 316. 用户的收藏歌单列表
317. DIFM电台 - 分类
318. DIFM电台 - 收藏列表
319. DIFM电台 - 收藏频道
320. DIFM电台 - 取消收藏频道
321. DIFM电台 - 播放列表
## 安装 ## 安装
@ -5175,6 +5180,72 @@ let data = encodeURIComponent(
**调用例子 :** `/user/playlist/collect?uid=32953014` **调用例子 :** `/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, 可离线访问 此文档同时也是 Progressive Web Apps(PWA), 加入了 serviceWorker, 可离线访问

View File

@ -237,6 +237,7 @@ const createRequest = (uri, data, options) => {
headers['User-Agent'] = options.ua || chooseUserAgent('api', 'iphone') headers['User-Agent'] = options.ua || chooseUserAgent('api', 'iphone')
if (crypto === 'eapi') { if (crypto === 'eapi') {
// headers['x-aeapi'] = true // 服务器会使用gzip压缩返回值
data.header = header data.header = header
data.e_r = toBoolean( data.e_r = toBoolean(
options.e_r !== undefined options.e_r !== undefined
@ -320,6 +321,7 @@ const createRequest = (uri, data, options) => {
if (crypto === 'eapi' && data.e_r) { if (crypto === 'eapi' && data.e_r) {
answer.body = encrypt.eapiResDecrypt( answer.body = encrypt.eapiResDecrypt(
body.toString('hex').toUpperCase(), body.toString('hex').toUpperCase(),
headers['x-aeapi'],
) )
} else { } else {
answer.body = answer.body =