diff --git a/README.md b/README.md index db36719..f7e52e5 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ pnpm test # 运行冒烟测试(自动启动/关闭本地服务器) | `GET /singer/:source/:id` | 歌手信息(kg/tx/wy) | | `GET /singer/:source/:id/songs?page=1&limit=30` | 歌手歌曲列表(kg/tx/wy) | | `GET /singer/:source/:id/albums?page=1&limit=10` | 歌手专辑列表(kg/tx/wy) | -| `GET /album/:source/:id?page=1` | 专辑详情与曲目(kg/mg) | +| `GET /album/:source/:id?page=1` | 专辑详情与曲目(kg/kw/mg) | | `GET /sources` | 平台列表(音质与能力) | | `GET /health` | 健康检查 | | `GET /docs` `/redoc` `/openapi.json` | 接口文档(Swagger UI / ReDoc / OpenAPI 3.1) | diff --git a/docs/API.md b/docs/API.md index 53fbeba..b6b65e0 100644 --- a/docs/API.md +++ b/docs/API.md @@ -71,7 +71,7 @@ | GET | `/singer/:source/:id` | 歌手信息(name/desc/avatar 与歌曲/专辑数量)。支持 kg/tx/wy | | GET | `/singer/:source/:id/songs` | 歌手歌曲列表;可带 `page`/`limit`(默认 20)。支持 kg/tx/wy | | GET | `/singer/:source/:id/albums` | 歌手专辑列表;可带 `page`/`limit`。支持 kg/tx/wy | -| GET | `/album/:source/:id` | 专辑详情与曲目列表;可带 `page`/`limit`(limit 仅 kg 生效)。支持 kg/mg;kw 专辑上游接口已失效暂不支持 | +| GET | `/album/:source/:id` | 专辑详情与曲目列表;可带 `page`/`limit`(limit 仅 kg 生效,kw 单页固定 1000 条)。支持 kg/kw/mg | 歌手/专辑 id 来源:搜索结果条目包含 `albumId`;歌手 id 需从平台方获取(不在搜索结果中)。 diff --git a/musicSdk/kw/index.ts b/musicSdk/kw/index.ts index 2c95328..d015baf 100644 --- a/musicSdk/kw/index.ts +++ b/musicSdk/kw/index.ts @@ -9,6 +9,7 @@ import { apis } from '../api-source.ts' import songList from './songList.ts' import hotSearch from './hotSearch.ts' import comment from './comment.ts' +import album from './album.ts' import type { HttpRequestObject } from '../types.ts' const kw = { @@ -16,6 +17,7 @@ const kw = { _musicInfoPromiseCancelFn: null, _musicPicRequestObj: null as HttpRequestObject | null, _musicPicPromiseCancelFn: null, + album, // context: null, diff --git a/src/routes.js b/src/routes.js index d78c454..96b89fc 100644 --- a/src/routes.js +++ b/src/routes.js @@ -336,7 +336,7 @@ export const musicRoutes = async(fastify) => { fastify.get('/album/:source/:id', { schema: { summary: '获取专辑详情与曲目列表', - description: '支持 kg/mg(见 /sources 的 album 能力位)。kw 的专辑上游接口已失效暂不支持。', + description: '支持 kg/kw/mg(见 /sources 的 album 能力位)。kw 单页固定 1000 条、limit 不生效。', tags: ['歌手专辑'], params: params({ source: pSource('album'), id: { type: 'string', description: '平台专辑 id(搜索结果中的 albumId)' } }), querystring: qs({ page: pPage, limit: pLimit }), @@ -346,9 +346,10 @@ export const musicRoutes = async(fastify) => { const { source, id } = request.params const { page, limit } = request.query const album = getSource(musicSdk, source, 'album').album - // kg/mg 为 getAlbumDetail(id, page, limit),其他平台适配器如只提供 getAlbumListDetail(id, page) 也可接入 - const fn = album.getAlbumDetail || album.getAlbumListDetail - return fn.call(album, id, page, limit).catch(err => { throw upstream(err.message) }) + // 各平台适配器签名不同:kg/mg 为 getAlbumDetail(id, page, limit), + // kw 为 getAlbumListDetail(id, page)——第三参数是 retryNum,不能透传 limit + if (album.getAlbumDetail) return album.getAlbumDetail(id, page, limit).catch(err => { throw upstream(err.message) }) + return album.getAlbumListDetail(id, page).catch(err => { throw upstream(err.message) }) }) // ---------- 系统 ---------- diff --git a/src/smoke-test.js b/src/smoke-test.js index 3453a1f..10984ce 100644 --- a/src/smoke-test.js +++ b/src/smoke-test.js @@ -264,6 +264,13 @@ await test('专辑详情 /album/kg', async() => { return `${r.data.info.name}(${r.data.list.length} 首)` }) +await test('专辑详情 /album/kw', async() => { + const r = await get('/album/kw/29218') + if (r.code != 0) throw new Error(r.msg) + if (!r.data?.info?.name || !r.data?.list?.length) throw new Error('响应不完整') + return `${r.data.info.name}(${r.data.list.length} 首)` +}) + await test('专辑详情 /album/mg', async() => { const r = await get('/album/mg/25578') if (r.code != 0) throw new Error(r.msg)