diff --git a/app/router/private/audio_proxy.py b/app/router/private/audio_proxy.py index eff812b..2b412eb 100644 --- a/app/router/private/audio_proxy.py +++ b/app/router/private/audio_proxy.py @@ -23,8 +23,6 @@ async def get_audio_proxy_dependency(redis_client: Annotated[redis.Redis, Depend return get_audio_proxy_service(redis_client) - - @router.get("/beatmapset/{beatmapset_id}") async def get_beatmapset_audio( beatmapset_id: Annotated[int, Path(description="谱面集ID", ge=1)], @@ -53,7 +51,7 @@ async def get_beatmapset_audio( headers={ "Cache-Control": "public, max-age=604800", # 7天缓存 "Content-Length": str(len(audio_data)), - "Content-Disposition": f"inline; filename=\"{beatmapset_id}.mp3\"", + "Content-Disposition": f'inline; filename="{beatmapset_id}.mp3"', }, ) diff --git a/app/service/asset_proxy_service.py b/app/service/asset_proxy_service.py index e295327..72fa54a 100644 --- a/app/service/asset_proxy_service.py +++ b/app/service/asset_proxy_service.py @@ -20,6 +20,8 @@ class AssetProxyService: self.asset_proxy_prefix = settings.asset_proxy_prefix self.avatar_proxy_prefix = settings.avatar_proxy_prefix self.beatmap_proxy_prefix = settings.beatmap_proxy_prefix + # 音频代理接口URL + self.audio_proxy_base_url = f"{settings.server_url}api/private/audio/beatmapset" async def replace_asset_urls(self, data: Any) -> Any: """ @@ -52,13 +54,12 @@ class AssetProxyService: r"https://assets\.ppy\.sh/", f"https://{self.asset_proxy_prefix}.{self.custom_asset_domain}/", result ) - # 替换 b.ppy.sh 预览音频 (保持//前缀) - result = re.sub(r"//b\.ppy\.sh/", f"//{self.beatmap_proxy_prefix}.{self.custom_asset_domain}/", result) + # 替换 b.ppy.sh 预览音频为我们的音频代理接口 + # 匹配 https://b.ppy.sh/preview/{beatmapset_id}.mp3 格式 + result = re.sub(r"https://b\.ppy\.sh/preview/(\d+)\.mp3", rf"{self.audio_proxy_base_url}/\1", result) - # 替换 https://b.ppy.sh 预览音频 (转换为//前缀) - result = re.sub( - r"https://b\.ppy\.sh/", f"//{self.beatmap_proxy_prefix}.{self.custom_asset_domain}/", result - ) + # 匹配 //b.ppy.sh/preview/{beatmapset_id}.mp3 格式 + result = re.sub(r"//b\.ppy\.sh/preview/(\d+)\.mp3", rf"{self.audio_proxy_base_url}/\1", result) # 替换 a.ppy.sh 头像 result = re.sub( diff --git a/app/service/audio_proxy_service.py b/app/service/audio_proxy_service.py index c011fff..16343ea 100644 --- a/app/service/audio_proxy_service.py +++ b/app/service/audio_proxy_service.py @@ -5,7 +5,6 @@ from __future__ import annotations - from fastapi import HTTPException import httpx from loguru import logger @@ -123,7 +122,6 @@ class AudioProxyService: return audio_data, content_type - def get_audio_proxy_service(redis_client: redis.Redis) -> AudioProxyService: """获取音频代理服务实例""" # 每次创建新实例,避免全局状态