diff --git a/API_AimeDB.py b/API_AimeDB.py
index ac74c0e..ae64111 100644
--- a/API_AimeDB.py
+++ b/API_AimeDB.py
@@ -5,7 +5,7 @@
import hashlib
import time
import requests
-import json
+from rapidjson import json
import re
# 常量
diff --git a/API_TitleServer.py b/API_TitleServer.py
index 7f71941..e84855b 100644
--- a/API_TitleServer.py
+++ b/API_TitleServer.py
@@ -1,4 +1,4 @@
-# 舞萌DX 2024
+# 舞萌DX
# 标题服务器通讯实现
import zlib
@@ -11,8 +11,10 @@ from ctypes import c_int32
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from Config import *
+import certifi
# 舞萌DX 2024
+# omg it's leaking
AesKey = "n7bx6:@Fg_:2;5E89Phy7AyIcpxEQ:R@"
AesIV = ";;KjR1C3hgB1ovXa"
ObfuscateParam = "BEs2D5vW"
@@ -57,6 +59,8 @@ class AES_PKCS7(object):
return text + padding_text
def getSDGBApiHash(api):
+ # API 的 Hash 的生成
+ # 有空做一下 Hash 的彩虹表?
return hashlib.md5((api+"MaimaiChn"+ObfuscateParam).encode()).hexdigest()
def apiSDGB(data:str, targetApi:str, userAgentExtraData:str, noLog:bool=False, timeout:int=5):
@@ -91,7 +95,7 @@ def apiSDGB(data:str, targetApi:str, userAgentExtraData:str, noLog:bool=False, t
"Expect": "100-continue"
},
content=reqData_deflated,
- verify=False,
+ verify=certifi.where(),
timeout=timeout
)
if not noLog:
@@ -129,16 +133,16 @@ def apiSDGB(data:str, targetApi:str, userAgentExtraData:str, noLog:bool=False, t
raise SDGBRequestError("请求格式错误")
except SDGBResponseError as e:
# 响应解析错误,重试但是只一次
- logger.warning(f"Will now retry. {e}")
+ logger.warning(f"将重试一次 Resp Err: {e}")
retries += 2
time.sleep(2)
except Exception as e:
# 其他错误,重试
- logger.warning(f"Will now retry. {e}")
+ logger.warning(f"将开始重试请求. {e}")
retries += 1
time.sleep(2)
- raise SDGBApiError("Multiple retries failed to make a successful request")
+ raise SDGBApiError("重试多次仍然无法成功请求服务器")
def calcSpecialNumber():
"""使用 c_int32 实现的 SpecialNumber 算法"""
diff --git a/ActionLoginBonus.py b/ActionLoginBonus.py
index a984c91..309fd36 100644
--- a/ActionLoginBonus.py
+++ b/ActionLoginBonus.py
@@ -1,7 +1,7 @@
# ログインボーナス!やったね!
# セガ秘 内部使用のみ(トレードマーク)
-import json
+from rapidjson import json
from loguru import logger
from Config import *
diff --git a/AuthLite_GetUpdate.py b/AuthLite_GetUpdate.py
new file mode 100644
index 0000000..d6a38db
--- /dev/null
+++ b/AuthLite_GetUpdate.py
@@ -0,0 +1 @@
+# It will be finished very soon, I promise
diff --git a/Best50_To_Diving_Fish.py b/Best50_To_Diving_Fish.py
index 333d081..c6cf921 100644
--- a/Best50_To_Diving_Fish.py
+++ b/Best50_To_Diving_Fish.py
@@ -7,14 +7,6 @@ from HelperMusicDB import getMusicTitle
import requests
-# 日志设置
-if False:
- 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)
-
# 水鱼查分器的 API 地址
BASE_URL = 'https://www.diving-fish.com/api/maimaidxprober'
@@ -79,18 +71,14 @@ def maimaiUserMusicDetailToDivingFishFormat(userMusicDetailList) -> list:
divingFishList.append({
'achievements': (currentMusicDetail['achievement'] / 10000), # 水鱼的成绩是 float 而非舞萌的 int
'title': currentMusicTitle,
- 'type': notesType, # 我不理解这为什么不能在后端判断
+ 'type': notesType,
'level_index': currentMusicDetail['level'],
'fc': COMBO_ID_TO_NAME[currentMusicDetail['comboStatus']],
'fs': SYNC_ID_TO_NAME[currentMusicDetail['syncStatus']],
'dxScore': currentMusicDetail['deluxscoreMax'],
})
except:
- logger.error(f"Fish Format Translate Error: {currentMusicDetail}")
-
- # debug output fish list to file
- #with open("fishList.txt", "w", encoding="utf-8") as f:
- # f.write(str(divingFishList))
+ logger.error(f"无法将 UserMusic 翻译成水鱼格式: {currentMusicDetail}")
return divingFishList
@@ -106,7 +94,7 @@ def isVaildFishToken(importToken:str):
def implUserMusicToDivingFish(userId:int, fishImportToken:str):
'''上传所有成绩到水鱼的参考实现,返回成绩的数量或者False'''
- logger.info("开始上传舞萌成绩到水鱼查分器!")
+ logger.info("开始尝试上传舞萌成绩到水鱼查分器!")
userFullMusicDetailList = getUserFullMusicDetail(userId)
logger.info("成功得到成绩!转换成水鱼格式..")
divingFishData = maimaiUserMusicDetailToDivingFishFormat(userFullMusicDetailList)
diff --git a/ChargeTicket.py b/ChargeTicket.py
index 3ee6deb..f27cbe1 100644
--- a/ChargeTicket.py
+++ b/ChargeTicket.py
@@ -1,5 +1,5 @@
# 倍票相关 API 的实现
-import json
+from rapidjson import json
import pytz
from datetime import datetime, timedelta
diff --git a/ForceLogout.py b/ForceLogout.py
index d203b7c..3453345 100644
--- a/ForceLogout.py
+++ b/ForceLogout.py
@@ -5,7 +5,7 @@ from Config import *
from API_TitleServer import *
from GetPreview import apiGetUserPreview
from HelperLogInOut import apiLogout
-import json
+from rapidjson import json
from loguru import logger
import time
from datetime import datetime
@@ -25,10 +25,10 @@ def getHumanReadableTime(unixTime):
def getMaimaiUNIXTime(mmddhhmmss, year=2025):
"""
解析用户输入的 MMDDHHMMSS 格式的时间,返回 Unix 时间戳
- 时间会被推后一个小时,因为舞萌貌似是 UTC+9
+ 时间会被推后一个小时,因为舞萌貌似是 UTC+9?
"""
#date_time_str = f"{year}{mmddhhmmss}"
- # 舞萌需要把小时按往后推一个小时来计算,加上一个小时
+ # 加上一个小时
date_time_str = f"{year}{mmddhhmmss[:4]}{int(mmddhhmmss[4:6])+1:02}{mmddhhmmss[6:]}"
date_time_obj = datetime.strptime(date_time_str, '%Y%m%d%H%M%S')
# 将 datetime 对象转换为 Unix 时间戳
diff --git a/GetPreview.py b/GetPreview.py
index 9932771..3a2a462 100644
--- a/GetPreview.py
+++ b/GetPreview.py
@@ -1,6 +1,6 @@
# 获取用户简略预览数据的 API 实现,此 API 无需任何登录即可调取
-import json
+from rapidjson import json
from API_TitleServer import apiSDGB
from Config import *
import time
@@ -19,8 +19,12 @@ if __name__ == "__main__":
userId = testUid2
print(apiGetUserPreview(userId))
+###
+### 以下仅留作归档
+###
def crawlAllUserPreview():
+ """omg it's a evil crawler"""
# 这里设置开始和结束的 UserId
BeginUserId = 11000000
EndUserId = 12599999
diff --git a/HelperFullPlay.py b/HelperFullPlay.py
index d6abf95..3beb4d7 100644
--- a/HelperFullPlay.py
+++ b/HelperFullPlay.py
@@ -1,4 +1,4 @@
-import json
+from rapidjson import json
from loguru import logger
from Config import *
diff --git a/HelperGetUserMusicDetail.py b/HelperGetUserMusicDetail.py
index f6cac3f..e3bc97a 100644
--- a/HelperGetUserMusicDetail.py
+++ b/HelperGetUserMusicDetail.py
@@ -2,7 +2,7 @@
from API_TitleServer import *
from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
from Config import *
-import json
+from rapidjson import json
from HelperMusicDB import getMusicTitle
from loguru import logger
import sys
diff --git a/HelperGetUserThing.py b/HelperGetUserThing.py
index c19898b..7d0e850 100644
--- a/HelperGetUserThing.py
+++ b/HelperGetUserThing.py
@@ -1,6 +1,6 @@
# 获取用户数据的 API 实现
from loguru import logger
-import json
+from rapidjson import json
from API_TitleServer import apiSDGB
def apiGetUserData(userId:int) -> str:
diff --git a/HelperLogInOut.py b/HelperLogInOut.py
index 7a8671d..fa3ad63 100644
--- a/HelperLogInOut.py
+++ b/HelperLogInOut.py
@@ -1,7 +1,7 @@
# 登录·登出实现
# 一般作为模块使用,但也可以作为 CLI 程序运行以强制登出账号。
-import json
+from rapidjson import json
import time
from loguru import logger
diff --git a/HelperMisc.py b/HelperMisc.py
index 33eea82..229738b 100644
--- a/HelperMisc.py
+++ b/HelperMisc.py
@@ -1,6 +1,6 @@
# 杂项助手函数
# 主要用于当作模块使用的时候的一些生活质量提升
-import json
+from rapidjson import json
from loguru import logger
from HelperGetUserThing import implGetUser_
import unicodedata
diff --git a/HelperUploadUserPlayLog.py b/HelperUploadUserPlayLog.py
index 931fe76..f1a4d8c 100644
--- a/HelperUploadUserPlayLog.py
+++ b/HelperUploadUserPlayLog.py
@@ -1,6 +1,6 @@
# 上传一个占位用的游玩记录的 API 实现
-import json
+from rapidjson import json
import pytz
import time
import random
diff --git a/Standalone/DummyAimeDBServer.py b/Standalone/DummyAimeDBServer.py
index 308af94..7990bea 100644
--- a/Standalone/DummyAimeDBServer.py
+++ b/Standalone/DummyAimeDBServer.py
@@ -29,7 +29,7 @@ from fastapi.responses import (
PlainTextResponse,
JSONResponse
)
-import json
+from rapidjson import json
import uvicorn
from loguru import logger
diff --git a/Standalone/Script_GenerateMusicDB.py b/Standalone/Script_GenerateMusicDB.py
index 491b159..dd5105c 100644
--- a/Standalone/Script_GenerateMusicDB.py
+++ b/Standalone/Script_GenerateMusicDB.py
@@ -1,7 +1,7 @@
# 感谢伟大的 Diving-Fish 让我被迫直面恐惧
import xml.dom.minidom as minidom
from pathlib import Path
-import json
+from rapidjson import json
from loguru import logger
def makeMusicDBJson():
diff --git a/Standalone/UI.py b/Standalone/UI.py
index 75e7e96..e67cc49 100644
--- a/Standalone/UI.py
+++ b/Standalone/UI.py
@@ -1,5 +1,5 @@
import sys
-import json
+from rapidjson import json
from PyQt6.QtWidgets import (
QApplication, QMainWindow, QWidget, QVBoxLayout, QLineEdit, QTextEdit, QPushButton, QLabel, QHBoxLayout