From 82de86b7a094ca5972b4d9a75adeb47ba40bb071 Mon Sep 17 00:00:00 2001 From: birdstudy-nj Date: Tue, 12 May 2026 10:25:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=B0=8F=E7=88=B1?= =?UTF-8?q?=E8=A7=A6=E5=B1=8F=E9=9F=B3=E7=AE=B1=E6=AD=8C=E6=9B=B2=E5=B0=81?= =?UTF-8?q?=E9=9D=A2=E5=8F=8A=E6=AD=8C=E8=AF=8D=E6=98=BE=E7=A4=BA=20(#866)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复小爱触屏音箱歌曲封面及歌词显示 * 修复小爱触屏音箱歌曲封面及歌词显示。增加页面提示词 --- xiaomusic/device_player.py | 41 +++++++++++++++++++++------ xiaomusic/static/default/setting.html | 2 +- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/xiaomusic/device_player.py b/xiaomusic/device_player.py index dafd993..fd8b809 100644 --- a/xiaomusic/device_player.py +++ b/xiaomusic/device_player.py @@ -817,6 +817,7 @@ class XiaoMusicDevice: audio_id = self.config.use_music_audio_id or "1582971365183456177" if not (self.config.use_music_api or self.config.continue_play): return str(audio_id) + try: params = { "query": name, @@ -828,16 +829,38 @@ class XiaoMusicDevice: response = await self.auth_manager.mina_service.mina_request( "/music/search", params ) - for song in response["data"]["songList"]: - if song["originName"] == "QQ音乐": - audio_id = song["audioID"] - break - # 没找到QQ音乐的歌曲,取第一个 - if audio_id == 1582971365183456177: - audio_id = response["data"]["songList"][0]["audioID"] - self.log.debug(f"_get_audio_id. name: {name} songId:{audio_id}") + song_list = response.get("data", {}).get("songList", []) + + if song_list: + # 先默认拿匹配到的第一首的id垫底(容错兜底) + audio_id = song_list[0].get("audioID") + # 把传进来的 "歌名-歌手" 拆开 + target_song = name + target_artist = "" + if "-" in name: + parts = name.split("-", 1) + target_song = parts[0].strip() + target_artist = parts[1].strip() + # 歌手如果有多个只取第一个去匹配 + first_artist = target_artist + if first_artist: + for sep in [";", ";", ",", ",", "&", "、", "/"]: + first_artist = first_artist.replace(sep, "|") + first_artist = first_artist.split("|")[0].strip() + # 歌名完全相等,歌手 in 包含 + for song in song_list: + s_name = song.get("name", "") + s_artist = song.get("artist", {}).get("name", "") + if target_song.lower() == s_name.lower(): + if not first_artist or first_artist.lower() in s_artist.lower(): + audio_id = song.get("audioID") + break + + self.log.debug(f"_get_audio_id. name: {name} 最终使用的 songId:{audio_id}") + except Exception as e: - self.log.error(f"_get_audio_id {e}") + self.log.error(f"_get_audio_id 获取失败: {e}") + return str(audio_id) async def reset_timer_when_answer(self, answer_length): diff --git a/xiaomusic/static/default/setting.html b/xiaomusic/static/default/setting.html index 0e1d275..cf553f6 100644 --- a/xiaomusic/static/default/setting.html +++ b/xiaomusic/static/default/setting.html @@ -229,7 +229,7 @@ - +