mirror of
https://github.com/hanxi/xiaomusic.git
synced 2026-03-15 08:13:16 +08:00
fix: 解决在线歌曲链接转换问题
This commit is contained in:
@@ -4,7 +4,7 @@ import asyncio
|
||||
import base64
|
||||
import os
|
||||
import shutil
|
||||
from urllib.parse import urlparse
|
||||
from urllib.parse import parse_qs, urlparse
|
||||
|
||||
import aiohttp
|
||||
from fastapi import (
|
||||
@@ -301,6 +301,21 @@ async def proxy(urlb64: str):
|
||||
status_code=400, detail="无效的URL格式"
|
||||
) from invalid_url_exc
|
||||
|
||||
proxy_pre = f"{xiaomusic.hostname}:{xiaomusic.public_port}/api/proxy/openapi-url"
|
||||
# 解决本地接口认证问题
|
||||
if url.startswith(proxy_pre):
|
||||
query_params = parse_qs(parsed_url.query)
|
||||
urlb64_value = query_params.get("urlb64", [""])[0]
|
||||
url_bytes = base64.b64decode(urlb64_value)
|
||||
origin_url = url_bytes.decode("utf-8")
|
||||
log.info(f"origin_url: {origin_url}")
|
||||
# 获取真正地址
|
||||
source_url = await xiaomusic.get_real_url_of_openapi(origin_url)
|
||||
log.info(f"source_url: {source_url}")
|
||||
parsed_url = urlparse(source_url)
|
||||
url = source_url
|
||||
log.info(f"parsed_url: {parsed_url}")
|
||||
|
||||
# 创建会话并确保关闭
|
||||
session = aiohttp.ClientSession(
|
||||
timeout=aiohttp.ClientTimeout(total=600),
|
||||
@@ -325,6 +340,7 @@ async def proxy(urlb64: str):
|
||||
headers = get_wget_headers(parsed_url)
|
||||
resp = await session.get(url, headers=headers, allow_redirects=True)
|
||||
|
||||
log.info(f"proxy status: {resp.status}")
|
||||
if resp.status not in (200, 206):
|
||||
await close_session()
|
||||
status_exc = ValueError(f"服务器返回状态码: {resp.status}")
|
||||
|
||||
@@ -109,7 +109,9 @@ async def get_openapi_source_url(
|
||||
url_bytes = base64.b64decode(urlb64)
|
||||
origin_url = url_bytes.decode("utf-8")
|
||||
# 获取真正地址
|
||||
log.info(f"origin_url: {origin_url}")
|
||||
source_url = await xiaomusic.get_real_url_of_openapi(origin_url)
|
||||
log.info(f"source_url: {source_url}")
|
||||
if not source_url:
|
||||
source_url = xiaomusic.default_url()
|
||||
# 直接重定向到真实URL
|
||||
|
||||
@@ -382,10 +382,12 @@ class OnlineMusicService:
|
||||
source_url = item.get("url", "")
|
||||
is_open_api = item.get("isOpenAPI", False)
|
||||
music_item = {}
|
||||
# 如果是开放接口,可能需要额外处理
|
||||
if is_open_api and source_url:
|
||||
# 如果不是开放接口,可能需要额外处理
|
||||
if (not is_open_api) and source_url:
|
||||
# 使用代理url
|
||||
music_item["url"] = self._get_openapi_proxy_url(source_url)
|
||||
elif source_url:
|
||||
music_item["url"] = source_url
|
||||
else:
|
||||
# 返回插件源的代理接口
|
||||
music_item["url"] = self._get_plugin_proxy_url(item)
|
||||
|
||||
Reference in New Issue
Block a user