diff --git a/xiaomusic/api/models.py b/xiaomusic/api/models.py index 13d3f1f..adf9d06 100644 --- a/xiaomusic/api/models.py +++ b/xiaomusic/api/models.py @@ -72,3 +72,8 @@ class PlayListUpdateObj(BaseModel): class PlayListMusicObj(BaseModel): name: str = "" # 歌单名 music_list: list[str] # 歌曲名列表 + + +class MusicInfosQuery(BaseModel): + name: list[str] + musictag: bool = False diff --git a/xiaomusic/api/routers/music.py b/xiaomusic/api/routers/music.py index c2cd504..0c08417 100644 --- a/xiaomusic/api/routers/music.py +++ b/xiaomusic/api/routers/music.py @@ -21,6 +21,7 @@ from xiaomusic.api.dependencies import ( from xiaomusic.api.models import ( DidPlayMusic, MusicInfoObj, + MusicInfosQuery, MusicItem, ) @@ -267,6 +268,22 @@ async def musicinfos( return ret +@router.post("/musicinfos") +async def musicinfos_post(data: MusicInfosQuery): + """批量音乐信息(POST,避免 URL 过长)""" + ret = [] + for music_name in data.name: + url, _ = await xiaomusic.music_library.get_music_url(music_name) + info = { + "name": music_name, + "url": url, + } + if data.musictag: + info["tags"] = await xiaomusic.music_library.get_music_tags(music_name) + ret.append(info) + return ret + + @router.post("/setmusictag") async def setmusictag(info: MusicInfoObj): """设置音乐标签""" diff --git a/xiaomusic/static/tailwind/api.js b/xiaomusic/static/tailwind/api.js index 6ac9b9d..6931939 100644 --- a/xiaomusic/static/tailwind/api.js +++ b/xiaomusic/static/tailwind/api.js @@ -11,12 +11,14 @@ const API = { if (!Array.isArray(songNames)) { throw new Error('songNames must be an array'); } - - const queryParams = songNames - .map(name => `name=${encodeURIComponent(name)}`) - .join('&'); - - const response = await fetch(`/musicinfos?${queryParams}&musictag=true`); + + const response = await fetch('/musicinfos', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ name: songNames, musictag: true }) + }); return response.json(); }, diff --git a/xiaomusic/static/tailwind/index.html b/xiaomusic/static/tailwind/index.html index 94df40a..fb5706a 100644 --- a/xiaomusic/static/tailwind/index.html +++ b/xiaomusic/static/tailwind/index.html @@ -927,7 +927,8 @@ // 验证URL是否有效 const validUrl = new URL(musicInfo.url); - if (!validUrl.pathname.endsWith('.mp3')) { + const audioExts = ['.mp3', '.flac', '.wav', '.ogg', '.aac', '.m4a', '.wma', '.ape']; + if (!audioExts.some(ext => validUrl.pathname.endsWith(ext))) { console.error('Invalid music URL format:', validUrl); showMessage('音乐文件格式不支持', 'alert-error'); return;