# 获取用户成绩的各种实现 from API_TitleServer import * from HelperLogInOut import apiLogin, apiLogout, generateTimestamp from Config import * import json from HelperMusicDB import getMusicTitle from loguru import logger import sys # 日志设置 #log_level = "DEBUG" #log_format = "{time:YYYY-MM-DD HH:mm:ss.SSS zz} | {level: <8} | Line {line: >4} ({file}): {message}" #logger.add(sys.stderr, level=log_level, format=log_format, colorize=True, backtrace=True, diagnose=True) #logger.add("file.log", level=log_level, format=log_format, colorize=False, backtrace=True, diagnose=True) def getUserMusicDetail(userId:int, nextIndex:int=0, maxCount:int=50) -> dict: '''获取用户的成绩的API''' data = json.dumps({ "userId": int(userId), "nextIndex": nextIndex, "maxCount": maxCount }) return json.loads(apiSDGB(data, "GetUserMusicApi", userId)) def getUserFullMusicDetail(userId: int) -> dict: '''获取用户的全部成绩''' userMusicDetailList_current = [] nextIndex:int|None = None # 初始化 nextIndex while nextIndex != 0 or nextIndex is None: #只要还有nextIndex就一直获取获取 userMusicResponse = getUserMusicDetail(userId, nextIndex or 0) nextIndex = userMusicResponse['nextIndex'] logger.info(f"NextIndex: {nextIndex}") for currentMusic in userMusicResponse['userMusicList']: for currentMusicDetail in currentMusic['userMusicDetailList']: if not currentMusicDetail['playCount'] > 0: continue userMusicDetailList_current.append(currentMusicDetail) return userMusicDetailList_current def parseUserFullMusicDetail(userFullMusicDetailList: list) -> dict: '''解析用户的全部成绩''' musicDetailList = [] for currentMusicDetail in userFullMusicDetailList: musicDetailList.append({ '歌名': getMusicTitle(currentMusicDetail['musicId']), '难度': currentMusicDetail['level'], '分数': currentMusicDetail['achievement'] / 10000, 'DX分数': currentMusicDetail['deluxscoreMax'] }) return musicDetailList if __name__ == '__main__': userId = testUid5 currentLoginTimestamp = generateTimestamp() loginResult = apiLogin(currentLoginTimestamp, userId) if loginResult['returnCode'] != 1: logger.info("登录失败") exit() try: userFullMusicDetailList = getUserFullMusicDetail(userId) parsedUserFullMusicDetail = parseUserFullMusicDetail(userFullMusicDetailList) logger.info(parsedUserFullMusicDetail) finally: #logger.error(f"Error: {e}") logger.info(apiLogout(currentLoginTimestamp, userId))