更换点歌API

This commit is contained in:
liuwei
2026-01-06 11:47:25 +08:00
parent c0be2db973
commit 5f723f65f7
2 changed files with 64 additions and 6 deletions

View File

@@ -403,21 +403,50 @@ class GuessSongPlugin(MessagePluginInterface):
self.LOG.error(f"歌曲播放链接为空")
return {}
# 获取真实的播放链接(跟随重定向)
real_play_url = self._get_real_url(play_url)
real_data_url = self._get_real_url(data_url)
real_singer_pic = self._get_real_url(singer_pic)
# 返回完整的歌曲信息
self.LOG.info(f"成功获取歌曲: {singer_name} - {song_name}")
self.LOG.debug(f"原始URL: {play_url}")
self.LOG.debug(f"真实URL: {real_play_url}")
return {
"song_name": song_name,
"singer_name": singer_name,
"play_url": play_url,
"singer_pic": singer_pic,
"data_url": data_url
"play_url": real_play_url,
"singer_pic": real_singer_pic,
"data_url": real_data_url
}
except Exception as e:
self.LOG.error(f"获取随机歌曲出错: {e}")
return {}
def _get_real_url(self, redirect_url: str) -> str:
"""跟随重定向获取真实URL"""
try:
if not redirect_url:
return ""
# 发送HEAD请求不跟随重定向获取真实URL
response = requests.head(redirect_url, allow_redirects=True, verify=False, timeout=10)
# 返回最终的URL重定向后的真实地址
if response.status_code in [200, 301, 302, 303, 307, 308]:
real_url = response.url
self.LOG.debug(f"URL重定向: {redirect_url} -> {real_url}")
return real_url
else:
self.LOG.warning(f"获取真实URL失败状态码: {response.status_code}")
return redirect_url
except Exception as e:
self.LOG.error(f"获取真实URL出错: {e}")
return redirect_url
async def _send_song_clip(self, bot: WechatAPIClient, song_info: Dict[str, Any], session_id: str) -> bool:
"""发送歌曲片段"""
try:

View File

@@ -176,20 +176,49 @@ class MusicPlugin(MessagePluginInterface):
self.LOG.error(f"歌曲播放链接为空")
return {}
# 获取真实的播放链接(跟随重定向)
real_play_url = self._get_real_url(play_url)
real_data_url = self._get_real_url(data_url)
real_singer_pic = self._get_real_url(singer_pic)
self.LOG.info(f"成功获取歌曲: {result_singer_name} - {result_song_name}")
self.LOG.debug(f"原始URL: {play_url}")
self.LOG.debug(f"真实URL: {real_play_url}")
return {
"song_name": result_song_name,
"singer_name": result_singer_name,
"play_url": play_url,
"singer_pic": singer_pic,
"data_url": data_url
"play_url": real_play_url,
"singer_pic": real_singer_pic,
"data_url": real_data_url
}
except Exception as e:
self.LOG.error(f"搜索歌曲出错: {e}")
return {}
def _get_real_url(self, redirect_url: str) -> str:
"""跟随重定向获取真实URL"""
try:
if not redirect_url:
return ""
# 发送HEAD请求跟随重定向获取真实URL
response = requests.head(redirect_url, allow_redirects=True, verify=False, timeout=10)
# 返回最终的URL重定向后的真实地址
if response.status_code in [200, 301, 302, 303, 307, 308]:
real_url = response.url
self.LOG.debug(f"URL重定向: {redirect_url} -> {real_url}")
return real_url
else:
self.LOG.warning(f"获取真实URL失败状态码: {response.status_code}")
return redirect_url
except Exception as e:
self.LOG.error(f"获取真实URL出错: {e}")
return redirect_url
async def url_to_base64(self, play_url: str):
async with aiohttp.ClientSession() as session:
async with session.get(play_url) as resp: