refactor(api)!: 平台 id 收尾统一——migu→mg、apple→ap
补上最后两个多字母 id,至此 15 个平台对外 id 全部为两字母: kw kg tx wy qs xm me qt lr mg bd jx bl 5s ap **破坏性变更**:id 出现在所有 URL、/sources 返回以及 data/auth.json 的 凭据键里,咪咕与 Apple Music 已存的登录态会失效,需重新登录。 - sdk/index.ts:id 与 supportQuality 映射键(展示名 `咪咕音乐` / `Apple Music` 保持不动) - sdk/types.ts:Source 联合类型 - src/routes.ts:/stream 的 enum ['qs','migu'] → ['qs','mg'],以及 /url/mg、/stream/mg 等路径与 schema 描述 - src/http/migu-stream.ts、src/routes-login.ts、src/server.ts - test/smoke-test.ts、README.md、docs/API.md 同步 有意未改:域名与 API 路径(music.migu.cn、music.apple.com、 amp-api.music.apple.com、/v1/catalog/cn/apple-curators/…)、 标识符(registerMiguStream、appleAmpGet、APPLE_AMP_API_URL 等)、 sdk/migu 与 sdk/apple 的目录与文件名、错误文案里的平台名。 验证:typecheck ✓、pnpm test 112/112 ✓;另起临时实例实证 /sources (15/15 平台 id 与展示名全对)与 /login/status,旧 id 零残留。
This commit is contained in:
1 parent
3381e9b906
commit
1b972ec4dd
20 files changed
+106
-106
No files matched your search
@@ -31,7 +31,7 @@ const toPlaylist = (item: MiguPlaylistItem, categoryId?: string) => {
|
||||
playCount: parseInt(String(item.playNum ?? ''), 10) || 0,
|
||||
creator: firstNonEmpty(item.userName, item.ownerName),
|
||||
link: miguPlaylistLink(playlistID),
|
||||
source: 'migu' as const,
|
||||
source: 'mg' as const,
|
||||
...(categoryId ? { categoryId } : {}),
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,7 @@ export const searchPlaylist = async(keyword: string, page = 1, limit = 20) => {
|
||||
const body = await searchAll(keyword, 'songlist', page, limit)
|
||||
const result: MiguPlaylistItem[] = body?.songListResultData?.result ?? []
|
||||
const list = result.map(item => toPlaylist(item)).filter(Boolean)
|
||||
return { list, source: 'migu' as const, page, limit, total: list.length }
|
||||
return { list, source: 'mg' as const, page, limit, total: list.length }
|
||||
}
|
||||
|
||||
/** 静态分类(上游 miguPlaylistCategoryKeywords) */
|
||||
@@ -67,7 +67,7 @@ const CATEGORY_KEYWORDS = [
|
||||
]
|
||||
|
||||
export const getCategories = () => ({
|
||||
source: 'migu' as const,
|
||||
source: 'mg' as const,
|
||||
list: [
|
||||
{ id: '', name: '全部', group: '全部' },
|
||||
...CATEGORY_KEYWORDS.map(c => ({ id: c.name, name: c.name, group: c.group, hot: Boolean(c.hot) })),
|
||||
@@ -77,7 +77,7 @@ export const getCategories = () => ({
|
||||
export const getCategoryPlaylists = async(categoryId: string, page = 1, limit = 20) => {
|
||||
const keyword = String(categoryId ?? '').trim() || '华语'
|
||||
const { list } = await searchPlaylist(keyword, page, limit)
|
||||
return { list: list.map(p => toPlaylist(p as any, keyword)).filter(Boolean), source: 'migu' as const, page, limit }
|
||||
return { list: list.map(p => toPlaylist(p as any, keyword)).filter(Boolean), source: 'mg' as const, page, limit }
|
||||
}
|
||||
|
||||
/** 歌单曲目(每页 50 全量翻页 + 去重;上游 GetPlaylistSongs) */
|
||||
@@ -123,7 +123,7 @@ export const getPlaylistDetail = async(id: string, page = 1, limit = 50) => {
|
||||
const { songs, total } = await fetchPlaylistSongs(playlistID)
|
||||
const start = (page - 1) * limit
|
||||
return {
|
||||
source: 'migu' as const,
|
||||
source: 'mg' as const,
|
||||
info: { name: playlistID, img: songs[0]?.img ?? '', desc: '', author: '' },
|
||||
list: songs.slice(start, start + limit),
|
||||
page,
|
||||
|
||||
Reference in new issue
Block a user