2025-03-28 16:51:41 +08:00

59 lines
1.8 KiB
Python

# ----------------------------------------
# - mode: python -
# - author: helloplhm-qwq -
# - name: player.py -
# - project: lx-music-api-server -
# - license: MIT -
# ----------------------------------------
# This file is part of the "lx-music-api-server" project.
from common.exceptions import FailedException
from common import config, utils, variable
from .musicInfo import getMusicInfo
from .utils import tools
from .utils import signRequest
import random
createObject = utils.CreateObject
async def url(songId, quality):
infoBody = await getMusicInfo(songId)
strMediaMid = infoBody['track_info']['file']['media_mid']
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": {
"module": "music.vkey.GetVkey",
"method": "UrlGetVkey",
"param": {
"filename": [f"{tools.fileInfo[quality]['h']}{strMediaMid}{tools.fileInfo[quality]['e']}"],
"guid": config.read_config("module.tx.vkeyserver.guid"),
"songmid": [songId],
"songtype": [0],
"uin": str(user_info["uin"]),
"loginflag": 1,
"platform": "20",
},
},
"comm": {
"qq": str(user_info["uin"]),
"authst": user_info["qqmusic_key"],
"ct": "26",
"cv": "2010101",
"v": "2010101"
},
}
req = await signRequest(requestBody)
body = createObject(req.json())
data = body.req.data.midurlinfo[0]
url = data['purl']
if (not url):
raise FailedException('failed')
resultQuality = data['filename'].split('.')[0][:4]
return {
'url': tools.cdnaddr + url,
'quality': tools.qualityMapReverse[resultQuality]
}