From 391f7880f44e7f492325760bc987f5b019d5c939 Mon Sep 17 00:00:00 2001 From: LLL001a <1966944566@qq.com> Date: Sun, 9 Aug 2026 12:42:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E9=9F=B3=E4=B9=90=E5=B0=81=E9=9D=A2=E4=BB=A3=E7=90=86=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=20(#6258)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: 支持配置音乐封面代理地址 * fix: 规范化音乐封面代理地址,去除尾随斜杠 --- app/core/config.py | 4 ++++ app/modules/listenbrainz/__init__.py | 19 ++++++++++++++++--- app/modules/musicbrainz/__init__.py | 4 +++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/core/config.py b/app/core/config.py index d2549dc52..3af5287fe 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -226,6 +226,10 @@ class ConfigModel(BaseModel): # TMDB API Key TMDB_API_KEY: str = "db55323b8d3e4154498498a75642b381" + # ==================== 音乐配置 ==================== + # 音乐封面代理地址(用于解决 coverartarchive.org 无法访问导致的封面不显示问题,留空则使用官方地址) + MUSIC_COVER_PROXY: str = "" + # ==================== TVDB配置 ==================== # TVDB API Key TVDB_V4_API_KEY: str = "ed2aa66b-7899-4677-92a7-67bc9ce3d93a" diff --git a/app/modules/listenbrainz/__init__.py b/app/modules/listenbrainz/__init__.py index 854ebbf15..484d7efa5 100644 --- a/app/modules/listenbrainz/__init__.py +++ b/app/modules/listenbrainz/__init__.py @@ -243,7 +243,7 @@ class ListenBrainzModule(_ModuleBase): album_artist=artist_name or None, album_id=str(media_id), cover_url=cls._release_cover(release_group.get("caa_release_mbid")) - or f"{cls._release_group_cover_url}/{media_id}/front-500", + or cls._release_group_cover(media_id), names=[str(title)], detail_link=f"{cls._album_detail_url}/{media_id}", listen_count=cls._optional_int(release_group.get("listen_count")), @@ -277,7 +277,7 @@ class ListenBrainzModule(_ModuleBase): year=cls._year(release_date), release_date=release_date, cover_url=cls._release_cover(release.get("caa_release_mbid")) - or f"{cls._release_group_cover_url}/{media_id}/front-500", + or cls._release_group_cover(media_id), category=" / ".join(str(part) for part in category_parts if part), genres=[str(tag) for tag in release.get("release_tags") or [] if tag], names=[str(title)], @@ -289,7 +289,20 @@ class ListenBrainzModule(_ModuleBase): @classmethod def _release_cover(cls, release_mbid: Any) -> Optional[str]: """根据发行版本 ID 构造 Cover Art Archive 封面地址。""" - return f"{cls._release_cover_url}/{release_mbid}/front-500" if release_mbid else None + if not release_mbid: + return None + # 支持配置音乐封面代理地址,解决 coverartarchive.org 无法访问的问题 + base = (settings.MUSIC_COVER_PROXY or "https://coverartarchive.org").rstrip("/") + return f"{base}/release/{release_mbid}/front-500" + + @classmethod + def _release_group_cover(cls, release_group_id: Any) -> Optional[str]: + """根据 Release Group ID 构造 Cover Art Archive 封面地址。""" + if not release_group_id: + return None + # 支持配置音乐封面代理地址,解决 coverartarchive.org 无法访问的问题 + base = (settings.MUSIC_COVER_PROXY or "https://coverartarchive.org").rstrip("/") + return f"{base}/release-group/{release_group_id}/front-500" @staticmethod def _primary_artist_ids(artist_mbids: Any) -> list[str]: diff --git a/app/modules/musicbrainz/__init__.py b/app/modules/musicbrainz/__init__.py index 81f6eb1cc..7a45dea53 100644 --- a/app/modules/musicbrainz/__init__.py +++ b/app/modules/musicbrainz/__init__.py @@ -675,7 +675,9 @@ class MusicBrainzModule(_ModuleBase): """根据 Release Group ID 构造 Cover Art Archive 封面地址。""" if not release_group_id: return None - return f"{cls._cover_url}/{release_group_id}/front-500" + # 支持配置音乐封面代理地址,解决 coverartarchive.org 无法访问的问题 + base = (settings.MUSIC_COVER_PROXY or "https://coverartarchive.org").rstrip("/") + return f"{base}/release-group/{release_group_id}/front-500" @classmethod def _wait_for_rate_limit(cls) -> None: