微博超话签到★百度贴吧签到★小米运动刷步数★恩山签到★雨云签到白嫖服务器★小茅预约★丽宝乐园小程序签到★天翼云盘签到★腾讯视频签到(会员领成长值)★阿里云盘签到★GW树洞机场签到★富贵论坛签到★一点万向签到打卡★什么值得买达人和关键词取消关注★STLXZ签到★PT站签到★帆软签到+摇摇乐★千图网签到★星空代理签到★什么值得买签到★值得买每日抽奖★小米社区签到★逑美在线app签到和抽卡★ddnsto自动续费七天★爱奇艺签到刷时长★双色球预测(娱乐)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
13 KiB

#!/usr/bin/python3
# -- coding: utf-8 --
# @Time : 2023/05/03 10:23
# -------------------------------
# cron "1,30 9 * * *" script-path=xxx.py,tag=匹配cron用
# const $ = new Env('小茅预约');
9 months ago
# 2024.1.9 更新预约龙年茅台id
import datetime #line:1
import os #line:2
import random #line:3
import time #line:4
import re #line:5
import requests #line:6
import base64 #line:7
import json #line:8
#原创 微信公众号@爱上羊毛侠
# 青龙面板加入环境变量MTTokenD
# MTTokenD是茅台预约参数,多个请换行,格式'省份,城市,经度,维度,设备id,token,MT-Token-Wap(抓包小茅运)'
p_c_map ={}#line:1
mt_r ='clips_OlU6TmFRag5rCXwbNAQ/Tz1SKlN8THcecBp/'#line:2
9 months ago
res_map ={'10941':'贵州茅台酒(甲辰龙年)','10942':'贵州茅台酒(甲辰龙年)x2'}#line:7#,'2478':'贵州茅台酒(珍品)'
def mt_add (OOOOO0O00O00O0000 ,OOO00OOO0O00OO00O ,OOOO00000O00OO0O0 ,O00000O0OO00OO00O ,OO0OO0000O000O0O0 ,O0OO000O00O0OO00O ):#line:10
O00OO000OOOOO0OO0 =f'{int(time.time() * 1000)}'#line:11
OOOO0OOO0OO0O000O =requests .get (f'http://82.157.10.108:8086/get_mtv?DeviceID={O0OO000O00O0OO00O}&MTk={O00OO000OOOOO0OO0}&version={mt_version}&key=yaohuo')#line:13
OO000O00O0000OO00 ={'User-Agent':'iPhone 14','MT-Token':OO0OO0000O000O0O0 ,'MT-Network-Type':'WIFI','MT-User-Tag':'0','MT-R':mt_r ,'MT-Lat':'','MT-K':O00OO000OOOOO0OO0 ,'MT-Lng':'','MT-Info':'028e7f96f6369cafe1d105579c5b9377','MT-APP-Version':mt_version ,'MT-Request-ID':f'{int(time.time() * 1000)}','Accept-Language':'zh-Hans-CN;q=1','MT-Device-ID':O0OO000O00O0OO00O ,'MT-V':OOOO0OOO0OO0O000O .text ,'MT-Bundle-ID':'com.moutai.mall','mt-lng':lng ,'mt-lat':lat }#line:23
OOOO0O0O0000000O0 ={"itemInfoList":[{"count":1 ,"itemId":str (OOOOO0O00O00O0000 )}],"sessionId":OOOO00000O00OO0O0 ,"userId":str (O00000O0OO00OO00O ),"shopId":str (OOO00OOO0O00OO00O )}#line:25
OOOO0OOO0OO0O000O =requests .get ('http://82.157.10.108:8086/get_actParam?key=yaohuo&actParam='+base64 .b64encode (json .dumps (OOOO0O0O0000000O0 ).replace (' ','').encode ('utf8')).decode ())#line:27
OOOO0O0O0000000O0 ['actParam']=OOOO0OOO0OO0O000O .text #line:28
O00OO0OOO00OOO0OO =OOOO0O0O0000000O0 #line:29
OOO0OO0OO00O00OO0 =requests .post ('https://app.moutai519.com.cn/xhr/front/mall/reservation/add',headers =OO000O00O0000OO00 ,json =O00OO0OOO00OOO0OO )#line:31
O0OOOO0OOO0OO0OOO =OOO0OO0OO00O00OO0 .json ().get ('code',0 )#line:32
if O0OOOO0OOO0OO0OOO ==2000 :#line:33
return OOO0OO0OO00O00OO0 .json ().get ('data',{}).get ('successDesc',"未知")#line:34
return '申购失败:'+OOO0OO0OO00O00OO0 .json ().get ('message',"未知原因")#line:35
def tongzhi (OOO0O0O0O0OOOO0OO ):#line:38
OOOOOOO0O0O000OO0 =os .getenv ('mtec_user','').split (',')#line:39
for OO0O0000OOO0O0000 in OOOOOOO0O0O000OO0 :#line:40
O0OOOOO0O000000OO ='http://wxpusher.zjiecode.com/api/send/message/?appToken=&content={}&uid={}'.format (OOO0O0O0O0OOOO0OO ,OO0O0000OOO0O0000 )#line:42
O000O0O0O0OOO0O00 =requests .get (O0OOOOO0O000000OO )#line:43
print (O000O0O0O0OOO0O00 .text )#line:44
def get_session_id (O0O0O00OO00OO0OOO ,O000O0OOO0OOOO0O0 ):#line:47
OO0OOOOOOO00O0000 ={'mt-device-id':O0O0O00OO00OO0OOO ,'mt-user-tag':'0','accept':'*/*','mt-network-type':'WIFI','mt-token':O000O0OOO0OOOO0O0 ,'mt-bundle-id':'com.moutai.mall','accept-language':'zh-Hans-CN;q=1','mt-request-id':f'{int(time.time() * 1000)}','mt-app-version':mt_version ,'user-agent':'iPhone 14','mt-r':mt_r ,'mt-lng':lng ,'mt-lat':lat }#line:62
O00OO00O0OOO000OO =requests .get ('https://static.moutai519.com.cn/mt-backend/xhr/front/mall/index/session/get/'+time_keys ,headers =OO0OOOOOOO00O0000 )#line:65
OOOO00O00OO00OOOO =O00OO00O0OOO000OO .json ().get ('data',{}).get ('sessionId')#line:66
O00OOO0OOOOOOO0OO =O00OO00O0OOO000OO .json ().get ('data',{}).get ('itemList',[])#line:67
O0O000O0O0O0O00OO =[OO0OOOO0OOO0000OO .get ('itemCode')for OO0OOOO0OOO0000OO in O00OOO0OOOOOOO0OO ]#line:68
return OOOO00O00OO00OOOO ,O0O000O0O0O0O00OO #line:69
def get_shop_item (OO000O0OOOOOO00OO ,OOO0O0O0O00OO0OOO ,O00000O000000000O ,O0OOO0O0O0O0O00OO ,OOO0O000OO0000000 ,OO0OOOO000OO00OOO ):#line:72
O000OO0000OOO00O0 ={'mt-device-id':O00000O000000000O ,'mt-user-tag':'0','mt-lat':'','accept':'*/*','mt-network-type':'WIFI','mt-token':O0OOO0O0O0O0O00OO ,'mt-bundle-id':'com.moutai.mall','accept-language':'zh-Hans-CN;q=1','mt-request-id':f'{int(time.time() * 1000)}','mt-r':mt_r ,'mt-app-version':mt_version ,'user-agent':'iPhone 14','mt-lng':lng ,'mt-lat':lat }#line:88
OO00OOOO00OOOO0OO =requests .get ('https://static.moutai519.com.cn/mt-backend/xhr/front/mall/shop/list/slim/v3/'+str (OO000O0OOOOOO00OO )+'/'+OOO0O000OO0000000 +'/'+str (OOO0O0O0O00OO0OOO )+'/'+time_keys ,headers =O000OO0000OOO00O0 )#line:93
O00OO0OO00O0OOO00 =OO00OOOO00OOOO0OO .json ().get ('data',{})#line:94
OO0O0OO00OOOO000O =O00OO0OO00O0OOO00 .get ('shops',[])#line:95
OO000OOO00OO0OO00 =p_c_map [OOO0O000OO0000000 ][OO0OOOO000OO00OOO ]#line:96
for O0O0O0O00OO0O0OO0 in OO0O0OO00OOOO000O :#line:97
if not O0O0O0O00OO0O0OO0 .get ('shopId')in OO000OOO00OO0OO00 :#line:98
continue #line:99
if OOO0O0O0O00OO0OOO in str (O0O0O0O00OO0O0OO0 ):#line:100
return O0O0O0O00OO0O0OO0 .get ('shopId')#line:101
def get_user_id (O0O00O0O0OOOO0OO0 ,O0OOOO0OO0000O000 ):#line:104
OOOO0OO0O0OOOOOO0 ={'MT-User-Tag':'0','Accept':'*/*','MT-Network-Type':'WIFI','MT-Token':O0O00O0O0OOOO0OO0 ,'MT-Bundle-ID':'com.moutai.mall','Accept-Language':'zh-Hans-CN;q=1, en-CN;q=0.9','MT-Request-ID':f'{int(time.time() * 1000)}','MT-APP-Version':mt_version ,'User-Agent':'iOS;16.0.1;Apple;iPhone 14 ProMax','MT-R':mt_r ,'MT-Device-ID':O0OOOO0OO0000O000 ,'mt-lng':lng ,'mt-lat':lat }#line:119
OOOOO0O0OOO00000O =requests .get ('https://app.moutai519.com.cn/xhr/front/user/info',headers =OOOO0OO0O0OOOOOO0 )#line:122
O00O000000OOO000O =OOOOO0O0OOO00000O .json ().get ('data',{}).get ('userName')#line:123
O00OOO0O0OOO00O0O =OOOOO0O0OOO00000O .json ().get ('data',{}).get ('userId')#line:124
OO0O00OOO0OOOOOO0 =OOOOO0O0OOO00000O .json ().get ('data',{}).get ('mobile')#line:125
return O00O000000OOO000O ,O00OOO0O0OOO00O0O ,OO0O00OOO0OOOOOO0 #line:126
def getUserEnergyAward (O0OO0000O0000OOO0 ,OOO000O0OO0OO0000 ):#line:129
"""
领取耐力
:return:
"""#line:133
OO00OOOO0O0O0O000 ={'MT-Device-ID-Wap':O0OO0000O0000OOO0 ,'MT-Token-Wap':OOO000O0OO0OO0000 ,'YX_SUPPORT_WEBP':'1',}#line:139
O0OOO0OOO0O000OO0 ={'X-Requested-With':'XMLHttpRequest','User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 15_2_1 like Mac OS X)','Referer':'https://h5.moutai519.com.cn/gux/game/main?appConfig=2_1_2','Client-User-Agent':'iOS;15.0.1;Apple;iPhone 12 ProMax','MT-R':mt_r ,'Origin':'https://h5.moutai519.com.cn','MT-APP-Version':mt_version ,'MT-Request-ID':f'{int(time.time() * 1000)}','Accept-Language':'zh-CN,zh-Hans;q=0.9','MT-Device-ID':O0OO0000O0000OOO0 ,'Accept':'application/json, text/javascript, */*; q=0.01','mt-lng':lng ,'mt-lat':lat }#line:155
OO00OOO0000O0O000 =requests .post ('https://h5.moutai519.com.cn/game/isolationPage/getUserEnergyAward',cookies =OO00OOOO0O0O0O000 ,headers =O0OOO0OOO0O000OO0 ,json ={})#line:157
return OO00OOO0000O0O000 .json ().get ('message')if '无法领取奖励'in OO00OOO0000O0O000 .text else "领取奖励成功"#line:158
def get_map ():#line:161
global p_c_map #line:162
O0O0O00000O000OOO ='https://static.moutai519.com.cn/mt-backend/xhr/front/mall/resource/get'#line:163
O00O00000O0OO00O0 ={'X-Requested-With':'XMLHttpRequest','User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0_1 like Mac OS X)','Referer':'https://h5.moutai519.com.cn/gux/game/main?appConfig=2_1_2','Client-User-Agent':'iOS;16.0.1;Apple;iPhone 14 ProMax','MT-R':mt_r ,'Origin':'https://h5.moutai519.com.cn','MT-APP-Version':mt_version ,'MT-Request-ID':f'{int(time.time() * 1000)}{random.randint(1111111, 999999999)}{int(time.time() * 1000)}','Accept-Language':'zh-CN,zh-Hans;q=1','MT-Device-ID':f'{int(time.time() * 1000)}{random.randint(1111111, 999999999)}{int(time.time() * 1000)}','Accept':'application/json, text/javascript, */*; q=0.01','mt-lng':lng ,'mt-lat':lat }#line:178
OOOOOOOOO000O0000 =requests .get (O0O0O00000O000OOO ,headers =O00O00000O0OO00O0 ,)#line:179
OO0OOO0O0O00000OO =OOOOOOOOO000O0000 .json ().get ('data',{}).get ('mtshops_pc',{})#line:180
O0OO00O0OOOOOOO00 =OO0OOO0O0O00000OO .get ('url')#line:181
OO0O0O0O00000OOOO =requests .get (O0OO00O0OOOOOOO00 )#line:182
for OO00000OO0O0O0O00 ,O0O0000OO0O000OO0 in dict (OO0O0O0O00000OOOO .json ()).items ():#line:183
O00O00O000OOOOO0O =O0O0000OO0O000OO0 .get ('provinceName')#line:184
O00000OO000OOOO0O =O0O0000OO0O000OO0 .get ('cityName')#line:185
if not p_c_map .get (O00O00O000OOOOO0O ):#line:186
p_c_map [O00O00O000OOOOO0O ]={}#line:187
if not p_c_map [O00O00O000OOOOO0O ].get (O00000OO000OOOO0O ,None ):#line:188
p_c_map [O00O00O000OOOOO0O ][O00000OO000OOOO0O ]=[OO00000OO0O0O0O00 ]#line:189
else :#line:190
p_c_map [O00O00O000OOOOO0O ][O00000OO000OOOO0O ].append (OO00000OO0O0O0O00 )#line:191
return p_c_map #line:192
def login (O0000OOOOOOO0O0O0 ,OOOO00O0OO0OO00OO ,O0O0O0OO0000OOOO0 ):#line:195
"""
:param phone: 手机号
:param vCode: 验证码
:param Device_ID: 设备id
:return:
"""#line:202
O0O00OO00O0OO0O0O =f'{int(time.time() * 1000)}'#line:203
OOOOOO000O00OO0O0 =requests .get (f'http://82.157.10.108:8086/get_mtv?DeviceID={O0O0O0OO0000OOOO0}&MTk={O0O00OO00O0OO0O0O}&version={mt_version}&key=yaohuo')#line:205
O0OOO00OO00O0OOO0 ={'MT-Device-ID':O0O0O0OO0000OOOO0 ,'MT-User-Tag':'0','Accept':'*/*','MT-Network-Type':'WIFI','MT-Token':'','MT-K':O0O00OO00O0OO0O0O ,'MT-Bundle-ID':'com.moutai.mall','MT-V':OOOOOO000O00OO0O0 .text ,'User-Agent':'iOS;16.0.1;Apple;iPhone 14 ProMax','Accept-Language':'zh-Hans-CN;q=1','MT-Request-ID':f'{int(time.time() * 1000)}18342','MT-R':mt_r ,'MT-APP-Version':mt_version ,}#line:220
OO000O000OO0O0OO0 ={'ydToken':'','mobile':f'{O0000OOOOOOO0O0O0}','vCode':f'{OOOO00O0OO0OO00OO}','ydLogId':'',}#line:227
OOO00O00O00000O0O =requests .post ('https://app.moutai519.com.cn/xhr/front/user/register/login',headers =O0OOO00OO00O0OOO0 ,json =OO000O000OO0O0OO0 )#line:230
OO0O00O00OO0O000O =OOO00O00O00000O0O .json ().get ('data',{})#line:231
OOO00O000O0O00O00 =OO0O00O00OO0O000O .get ('token')#line:232
O000OOO0OO0O0O000 =OO0O00O00OO0O000O .get ('cookie')#line:233
print (O0O0O0OO0000OOOO0 ,OOO00O000O0O00O00 ,O000OOO0OO0O0O000 )#line:234
return O0O0O0OO0000OOOO0 ,OOO00O000O0O00O00 ,O000OOO0OO0O0O000 #line:235
def Push(contents):
# plustoken推送
headers = {'Content-Type': 'application/json'}
json = {"token": plustoken, 'title': '茅台预约推送', 'content': contents.replace('\n', '<br>'), "template": "json"}
resp = requests.post(f'http://www.pushplus.plus/send', json=json, headers=headers).json()
print('push+推送成功' if resp['code'] == 200 else 'push+推送失败')
if __name__ =='__main__':#line:245
plustoken =os .getenv ("plustoken")#line:246
mt_tokens =os .getenv ("MTTokenD")#line:247
mt_version ="".join (re .findall ('whats-new__latest__version">(.*?)</p>',requests .get ('https://apps.apple.com/cn/app/i%E8%8C%85%E5%8F%B0/id1600482450').text ,re .S )).replace ('版本 ','').replace('版本 ','')#line:248
print ('当前最新版本为:'+mt_version )#line:249
if not mt_tokens :#line:250
print ('MTToken is null')#line:251
exit ()#line:252
mt_token_list =mt_tokens .split ('&')#line:253
s ="-------------------总共"+str (int (len (mt_token_list )))+"个用户-------------------"+'\n'#line:256
userCount =0 #line:257
if len (mt_token_list )>0 :#line:258
for mt_token in mt_token_list :#line:259
userCount +=1 #line:260
province ,city ,lng ,lat ,device_id ,token ,ck =mt_token .split (',')#line:262
time_keys =str (int (time .mktime (datetime .date .today ().timetuple ()))*1000 )#line:264
get_map ()#line:265
try :#line:267
sessionId ,itemCodes =get_session_id (device_id ,token )#line:268
userName ,user_id ,mobile =get_user_id (token ,device_id )#line:269
if not user_id :#line:270
s +=""+str (userCount )+"个用户token失效,请重新登录"+'\n'#line:271
continue #line:272
s +=""+str (userCount )+"个用户----------------"+userName +'_'+mobile +"开始任务"+"----------------"+'\n'#line:274
for itemCode in itemCodes :#line:275
name =res_map .get (str (itemCode ))#line:276
if name :#line:277
shop_id =get_shop_item (sessionId ,itemCode ,device_id ,token ,province ,city )#line:279
res =mt_add (itemCode ,str (shop_id ),sessionId ,user_id ,token ,device_id )#line:281
s +=itemCode +'_'+name +'---------------'+res +'\n'#line:283
1 year ago
if ck :#line:284
r =getUserEnergyAward (device_id ,ck )#line:285
s +=userName +'_'+mobile +'---------------'+"小茅运:"+r +'\n'#line:287
s +=userName +'_'+mobile +"正常结束任务"+'\n \n'#line:288
except Exception as e :#line:289
s +=userName +'_'+mobile +"异常信息"+e #line:290
print (s )#line:291
Push (contents =s )#line:292