同步更改-第一次公开测试

This commit is contained in:
Kohaku
2025-03-17 12:51:29 +08:00
parent a87a459ac3
commit f1df2839a3
4 changed files with 82 additions and 20 deletions

View File

@@ -5,7 +5,13 @@ from loguru import logger
from HelperGetUserMusicDetail import getUserFullMusicDetail
from HelperMusicDB import getMusicTitle
import requests
import rapidjson as json
class divingFishAuthFailError(Exception):
pass
class divingFishCommError(Exception):
pass
# 水鱼查分器的 API 地址
BASE_URL = 'https://www.diving-fish.com/api/maimaidxprober'
@@ -44,20 +50,32 @@ def apiDivingFish(method:str, apiPath:str, importToken:str, data=None):
logger.info(f'水鱼查分器请求结果:{response.status_code}')
logger.debug(f'水鱼查分器回应:{response.text}')
if response.status_code != 200:
return False
return response.json()
finalResponseTextDecode = response.text.encode('utf-8').decode('unicode_escape')
logger.debug(f'水鱼查分器回应解码后:{finalResponseTextDecode}')
match response.status_code:
case 200:
return response.json()
case 500:
raise divingFishAuthFailError
case _:
raise divingFishCommError
def getFishRecords(importToken: str) -> dict:
'''获取水鱼查分器的成绩'''
return apiDivingFish('GET', '/player/records', importToken)
def updateFishRecords(importToken: str, records: list[dict]) -> dict:
'''上传成绩到水鱼查分器'''
return apiDivingFish('POST', '/player/update_records', importToken, records)
def resetFishRecords(fishImportToken:str):
'''重置水鱼查分器的用户数据'''
return apiDivingFish('DELETE', '/player/delete_records', fishImportToken)
def getFishUserInfo(userQQ:int):
'''按QQ获取水鱼查分器的用户信息'''
return apiDivingFish('POST', '/query/player', "", {"qq": userQQ})
def maimaiUserMusicDetailToDivingFishFormat(userMusicDetailList) -> list:
'''舞萌的 UserMusicDetail 成绩格式转换成水鱼的格式'''
divingFishList = []
@@ -97,22 +115,46 @@ def isVaildFishToken(importToken:str):
有效返回 True无效返回 False'''
result = apiDivingFish('GET', '/player/records', importToken)
logger.debug(f"水鱼查分器 Token 检查结果:{result}")
if result == False:
logger.info("检查出了一个无效的水鱼token")
if result:
return True
return False
def implGetUserCurrentDXRating(userQQ:int):
'''获取用户当前的 DX RATING'''
try:
playerData = getFishUserInfo(userQQ)
playerRating = playerData['rating']
logger.info(f"用户 {userQQ} 的 DX RATING 是 {playerRating}")
except Exception as e:
logger.warning(f"无法获取用户 {userQQ} 的 DX RATING: {e}")
return False
return True
return playerRating
def implUserMusicToDivingFish(userId:int, fishImportToken:str):
'''上传所有成绩到水鱼的参考实现返回成绩的数量或者False'''
'''上传所有成绩到水鱼的参考实现
返回一个 int 的 ErrorCode。
0: Success
1: Get User Music Fail
2: Auth Fail
3: Comm Error
'''
logger.info("开始尝试上传舞萌成绩到水鱼查分器!")
userFullMusicDetailList = getUserFullMusicDetail(userId)
logger.info("成功得到成绩!转换成水鱼格式..")
divingFishData = maimaiUserMusicDetailToDivingFishFormat(userFullMusicDetailList)
logger.info("转换成功!开始上传水鱼..")
if not updateFishRecords(fishImportToken, divingFishData):
logger.error("上传失败!")
return False
return len(divingFishData)
try:
userFullMusicDetailList = getUserFullMusicDetail(userId)
logger.info("成功得到成绩!转换成水鱼格式..")
divingFishData = maimaiUserMusicDetailToDivingFishFormat(userFullMusicDetailList)
logger.info("转换成功!开始上传水鱼..")
except Exception as e:
logger.error(f"获取成绩失败!{e}")
return 1
try:
updateFishRecords(fishImportToken, divingFishData)
except divingFishAuthFailError:
logger.error("水鱼查分器认证失败!")
return 2
except divingFishCommError:
logger.error("水鱼查分器通讯失败!")
return 3
def generateDebugTestScore():
'''生成测试成绩'''
@@ -137,8 +179,7 @@ def generateDebugTestScore():
if __name__ == '__main__':
if True:
userId = testUid2
importToken = testImportToken
importToken = "b230686d65c90fae594162707304bc66b5322a4591e56870a7ac6fd8e1b5244404e4973d194c4a87a31a8177d2f69150674c2924484808b69a2388ab3d0db7b7"
#currentLoginTimestamp = generateTimestamp()
#implUserMusicToDivingFish(userId, importToken)
implResetFishUser(importToken)
implGetUserCurrentDXRating(1723464362)