mirror of
https://github.com/MeoProject/lx-music-api-server.git
synced 2025-05-23 19:17:41 +08:00
100 lines
3.3 KiB
Python
100 lines
3.3 KiB
Python
# ----------------------------------------
|
|
# - mode: python -
|
|
# - author: lerdb -
|
|
# - name: refresh_login.py -
|
|
# - project: lx-music-api-server -
|
|
# - license: MIT -
|
|
# ----------------------------------------
|
|
# This file is part of the "lx-music-api-server" project.
|
|
|
|
from common import Httpx, variable
|
|
from common import scheduler
|
|
from common import config
|
|
from common import log
|
|
from common.exceptions import FailedException
|
|
from time import time
|
|
from random import randint
|
|
from .encrypt import eapiEncrypt
|
|
import ujson as json
|
|
|
|
logger = log.log("wy_refresh_login")
|
|
|
|
|
|
def cookieStr2Dict(cookieStr):
|
|
cookieDict = {}
|
|
for line in cookieStr.split(";"):
|
|
if line.strip() == "":
|
|
continue
|
|
try:
|
|
name, value = line.strip().split("=", 1)
|
|
cookieDict[name] = value
|
|
except:
|
|
continue
|
|
return cookieDict
|
|
|
|
|
|
def cookieDict2Str(cookieDict):
|
|
cookieStr = ""
|
|
for name, value in cookieDict.items():
|
|
cookieStr += f"{name}={value}; "
|
|
return cookieStr
|
|
|
|
|
|
async def refresh(cookie:str):
|
|
"""
|
|
网易云刷新登录
|
|
|
|
@param cookie: 网易云音乐cookie
|
|
"""
|
|
cookie = cookieStr2Dict(cookie)
|
|
headers = {
|
|
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0"
|
|
}
|
|
baseUrl = "http://interface.music.163.com/eapi/"
|
|
path = "/api/login/token/refresh"
|
|
header = {
|
|
"osver": cookie.get("osver", "17.4.1"),
|
|
"deviceId": cookie.get("deviceId",""),
|
|
"os": cookie.get("os","ios"),
|
|
"appver": cookie.get("appver", ("9.0.65" if cookie.get("os") != "pc" else "")),
|
|
"versioncode": cookie.get("versioncode", "140"),
|
|
"mobilename": cookie.get("mobilename", ""),
|
|
"buildver": cookie.get("buildver", str(time())[:10]),
|
|
"resolution": cookie.get("resolution", "1920x1080"),
|
|
"__csrf": cookie.get("__csrf", ""),
|
|
"channel": cookie.get("channel", ""),
|
|
"requestId": str(time() * 1000)[:13] + "_" + f"{randint(0, 9999):0>4}",
|
|
}
|
|
if cookie.get("MUSIC_U"):
|
|
header["MUSIC_U"] = cookie.get("MUSIC_U")
|
|
if cookie.get("MUSIC_A"):
|
|
header["MUSIC_A"] = cookie.get("MUSIC_A")
|
|
headers["Cookie"] = cookieDict2Str(header)
|
|
|
|
req = await Httpx.AsyncRequest(
|
|
baseUrl + path[5:],
|
|
{
|
|
"method": "POST",
|
|
"headers": headers,
|
|
"form": eapiEncrypt(path, json.dumps({"header": header, "e_r": False})),
|
|
}
|
|
)
|
|
body = req.json()
|
|
if int(body["code"]) != 200:
|
|
raise FailedException("网易云刷新登录失败(code: " + body["code"] + ")")
|
|
return logger.info("网易云刷新登录成功")
|
|
|
|
if (variable.use_cookie_pool):
|
|
cookies = config.read_config("module.cookiepool.wy")
|
|
for c in cookies:
|
|
ref = c.get("refresh_login") if c.get("refresh_login") else {
|
|
"enable": False,
|
|
"interval": 86400
|
|
}
|
|
if (ref["enable"]):
|
|
scheduler.append("wy_refresh_login_pooled_" + c["cookie"][:32], refresh, ref["interval"], {"cookie": c["cookie"]})
|
|
else:
|
|
c = config.read_config("module.wy.user.cookie")
|
|
ref = config.read_config("module.wy.user.refresh_login")
|
|
if (ref["enable"]):
|
|
scheduler.append("wy_refresh_login", refresh, ref["interval"], {"cookie": c}) |