Compare commits

...

10 Commits

Author SHA1 Message Date
mokurin000
2a60088303 feat: unlock all partners 2025-08-14 23:09:39 +08:00
mokurin000
2176130d10 feat: get user data and exit 2025-08-12 13:58:43 +08:00
mokurin000
2a98362199 docs: fix params show 2025-08-11 22:17:23 +08:00
mokurin000
28926bc14d feat: unlock multiple partners 2025-08-11 22:12:54 +08:00
mokurin000
65eced4fca docs: note on different years 2025-08-10 17:57:53 +08:00
mokurin000
1f09a7538c docs: SDEZ 1.56 characters 2025-08-10 16:48:38 +08:00
mokurin000
1eba8453a5 feat: example api endpoints 2025-08-03 18:42:24 +08:00
mokurin000
f6a3b55507 chore: GetAny 2025-08-03 12:32:42 +08:00
mokurin000
626f33097b chore: add get b50 2025-07-31 21:55:23 +08:00
mokurin000
e1c51f255f feat: userdata fetch 2025-07-31 10:05:59 +08:00
9 changed files with 164 additions and 19 deletions

View File

@@ -91,6 +91,7 @@ def apiSDGB(
) -> str:
"""
舞萌DX 2025 API 通讯用函数
:param data: 请求数据
:param targetApi: 使用的 API
:param userAgentExtraData: UA 附加信息机台相关则为狗号如A63E01E9564用户相关则为 UID

View File

@@ -7,18 +7,22 @@ from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
from HelperUnlockThing import implUnlockThing
def implUnlockSingleItem(
itemId: int,
def implUnlockMultiItem(
itemKind: int,
userId: int,
currentLoginTimestamp: int,
currentLoginResult,
*itemIds: int,
) -> str:
if not itemIds:
logger.info("无操作,跳过处理!")
return
"""
发单个东西,比如搭档 10
"""
userItemList = [
{"itemKind": itemKind, "itemId": itemId, "stock": 1, "isValid": True}
for itemId in itemIds
]
unlockThingResult = implUnlockThing(
userItemList, userId, currentLoginTimestamp, currentLoginResult
@@ -51,8 +55,15 @@ if __name__ == "__main__":
logger.info("登录失败")
exit()
try:
items = range(11, 33) # all partners
logger.info(
implUnlockSingleItem(14, 10, userId, currentLoginTimestamp, loginResult)
implUnlockMultiItem(
10,
userId,
currentLoginTimestamp,
loginResult,
*items,
)
)
logger.info(apiLogout(currentLoginTimestamp, userId))
finally:

View File

@@ -190,3 +190,10 @@ def generateDebugTestScore():
"syncStatus": 4,
},
]
if __name__ == "__main__":
userId = int(input("userId: "))
fishImportToken = input("DivingFish Token: ")
implUserMusicToDivingFish(userId, fishImportToken)

View File

@@ -1,8 +1,8 @@
regionId = 22
regionName = "山东"
placeId = 3490
placeName = "赛博时空枣庄市中"
clientId = "A63E01E9564"
regionId = 13
regionName = "河南"
placeId = 2411
placeName = "智游星期六河南郑州"
clientId = "A63E01E6154"
useProxy = False
proxyUrl = "http://100.104.133.113:33080"

31
GetAny.py Normal file
View File

@@ -0,0 +1,31 @@
# 获取用户简略预览数据的 API 实现,此 API 无需任何登录即可调取
from loguru import logger
import rapidjson as json
from API_TitleServer import apiSDGB
def apiGetAny(
userId,
apiName: str,
noLog: bool = False,
) -> str:
data = json.dumps({"userId": int(userId)})
preview_result = apiSDGB(data, apiName, userId, noLog)
return preview_result
# CLI 示例
if __name__ == "__main__":
userId = input("请输入用户 ID")
# userId = testUid8
# print(apiGetAny(userId, "GetUserRatingApi"))
# print(apiGetAny(userId, "GetUserPreviewApi"))
for type in ["course", "extend", "character", "activity", "charge", "option", "region"]:
try:
data = apiGetAny(userId, f"GetUser{type.title()}Api", noLog=True)
except Exception as e:
logger.error(f"failed when scraping {type}: {e}")
else:
print(f"{type}:", json.dumps(json.loads(data), ensure_ascii=False, indent=4))

18
GetRating.py Normal file
View File

@@ -0,0 +1,18 @@
# 获取用户简略预览数据的 API 实现,此 API 无需任何登录即可调取
import rapidjson as json
from API_TitleServer import apiSDGB
def apiGetUserPreview(userId, noLog: bool = False) -> str:
data = json.dumps({"userId": int(userId)})
preview_result = apiSDGB(data, "GetUserRatingApi", userId, noLog)
return preview_result
# CLI 示例
if __name__ == "__main__":
userId = input("请输入用户 ID")
# userId = testUid8
print(apiGetUserPreview(userId))
print(apiSDGB("{}", "Ping", userId, False))

34
GetUserAll.py Normal file
View File

@@ -0,0 +1,34 @@
from loguru import logger
from HelperFullPlay import implFullPlayAction
from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
from MyConfig import testUid8
if __name__ == "__main__":
userId = int(input("type user id: ").strip() or "0") or testUid8
currentLoginTimestamp = generateTimestamp()
loginResult = apiLogin(currentLoginTimestamp, userId)
if loginResult["returnCode"] != 1:
logger.info("登录失败")
exit()
try:
items = [23]
musicData = {
"musicId": 11538, # Amber Chronicle
"level": 0,
"playCount": 1,
"achievement": 0,
"comboStatus": 0,
"syncStatus": 0,
"deluxscoreMax": 0,
"scoreRank": 0,
"extNum1": 0,
}
implFullPlayAction(
userId, currentLoginTimestamp, loginResult, musicData, {}, debugMode=True
)
logger.info(apiLogout(currentLoginTimestamp, userId))
finally:
logger.info(apiLogout(currentLoginTimestamp, userId))
# logger.warning("Error")

30
GetUserData.py Normal file
View File

@@ -0,0 +1,30 @@
# 获取用户简略预览数据的 API 实现,此 API 无需任何登录即可调取
from loguru import logger
import rapidjson as json
from API_TitleServer import apiSDGB
from HelperLogInOut import apiLogin, apiLogout, generateTimestamp
from MyConfig import testUid8
def apiGetUserData(userId, noLog: bool = False) -> str:
data = json.dumps({"userId": int(userId)})
preview_result = apiSDGB(data, "GetUserDataApi", userId, noLog)
return preview_result
if __name__ == "__main__":
userId = int(input("type user id: ").strip() or "0") or testUid8
currentLoginTimestamp = generateTimestamp()
loginResult = apiLogin(currentLoginTimestamp, userId)
if loginResult["returnCode"] != 1:
logger.info("登录失败")
exit()
try:
logger.info(apiGetUserData(userId, noLog=False))
logger.info(apiLogout(currentLoginTimestamp, userId))
finally:
logger.info(apiLogout(currentLoginTimestamp, userId))
# logger.warning("Error")

View File

@@ -60,25 +60,38 @@ itemKindzhCNDict = {
# "STRONG": "MUSIC_STRONG",
}
# Splash = 2020
# UNiVERSE = 2022
# FESTiVAL = 2023
# BUDDiES = 2024
# PRiSM = 2025
partnerList = {
"1": "迪拉熊",
"17": "青柠熊&柠檬熊",
"29": "青柠熊柠檬熊2024",
"11": "乙姫",
"12": "拉兹",
"13": "雪纺",
"14": "莎露朵",
"15": "夏玛",
"16": "咪璐库",
"18": "乙姫Splash",
"19": "夏玛UNiVERSE",
"20": "咪璐库UNiVERSE",
"21": "小咪璐库",
"22": "百合咲美香",
"28": "乙姫2024",
"12": "拉兹",
"23": "拉兹2023",
"30": "拉兹 (BUDDiES)",
"13": "雪纺",
"24": "雪纺2023",
"14": "莎露朵",
"25": "莎露朵2023",
"31": "莎露朵 (PRiSM)",
"15": "夏玛",
"19": "夏玛UNiVERSE",
"16": "咪璐库",
"21": "小咪璐库",
"32": "咪璐库 (PRiSM)",
"20": "咪璐库UNiVERSE",
"22": "百合咲美香",
"26": "黒姫",
"27": "俊达萌",
"28": "乙姫2024",
"29": "青柠熊柠檬熊2024",
"33": "超天酱",
}
for id, partner in partnerList.items():
print()