mirror of
https://github.com/shixiangkuangmo/sxkm.git
synced 2026-01-11 10:30:42 +08:00
Create dml.py
达美乐
This commit is contained in:
parent
dffbcce02d
commit
837c4c5bc0
273
dml.py
Normal file
273
dml.py
Normal file
@ -0,0 +1,273 @@
|
||||
'''
|
||||
name:达美乐最新脚本V2
|
||||
author:食翔狂魔
|
||||
desc:加密参数改为每个账号独立获取
|
||||
ck格式:备注#openid#Authorization 多号@连接,需要自行搭建接口,穿透出去后填到apiUrl那儿
|
||||
version:v3.7
|
||||
'''
|
||||
import os
|
||||
import asyncio
|
||||
import aiohttp
|
||||
from os import environ, path
|
||||
import datetime
|
||||
import requests
|
||||
import time
|
||||
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||
KAMI = "食翔狂魔" #卡密,不用动
|
||||
apiUrl = '自己搭建的接口' #必填
|
||||
KAMI2 = "" #狂魔自己用的其它人不需要不用管
|
||||
isAutoLogin = False #狂魔自己用的其它人不需要不用管
|
||||
|
||||
send=""
|
||||
giftName = {
|
||||
"001": '一等奖 免费披萨券',
|
||||
"002": '二等奖 半价披萨券',
|
||||
"003": '三等奖 免费嫩汁鸡块券',
|
||||
"004": '四等奖 免费任意口味一对烤翅券',
|
||||
"005": '五等奖 免费招牌蛋挞',
|
||||
"006": '六等奖 免费当季特饮',
|
||||
}
|
||||
globalScore = {}
|
||||
|
||||
TARGET_HOUR = 10 # 目标小时
|
||||
TARGET_MINUTE = 31 # 目标分钟
|
||||
TARGET_DELAY_MS = 1 # 提前xxx毫秒
|
||||
|
||||
# 加载通知服务函数保持不变
|
||||
def load_send():
|
||||
global send
|
||||
cur_path = path.abspath(path.dirname(__file__))
|
||||
if path.exists(cur_path + "/notify.py"):
|
||||
try:
|
||||
from notify import send
|
||||
print("加载通知服务成功!")
|
||||
except ImportError:
|
||||
send = None
|
||||
print("加载通知服务失败~")
|
||||
else:
|
||||
send = None
|
||||
print("加载通知服务失败~")
|
||||
|
||||
#load_send()
|
||||
def getJm(t,openid="",remark=""):
|
||||
json_data = {'kami': KAMI, 'jmtype': t,'openid':openid}
|
||||
|
||||
response = requests.post(apiUrl, json=json_data)
|
||||
data = response.json()
|
||||
if "error" not in data and len(data["result"]) > 0:
|
||||
print(f"【{remark}】调用{t}加密接口成功! " + data["msg"])
|
||||
return data["result"]
|
||||
else:
|
||||
print(f"【{remark}】调用{t}加密接口失败! " + response.text)
|
||||
getJm(t,openid)
|
||||
return False
|
||||
def getCode():
|
||||
json_data = {'kami': KAMI2, 'jmtype': "wxcode","openid":"132"}
|
||||
|
||||
response = requests.post(apiUrl, json=json_data)
|
||||
data = response.json()
|
||||
return data["code"]
|
||||
def login(e=""):
|
||||
url = 'https://game.dominos.com.cn/spring/v2/onLogin?code=' + getCode()
|
||||
response = requests.get(url)
|
||||
return response.json()["content"]["accessToken"]
|
||||
async def getIsPsza(session, account, message_list, remark, gameid,token):
|
||||
try:
|
||||
arrAc = account.split("#")
|
||||
url = f"https://game.dominos.com.cn/{gameid}/v2/game/myPrize?pageSize=10000"
|
||||
params = {'openid': arrAc[0]}
|
||||
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Linux; Android 12; Redmi K30 Pro Zoom Edition Build/SKQ1.211006.001; wv) AppleWebKit/537.36",
|
||||
'Authorization':"Bearer " + token
|
||||
}
|
||||
|
||||
async with session.get(url, params=params, headers=headers) as response:
|
||||
data = await response.json()
|
||||
if data["errorMessage"] == "UNAUTHORIZED_ERROR":
|
||||
print(f"【{remark}】:登录失效。")
|
||||
id_counts = {}
|
||||
for item in data["content"]:
|
||||
gid = item['id']
|
||||
if gid in id_counts:
|
||||
id_counts[gid] += 1
|
||||
else:
|
||||
id_counts[gid] = 1
|
||||
for gid, count in id_counts.items():
|
||||
print(f"【{remark},{giftName[gid]}】:{count} 张。")
|
||||
message_list.append(f"【{remark},{giftName[gid]}】:{count} 张。" + "<br />\n")
|
||||
if data["statusCode"] == 0 and any(d.get("id") == "001" for d in data["content"]):
|
||||
return f"{arrAc[0]},恭喜,已获得过免费披萨!"
|
||||
elif data["statusCode"] == 0:
|
||||
return f"{arrAc[0]},遗憾,还未获得免费披萨!"
|
||||
else:
|
||||
return "用户不存在"
|
||||
except Exception as e:
|
||||
print(f"getIsPsza error: {e}")
|
||||
return str(e)
|
||||
|
||||
async def share_done(session, openid, message_list, remark, gameid,token):
|
||||
shrurl = f"https://game.dominos.com.cn/{gameid}/v2/game/sharingDone"
|
||||
payload ={
|
||||
"openid": openid,
|
||||
"from": 1,
|
||||
"target": 0,
|
||||
"encrypt": globalScore[openid+"gshare"]
|
||||
}
|
||||
headers = {
|
||||
'Content-Type': "application/x-www-form-urlencoded",
|
||||
'Referer': "https://servicewechat.com/wx887bf6ad752ca2f3/63/page-frame.html",
|
||||
'Authorization':"Bearer " + token
|
||||
}
|
||||
tag = True
|
||||
while True:
|
||||
try:
|
||||
async with session.post(shrurl, data=payload, headers=headers) as res:
|
||||
data = await res.json()
|
||||
print(f"【{remark}】开始执行分享:")
|
||||
if data['errorMessage'] == "UNAUTHORIZED_ERROR":
|
||||
print(f"【{remark}】"+"登陆失效,重抓Authorization")
|
||||
tag = False
|
||||
break
|
||||
if data['errorMessage'] == "今日分享已用完,请明日再来":
|
||||
message_list.append(f"【{remark}】" + "分享:今日分享已用完,请明日再来" + "<br />\n")
|
||||
print(f"【{remark}】"+f'分享:今日分享已用完,请明日再来')
|
||||
break
|
||||
elif data['errorMessage'] == "用户不存在":
|
||||
message_list.append(f"【{remark}】" + "分享:用户不存在" + "<br />\n")
|
||||
print(f"【{remark}】" + "分享:用户不存在")
|
||||
tag = False
|
||||
break
|
||||
elif data['errorMessage'] == "异常":
|
||||
print(f"【{remark}】" + "分享:异常")
|
||||
message_list.append(f"【{remark}】" + "分享:异常" + "<br />\n")
|
||||
tag = False
|
||||
break
|
||||
else:
|
||||
print(f"【{remark}】" + "分享:成功!")
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"share_done: {e}")
|
||||
break
|
||||
return tag
|
||||
|
||||
async def game_done(session, openid, score, message_list, remark, gameid,token):
|
||||
url = f"https://game.dominos.com.cn/{gameid}/v2/game/gameDone"
|
||||
payload = {
|
||||
'openid': "ojOaM5ILuObRk-csjx92hCR_ThhQ",
|
||||
'score': globalScore[openid+"gscore"],
|
||||
'tempId': "null"
|
||||
}
|
||||
headers = {
|
||||
'User-Agent': "Mozilla/5.0 (Linux; Android 15; PKG110 Build/UKQ1.231108.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300333 MMWEBSDK/20240404 MMWEBID/9496 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android",
|
||||
'Accept-Encoding': "gzip,compress,br,deflate",
|
||||
'authorization': "Bearer " + token,
|
||||
'charset': "utf-8",
|
||||
'Referer': "https://servicewechat.com/wx887bf6ad752ca2f3/72/page-frame.html"
|
||||
}
|
||||
while True:
|
||||
try:
|
||||
async with session.post(url, data=payload, headers=headers) as response:
|
||||
data = await response.json()
|
||||
print(f"【{remark}】开始执行游戏:")
|
||||
if data["statusCode"] == 0:
|
||||
prize = data['content']['name']
|
||||
now = datetime.datetime.now()
|
||||
formatted_time = now.strftime('%Y-%m-%d %H:%M:%S') + ',{:03d}'.format(now.microsecond // 1000)
|
||||
print(f"【{remark}】{prize}")
|
||||
message_list.append(f"【{remark}】{prize}<br />\n")
|
||||
else:
|
||||
err = data['errorMessage']
|
||||
print(f"【{remark}】{err}")
|
||||
message_list.append(f'【{remark}】{err}<br />\n')
|
||||
break
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"game_done error: {e}")
|
||||
break
|
||||
|
||||
async def process_account(session, account, message_list, stats, gameid):
|
||||
arrAc = account.split("#")
|
||||
if isAutoLogin == True and arrAc[0]=="狂魔2":
|
||||
arrAc[2] = login()
|
||||
print(arrAc[2])
|
||||
rshare = await share_done(session, arrAc[1], message_list, arrAc[0], gameid,arrAc[2])
|
||||
|
||||
# if rshare == False:
|
||||
# return
|
||||
await game_done(session, arrAc[1], "", message_list, arrAc[0], gameid,arrAc[2])
|
||||
|
||||
strispsza = await getIsPsza(session, account, message_list, arrAc[0], gameid,arrAc[2])
|
||||
message_part = f"<br />\n账号【{arrAc[0]}】:\n<br />{strispsza}\n<br />"
|
||||
|
||||
if "恭喜" in strispsza:
|
||||
stats['hasWin'].append(f"【{arrAc[0]}】")
|
||||
stats['hasCount'] += 1
|
||||
message_list.append(message_part)
|
||||
|
||||
async def main():
|
||||
# 定义需要并发处理的游戏ID元组及其对应的环境变量名
|
||||
gameids_and_envvars = (
|
||||
("spring", "dmlck2"),
|
||||
#("bocconcini", "dmlck")
|
||||
)
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
tasks = []
|
||||
all_message_lists = {}
|
||||
all_stats = {}
|
||||
|
||||
for gameid, env_var in gameids_and_envvars:
|
||||
accounts = environ.get(env_var)
|
||||
if not accounts:
|
||||
print(f'环境变量 {env_var} 未填写!')
|
||||
continue
|
||||
|
||||
accounts_list = accounts.split('@')
|
||||
num_of_accounts = len(accounts_list)
|
||||
print(f"获取到 {num_of_accounts} 个账号对于 gameid {gameid}")
|
||||
|
||||
message_list = []
|
||||
stats = {'hasCount': 0, 'hasWin': [],'allCount':num_of_accounts}
|
||||
all_message_lists[gameid] = message_list
|
||||
all_stats[gameid] = stats
|
||||
|
||||
for account in accounts_list:
|
||||
aarr = account.split("#")
|
||||
gscore = getJm("score",aarr[1],aarr[0])
|
||||
if gscore == False:
|
||||
continue
|
||||
globalScore[account.split("#")[1]+"gscore"] = gscore
|
||||
gshare = getJm("share",aarr[1],aarr[0])
|
||||
if gshare == False:
|
||||
continue
|
||||
globalScore[account.split("#")[1]+"gshare"] = gshare
|
||||
task = asyncio.create_task(process_account(session, account, message_list, stats, gameid))
|
||||
tasks.append(task)
|
||||
|
||||
await asyncio.gather(*tasks)
|
||||
|
||||
final_messages = []
|
||||
for gameid, message_list in all_message_lists.items():
|
||||
stats = all_stats[gameid]
|
||||
message = ''.join(message_list)
|
||||
message += f'中奖情况({gameid}):{stats["hasCount"]}/{stats["allCount"]}<br />\n'
|
||||
message += f'部分已中奖名单({gameid}):{"、".join(stats["hasWin"])}<br />\n'
|
||||
final_messages.append(message)
|
||||
|
||||
final_message = '\n'.join(final_messages)
|
||||
|
||||
if send:
|
||||
print("\n\n\n\nfinal_message")
|
||||
print(final_message)
|
||||
#send('达美乐', final_message)
|
||||
else:
|
||||
print("\n\n\n\nfinal_message")
|
||||
print(final_message)
|
||||
|
||||
if __name__ == '__main__':
|
||||
for i in range(30):
|
||||
|
||||
asyncio.run(main())
|
||||
|
||||
time.sleep(30)
|
||||
Loading…
Reference in New Issue
Block a user