Compare commits

10 Commits

Author SHA1 Message Date
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
7e525e0c7e feat: add isNew func 2025-02-05 16:20:02 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
de070a6ecf 从 settings 引入改到一行中 2025-02-05 16:13:00 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
4cbcafc062 fix: worng in tickrt return 2025-02-05 11:53:14 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
c74e539d60 fix: no return in charge() 2025-01-25 11:37:04 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
a526ea4f81 fix: wrong in music 2025-01-25 11:20:13 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
81c4eb3ef3 feat: add process and remove functions in single file 2025-01-25 11:20:03 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
249d815675 fix: random music 2025-01-25 11:19:14 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
0d27140dee feat: move requests to httpx 2025-01-25 10:57:28 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
fd2f93e937 code format 2025-01-25 01:11:27 +08:00
7a1dd609-d238-4580-9d5f-ee8412b0f5bc
efc874ab9f add random music data 2025-01-19 08:45:58 +08:00
17 changed files with 1595 additions and 1576 deletions

View File

@@ -1,12 +1,15 @@
# This file contains the config of the whole project. import random
# DO NOT share your crtical info to others.
# Change the file name from .settings.py to settings.py.
# 上传的乐曲成绩
# 此成绩将覆盖原有成绩
music_data = ({ music_data = ({
"musicId":834,"level":4,"playCount":10,"achievement":912231,"comboStatus":0,"syncStatus":0,"deluxscoreMax":2106,"scoreRank":5, "extNum1": 0 "musicId": 11451,
"level": 0,
"playCount": random.randint(10, 20),
"achievement": random.randint(995000, 1000000),
"comboStatus": random.randint(0, 2),
"syncStatus": 0,
"deluxscoreMax": random.randint(150, 200),
"scoreRank": 11,
"extNum1": 0
}) })
# 机厅信息 # 机厅信息

View File

@@ -6,12 +6,7 @@ import random
from sdgb import sdgb_api from sdgb import sdgb_api
from datetime import datetime, timedelta from datetime import datetime, timedelta
from settings import music_data from settings import music_data, regionId, regionName, clientId, placeId, placeName
from settings import regionId
from settings import regionName
from settings import clientId
from settings import placeId
from settings import placeName
from login import login from login import login
from logout import logout from logout import logout
@@ -219,6 +214,24 @@ def music(userId, bonus_list):
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId)) user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
data = json.dumps({
"userId": int(userId),
"nextIndex": musicId,
"maxCount": 1
})
user_music = json.loads(sdgb_api(data, "GetUserMusicApi", userId))
isNew = "0"
try:
for item in user_music['userMusicList'][0]['userMusicDetailList']:
if item['musicId'] == musicId and item['level'] == level:
isNew = "1"
break
else:
continue
except:
pass
# UserAll # UserAll
data = json.dumps({ data = json.dumps({
@@ -367,7 +380,7 @@ def music(userId, bonus_list):
"isNewMapList": "", "isNewMapList": "",
"isNewLoginBonusList": "0" * len(bonus_list), "isNewLoginBonusList": "0" * len(bonus_list),
"isNewItemList": "", "isNewItemList": "",
"isNewMusicDetailList": "1", "isNewMusicDetailList": isNew,
"isNewCourseList": "0", "isNewCourseList": "0",
"isNewFavoriteList": "", "isNewFavoriteList": "",
"isNewFriendSeasonRankingList": "" "isNewFriendSeasonRankingList": ""

View File

@@ -1,17 +0,0 @@
import json
from sdgb import sdgb_api
def character(userId):
data = json.dumps({
"userId": int(userId),
"nextIndex":10000000000,
"maxCount":1000000000
})
character_result = json.loads(sdgb_api(data, "GetUserCharacterApi", userId))
return character_result
if __name__ == "__main__":
print(character(int(input())))

View File

@@ -1,13 +0,0 @@
import json
from sdgb import sdgb_api
def charge(userId):
data = json.dumps({
"userId": userId,
})
charge_result = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
return charge_result

View File

@@ -4,9 +4,7 @@ import pytz
from sdgb import sdgb_api from sdgb import sdgb_api
from datetime import datetime from datetime import datetime
from settings import regionId from settings import regionId, clientId, placeId
from settings import clientId
from settings import placeId
def login(userId, timestamp): def login(userId, timestamp):
data = json.dumps({ data = json.dumps({

View File

@@ -4,9 +4,7 @@ import pytz
from sdgb import sdgb_api from sdgb import sdgb_api
from datetime import datetime from datetime import datetime
from settings import regionId from settings import regionId, clientId, placeId
from settings import clientId
from settings import placeId
def logout(userId, timestamp): def logout(userId, timestamp):
data = json.dumps({ data = json.dumps({

118
main.py
View File

@@ -5,123 +5,17 @@ from datetime import datetime
from flask import Flask,request,redirect,jsonify from flask import Flask,request,redirect,jsonify
from flask_cors import CORS from flask_cors import CORS
from sdgb import qr_api
from logout import logout from logout import logout
from login import login from login import login
from ticket import get_ticket from process import *
from charge import charge
from map import map
from userdata import userdata
from character import character
from sdgb import sdgb_api from sdgb import sdgb_api, qr_api
from mapstock import music_with_retry as mapstock from mapstock import music_with_retry as mapstock
from music import music_with_retry as music from music import music_with_retry as music
from unlock_all import music_with_retry as unlock from unlock_all import music_with_retry as unlock
from map_clear import music_with_retry as map_clear from map_clear import music_with_retry as map_clear
from bonus9 import music_with_retry as login_bonus from bonus9 import music_with_retry as login_bonus
def find_map(mapId, user_map_data):
for single in user_map_data:
if single["mapId"] == mapId:
return single
else:
continue
def isNewMapList(mapId, user_map_data):
if ('{"mapId": ' + str(mapId)) in user_map_data:
return 0
else:
return 1
def item(item_data, user_character_list):
item_list = []
character_list = []
for single in item_data:
if single['kind'] == 9:
if ('{"characterId": ' + str(single['id'])) in user_character_list:
pass
else:
data = ({
"characterId":single['id'],
"level":1,
"awakening":0,
"useCount": 0
})
character_list.append(data)
else:
data = ({
"itemKind": single['kind'],
"itemId": single['id'],
"stock": 1,
"isValid": True
})
item_list.append(data)
return item_list, character_list, item_data[-1]['distance']
def bonus_list_gen(userId):
with open('login_bonus.json') as file:
cache = json.load(file)
bonus_data = []
for item in cache:
bonus_data.append(item['id'])
cache = []
data = json.dumps({
"userId": int(userId),
"nextIndex":0,
"maxCount":2000
})
user_bonus = json.loads(sdgb_api(data, "GetUserLoginBonusApi", userId))['userLoginBonusList']
for item in user_bonus:
cache.append(item['bonusId'])
bonus_list_unexist = list(set(bonus_data) - set(cache))
bonus_list = []
for item in user_bonus:
if item['isComplete'] == False:
if item['bonusId'] in [12, 29, 30, 38, 43, 604]:
data = ({
"bonusId": item['bonusId'],
"point": 4,
"isCurrent": item['isCurrent'],
"isComplete": False
})
else:
data = ({
"bonusId": item['bonusId'],
"point": 9,
"isCurrent": item['isCurrent'],
"isComplete": False
})
bonus_list.append(data)
elif item['bonusId'] == 999:
data = ({
"bonusId": 999,
"point": item['point'] // 10 * 10 + 9,
"isCurrent": item['isCurrent'],
"isComplete": False
})
bonus_list.append(data)
else:
pass
for item in bonus_list_unexist:
if item in [12, 29, 30, 38, 43, 604]:
data = ({
"bonusId": item,
"point": 4,
"isCurrent": False,
"isComplete": False
})
else:
data = ({
"bonusId": item,
"point": 9,
"isCurrent": False,
"isComplete": False
})
bonus_list.append(data)
return bonus_list
app = Flask(__name__) app = Flask(__name__)
app.json.sort_keys = False app.json.sort_keys = False
app.json.ensure_ascii = False app.json.ensure_ascii = False
@@ -144,7 +38,7 @@ def bad_request(e):
@app.route("/") @app.route("/")
def index(): def index():
return jsonify({"status": "200 OK", "timestamp": int(time.time()), "info": "Project Fragrance","availableApi": ["qr", "ticket", "mapstock", "unlock", "map"], "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8')}), 200 return jsonify({"status": "200 OK", "timestamp": int(time.time()), "info": "Project Fragrance","availableApi": ["qr", "ticket", "mapstock", "unlock", "map", "bonus"], "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8')}), 200
@app.route("/qr") @app.route("/qr")
def qr_to_userid(): def qr_to_userid():
@@ -200,8 +94,8 @@ def ticket():
ticket_data = get_ticket(userId) ticket_data = get_ticket(userId)
if ticket_data['returnCode'] == 0: if ticket_data['returnCode'] == 0:
logout(userId, timestamp) logout(userId, timestamp)
returnCode = 405 returnCode = 403
status = "405 Method Not Allowed" status = "403 Forbidden"
info = "WARNING: THIS INFO SHOULD NEVER APPEARS. IF YOU SEE THIS WARNING PLEASE CONTACT Telegram@sasakure. Unable to operate. Successfully Logged in. Probably User has had one ticket." info = "WARNING: THIS INFO SHOULD NEVER APPEARS. IF YOU SEE THIS WARNING PLEASE CONTACT Telegram@sasakure. Unable to operate. Successfully Logged in. Probably User has had one ticket."
log = {"UserLoginApiStatus": 1, "UserLogoutApiStatus": 1} log = {"UserLoginApiStatus": 1, "UserLogoutApiStatus": 1}
elif ticket_data['returnCode'] == 1: elif ticket_data['returnCode'] == 1:
@@ -402,7 +296,7 @@ def bonus():
status = "200 OK" status = "200 OK"
info = "Succeed." info = "Succeed."
log = {"UserLoginApiStatus": 1, "UploadUserPlaylogApiStatus": 1, "UpsertUserAllApi": 1, "UserLogoutApiStatus": 1} log = {"UserLoginApiStatus": 1, "UploadUserPlaylogApiStatus": 1, "UpsertUserAllApi": 1, "UserLogoutApiStatus": 1}
data = jsonify({"status": status, "timestamp": timestamp, "info": info, "apiName": "unlock", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8'), "userId": userId}) data = jsonify({"status": status, "timestamp": timestamp, "info": info, "apiName": "bonus", "date": datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%a, %d %b %Y %H:%M:%S GMT+8'), "userId": userId})
return data, returnCode return data, returnCode
if __name__ == '__main__': if __name__ == '__main__':

17
map.py
View File

@@ -1,17 +0,0 @@
import json
from sdgb import sdgb_api
def map(userId):
data = json.dumps({
"userId": int(userId),
"nextIndex": 0,
"maxCount": 600
})
map_result = json.loads(sdgb_api(data, "GetUserMapApi", userId))
return map_result
if __name__ == "__main__":
print(map(int(input())))

View File

@@ -6,12 +6,7 @@ import random
from sdgb import sdgb_api from sdgb import sdgb_api
from datetime import datetime, timedelta from datetime import datetime, timedelta
from settings import music_data from settings import music_data, regionId, regionName, clientId, placeId, placeName
from settings import regionId
from settings import regionName
from settings import clientId
from settings import placeId
from settings import placeName
from login import login from login import login
from logout import logout from logout import logout
@@ -219,7 +214,23 @@ def music(userId, mapId, distance, item_list, character_list, isNewMapList):
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId)) user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
data = json.dumps({
"userId": int(userId),
"nextIndex": musicId,
"maxCount": 1
})
user_music = json.loads(sdgb_api(data, "GetUserMusicApi", userId))
isNew = "0"
try:
for item in user_music['userMusicList'][0]['userMusicDetailList']:
if item['musicId'] == musicId and item['level'] == level:
isNew = "1"
break
else:
continue
except:
pass
# UserAll # UserAll
@@ -377,7 +388,7 @@ def music(userId, mapId, distance, item_list, character_list, isNewMapList):
"isNewMapList": isNewMapList, "isNewMapList": isNewMapList,
"isNewLoginBonusList": "", "isNewLoginBonusList": "",
"isNewItemList": "1" * len(item_list), "isNewItemList": "1" * len(item_list),
"isNewMusicDetailList": "1", "isNewMusicDetailList": isNew,
"isNewCourseList": "0", "isNewCourseList": "0",
"isNewFavoriteList": "", "isNewFavoriteList": "",
"isNewFriendSeasonRankingList": "" "isNewFriendSeasonRankingList": ""

View File

@@ -6,12 +6,7 @@ import random
from sdgb import sdgb_api from sdgb import sdgb_api
from datetime import datetime, timedelta from datetime import datetime, timedelta
from settings import music_data from settings import music_data, regionId, regionName, clientId, placeId, placeName
from settings import regionId
from settings import regionName
from settings import clientId
from settings import placeId
from settings import placeName
from login import login from login import login
from logout import logout from logout import logout
@@ -217,6 +212,17 @@ def music(userId):
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId)) user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
isNew = "0"
try:
for item in user_music['userMusicList'][0]['userMusicDetailList']:
if item['musicId'] == musicId and item['level'] == level:
isNew = "1"
break
else:
continue
except:
pass
# UserAll # UserAll
data = json.dumps({ data = json.dumps({
@@ -365,7 +371,7 @@ def music(userId):
"isNewMapList": "", "isNewMapList": "",
"isNewLoginBonusList": "", "isNewLoginBonusList": "",
"isNewItemList": "", "isNewItemList": "",
"isNewMusicDetailList": "1", "isNewMusicDetailList": isNew,
"isNewCourseList": "0", "isNewCourseList": "0",
"isNewFavoriteList": "", "isNewFavoriteList": "",
"isNewFriendSeasonRankingList": "" "isNewFriendSeasonRankingList": ""

View File

@@ -6,11 +6,7 @@ import random
from sdgb import sdgb_api from sdgb import sdgb_api
from datetime import datetime, timedelta from datetime import datetime, timedelta
from settings import regionId from settings import regionId, regionName, clientId, placeId, placeName
from settings import regionName
from settings import clientId
from settings import placeId
from settings import placeName
from login import login from login import login
from logout import logout from logout import logout
@@ -215,6 +211,23 @@ def music(userId, music_data):
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId)) user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
data = json.dumps({
"userId": int(userId),
"nextIndex": musicId,
"maxCount": 1
})
user_music = json.loads(sdgb_api(data, "GetUserMusicApi", userId))
isNew = "1"
try:
for item in user_music['userMusicList'][0]['userMusicDetailList']:
if item['musicId'] == musicId and item['level'] == level:
isNew = "0"
break
else:
continue
except:
pass
# UserAll # UserAll
@@ -364,7 +377,7 @@ def music(userId, music_data):
"isNewMapList": "", "isNewMapList": "",
"isNewLoginBonusList": "", "isNewLoginBonusList": "",
"isNewItemList": "", "isNewItemList": "",
"isNewMusicDetailList": "0", "isNewMusicDetailList": isNew,
"isNewCourseList": "0", "isNewCourseList": "0",
"isNewFavoriteList": "", "isNewFavoriteList": "",
"isNewFriendSeasonRankingList": "" "isNewFriendSeasonRankingList": ""

177
process.py Normal file
View File

@@ -0,0 +1,177 @@
import json
import pytz
import time
from sdgb import sdgb_api
from datetime import datetime, timedelta
from settings import regionId, clientId, placeId
from logout import logout
from login import login
def find_map(mapId, user_map_data):
for single in user_map_data:
if single["mapId"] == mapId:
return single
else:
continue
def isNewMapList(mapId, user_map_data):
if ('{"mapId": ' + str(mapId)) in user_map_data:
return 0
else:
return 1
def item(item_data, user_character_list):
item_list = []
character_list = []
for single in item_data:
if single['kind'] == 9:
if ('{"characterId": ' + str(single['id'])) in user_character_list:
pass
else:
data = ({
"characterId":single['id'],
"level":1,
"awakening":0,
"useCount": 0
})
character_list.append(data)
else:
data = ({
"itemKind": single['kind'],
"itemId": single['id'],
"stock": 1,
"isValid": True
})
item_list.append(data)
return item_list, character_list, item_data[-1]['distance']
def bonus_list_gen(userId):
with open('login_bonus.json') as file:
cache = json.load(file)
bonus_data = []
for item in cache:
bonus_data.append(item['id'])
cache = []
data = json.dumps({
"userId": int(userId),
"nextIndex":0,
"maxCount":2000
})
user_bonus = json.loads(sdgb_api(data, "GetUserLoginBonusApi", userId))['userLoginBonusList']
for item in user_bonus:
cache.append(item['bonusId'])
bonus_list_unexist = list(set(bonus_data) - set(cache))
bonus_list = []
for item in user_bonus:
if item['isComplete'] == False:
if item['bonusId'] in [12, 29, 30, 38, 43, 604]:
data = ({
"bonusId": item['bonusId'],
"point": 4,
"isCurrent": item['isCurrent'],
"isComplete": False
})
else:
data = ({
"bonusId": item['bonusId'],
"point": 9,
"isCurrent": item['isCurrent'],
"isComplete": False
})
bonus_list.append(data)
elif item['bonusId'] == 999:
data = ({
"bonusId": 999,
"point": item['point'] // 10 * 10 + 9,
"isCurrent": item['isCurrent'],
"isComplete": False
})
bonus_list.append(data)
else:
pass
for item in bonus_list_unexist:
if item in [12, 29, 30, 38, 43, 604]:
data = ({
"bonusId": item,
"point": 4,
"isCurrent": False,
"isComplete": False
})
else:
data = ({
"bonusId": item,
"point": 9,
"isCurrent": False,
"isComplete": False
})
bonus_list.append(data)
return bonus_list
def map(userId):
data = json.dumps({
"userId": int(userId),
"nextIndex": 0,
"maxCount": 600
})
map_result = json.loads(sdgb_api(data, "GetUserMapApi", userId))
return map_result
def character(userId):
data = json.dumps({
"userId": int(userId),
"nextIndex":10000000000,
"maxCount":1000000000
})
character_result = json.loads(sdgb_api(data, "GetUserCharacterApi", userId))
return character_result
def userdata(userId):
data = json.dumps({
"userId": int(userId)
})
userdata_result = json.loads(sdgb_api(data, "GetUserDataApi", userId))
return userdata_result
def charge(userId):
data = json.dumps({
"userId": userId,
})
charge_result = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
return charge_result
def get_ticket(userId):
data = json.dumps({
"userId": userId,
"userCharge": {
"chargeId": 6,
"stock": 1,
"purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"),
"validDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1) + timedelta(days=90)).replace(hour=4, minute=0, second=0).strftime("%Y-%m-%d %H:%M:%S")
},
"userChargelog": {
"chargeId": 6,
"price": 4,
"purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"),
"placeId": placeId,
"regionId": regionId,
"clientId": clientId
}
})
ticket_result = json.loads(sdgb_api(data, "UpsertUserChargelogApi", userId))
return ticket_result

View File

@@ -1,4 +1,4 @@
requests httpx
pycryptodome pycryptodome
pytz pytz
flask flask

22
sdgb.py
View File

@@ -3,7 +3,7 @@ import zlib
import pytz import pytz
import base64 import base64
import hashlib import hashlib
import requests import httpx
from datetime import datetime from datetime import datetime
from Crypto.Cipher import AES from Crypto.Cipher import AES
@@ -29,7 +29,6 @@ class aes_pkcs7(object):
def decrypt(self, content): def decrypt(self, content):
cipher = AES.new(self.key, AES.MODE_CBC, self.iv) cipher = AES.new(self.key, AES.MODE_CBC, self.iv)
#content = base64.b64decode(content)
return cipher.decrypt(content) return cipher.decrypt(content)
text = cipher.decrypt(content).decode('utf-8') text = cipher.decrypt(content).decode('utf-8')
return self.pkcs7unpadding(text) return self.pkcs7unpadding(text)
@@ -56,9 +55,10 @@ def sdgb_api(data, useApi, userId):
data = data data = data
data_enc = aes.encrypt(data) data_enc = aes.encrypt(data)
data_def = zlib.compress(data_enc) data_def = zlib.compress(data_enc)
requests.packages.urllib3.disable_warnings()
endpoint = "https://maimai-gm.wahlap.com:42081/Maimai2Servlet/" endpoint = "https://maimai-gm.wahlap.com:42081/Maimai2Servlet/"
r = requests.post(endpoint + get_hash_api(useApi), headers={ r = httpx.post(
endpoint + get_hash_api(useApi),
headers = {
"User-Agent": "%s#%d"%(get_hash_api(useApi), userId), "User-Agent": "%s#%d"%(get_hash_api(useApi), userId),
"Content-Type": "application/json", "Content-Type": "application/json",
"Mai-Encoding": "1.40", "Mai-Encoding": "1.40",
@@ -66,16 +66,15 @@ def sdgb_api(data, useApi, userId):
"Charset": "UTF-8", "Charset": "UTF-8",
"Content-Encoding": "deflate", "Content-Encoding": "deflate",
"Expect": "100-continue" "Expect": "100-continue"
}, data = data_def,verify=False) },
data = data_def
)
resp_def = r.content resp_def = r.content
try: try:
resp_enc = zlib.decompress(resp_def) resp_enc = zlib.decompress(resp_def)
#print(resp_enc)
except: except:
resp_enc = resp_def resp_enc = resp_def
#print("skipped")
#print(resp_enc)
return unpad(aes.decrypt(resp_enc), 16).decode() return unpad(aes.decrypt(resp_enc), 16).decode()
def qr_api(qr_code): def qr_api(qr_code):
@@ -96,7 +95,10 @@ def qr_api(qr_code):
"Host": "ai.sys-all.cn", "Host": "ai.sys-all.cn",
"User-Agent": "WC_AIME_LIB" "User-Agent": "WC_AIME_LIB"
} }
res = requests.post("http://ai.sys-allnet.cn/wc_aime/api/get_data", data=json.dumps(param, separators=(',', ':')), headers=headers) res = httpx.post(
# print(param) # debug打印param数据 "http://ai.sys-allnet.cn/wc_aime/api/get_data",
data = json.dumps(param, separators=(',', ':')),
headers = headers
)
assert res.status_code == 200, "网络错误" assert res.status_code == 200, "网络错误"
return json.loads(res.content) return json.loads(res.content)

View File

@@ -1,43 +0,0 @@
import json
import pytz
import time
from sdgb import sdgb_api
from datetime import datetime, timedelta
from settings import regionId
from settings import clientId
from settings import placeId
from logout import logout
from login import login
def get_ticket(userId):
data = json.dumps({
"userId": userId,
"userCharge": {
"chargeId": 6,
"stock": 1,
"purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"),
"validDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1) + timedelta(days=90)).replace(hour=4, minute=0, second=0).strftime("%Y-%m-%d %H:%M:%S")
},
"userChargelog": {
"chargeId": 6,
"price": 4,
"purchaseDate": (datetime.now(pytz.timezone('Asia/Shanghai')) - timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S.0"),
"placeId": placeId,
"regionId": regionId,
"clientId": clientId
}
})
ticket_result = json.loads(sdgb_api(data, "UpsertUserChargelogApi", userId))
return ticket_result
if __name__ == "__main__":
timestamp = int(time.time())
print(timestamp)
print(login(timestamp))
print(get_ticket())
print(logout(timestamp))

View File

@@ -6,12 +6,7 @@ import random
from sdgb import sdgb_api from sdgb import sdgb_api
from datetime import datetime, timedelta from datetime import datetime, timedelta
from settings import music_data from settings import music_data, regionId, regionName, clientId, placeId, placeName
from settings import regionId
from settings import regionName
from settings import clientId
from settings import placeId
from settings import placeName
from login import login from login import login
from logout import logout from logout import logout
@@ -511,6 +506,17 @@ def music(userId):
user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId)) user_charge = json.loads(sdgb_api(data, "GetUserChargeApi", userId))
isNew = "0"
try:
for item in user_music['userMusicList'][0]['userMusicDetailList']:
if item['musicId'] == musicId and item['level'] == level:
isNew = "1"
break
else:
continue
except:
pass
# UserAll # UserAll
data = json.dumps({ data = json.dumps({
@@ -659,7 +665,7 @@ def music(userId):
"isNewMapList": "", "isNewMapList": "",
"isNewLoginBonusList": "", "isNewLoginBonusList": "",
"isNewItemList": "1" * len(music_item()), "isNewItemList": "1" * len(music_item()),
"isNewMusicDetailList": "1", "isNewMusicDetailList": isNew,
"isNewCourseList": "0", "isNewCourseList": "0",
"isNewFavoriteList": "", "isNewFavoriteList": "",
"isNewFriendSeasonRankingList": "" "isNewFriendSeasonRankingList": ""

View File

@@ -1,12 +0,0 @@
import json
from sdgb import sdgb_api
def userdata(userId):
data = json.dumps({
"userId": int(userId)
})
userdata_result = json.loads(sdgb_api(data, "GetUserDataApi", userId))
return userdata_result