diff --git a/common/default_config.py b/common/default_config.py index 614188d..f69328e 100644 --- a/common/default_config.py +++ b/common/default_config.py @@ -123,6 +123,9 @@ module: enable: false interval: 86000 cdnaddr: http://ws.stream.qqmusic.qq.com/ + vkey_api: # 第三方Vkey获取API + use_vkey_api: false + vkey_api_url: "xxx" wy: # 网易云音乐相关配置 user: # 账号cookie数据,可以通过浏览器获取,需要vip账号来获取会员歌曲,如果没有请留为空值 diff --git a/modules/tx/player.py b/modules/tx/player.py index f6a2292..0690062 100644 --- a/modules/tx/player.py +++ b/modules/tx/player.py @@ -8,7 +8,7 @@ # This file is part of the "lx-music-api-server" project. from common.exceptions import FailedException -from common import config, utils, variable +from common import config, utils, variable, Httpx from .musicInfo import getMusicInfo from .utils import tools from .utils import signRequest @@ -16,9 +16,33 @@ import random createObject = utils.CreateObject +index_map = { + 'dolby': 4, + 'master': 3 +} + +async def vkeyUrl(q, b): + apiNode = config.read_config("module.tx.vkey_api.vkey_api_url") + filename = b['track_info']['file']['media_mid'] + if (q in index_map.keys()): + filename = b['track_info']['vs'][index_map[q]] + if (not filename): raise FailedException('未找到该音质') + filename = f"{tools.fileInfo[q]['h']}{filename}{tools.fileInfo[q]['e']}" + url = apiNode + f"?filename={filename}&guid={config.read_config('module.tx.vkeyserver.guid')}&uin={config.read_config('module.tx.vkeyserver.uin')}" + req = await Httpx.AsyncRequest(url) + body = req.json() + purl = body['data'][0]['purl'] + + return { + 'url': tools.cdnaddr + purl, + 'quality': q + } + async def url(songId, quality): infoBody = await getMusicInfo(songId) strMediaMid = infoBody['track_info']['file']['media_mid'] + if (config.read_config("module.tx.vkey_api.use_vkey_api")): + return await vkeyUrl(quality, infoBody) user_info = config.read_config('module.tx.user') if (not variable.use_cookie_pool) else random.choice(config.read_config('module.cookiepool.tx')) requestBody = { 'req_0': {