Files
qinglong/脚本库/微信小程序/抓包版/104-抖音极速版/2023-09-20_0629dy_2fc2cb5b.py
2026-05-24 05:33:05 +00:00

965 lines
36 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Source: https://github.com/xfmeng970526/ql/blob/main/0629dy.py
# Raw: https://raw.githubusercontent.com/xfmeng970526/ql/main/0629dy.py
# Repo: xfmeng970526/ql
# Path: 0629dy.py
# UploadedAt: 2023-09-20T12:13:28+08:00
# SHA256: 2fc2cb5baa77102116a09e10f1c96acc2713ee5d51fd44bb063ddb4c088a8d0d
# Category: 微信小程序/抓包版
# Evidence: appid/openid/session_key/encryptedData等小程序字段
# coding=utf-8
cron: * 37 0-23 * * *
new Env('104-抖音极速版');
# 06-29 脚本发布地址 https://pc.fenchuan8.com/#/index?forum=38406 qq群号115194038
# 极速版-安卓
# 抓包内容 逛街一次 抓包done/shopping_gold?mode=done
# 如果逛街多可以用逛街,没有逛街或者逛街金币少 抓开宝箱的
# 全部的url#cookie#argus#ladon
# 自己填写ua可以更改剩余水滴数量
import json
import os
import random
import re
import time
import requests
from jsonsearch import JsonSearch
if os.name == 'nt':
from dotenv import load_dotenv
try:
load_dotenv(dotenv_path='dy_cookie.env', verbose=True)
except EnvironmentError:
print(EnvironmentError)
cookies = os.getenv('android_dyjsb') # 变量名
ua = 'com.ss.android.ugc.aweme.lite/250101 (Linux; U; Android 10; zh_CN_#Hans; LIO-AN00; Build/HUAWEILIO-AN00;tt-ok/3.12.13.1)'
debug_mode = 0
remain_water_num = 50 # 剩余水滴数
exec_orchard = True # 是否执行果园默认True执行
# 任务执行时间
task_schedule = {
'origin_task': '00:00:00-23:59:00',
'orchard_task': '000:00:00-23:59:00'
}
referer = 'https://tmaservice.developer.toutiao.com/?appid=tt521124accd2b7abe&version=0.5.23'
class User:
sdk_version = '2'
passport_sdk_version = '203100'
sign_completed = None
ad_req_id = None
ad_completed = None
team_info_arr = None
shopping_completed = None
treasure_box_req_id = ''
treasure_box_amount = 0 # 开宝箱获得的金币
treasure_box_score_amount = 0 # 开宝箱看广告获得的金币
treasure_box_next_time = None
amount = 0
water_num = None
bottle_state = None
exec_shopping = False
shake_tree = False
def __init__(self, cookie1):
self.task_url = cookie1.split("#")[0]
self.cookie = cookie1.split("#")[1]
self.argus = cookie1.split("#")[2]
self.ladon = cookie1.split("#")[3]
self.params = re.findall('\?(.*?)$', self.task_url)[0]
try:
temp = self.params
if temp.rfind('mode=done&') != -1:
self.clear_mode_params = re.findall('mode=done&(.*?)$', self.params)[0]
self.exec_shopping = True
else:
self.clear_mode_params = temp
except Exception:
print('url中没有mode=done')
def find_params(self):
json_data = JsonSearch(object=self.get_info(), mode='j')
task_list_arr = json_data.search_all_value('task_list')
task_list_path_arr = json_data.search_all_path('task_list')
treasure_box_info = json_data.search_first_value('treasure_box')
task_list = []
for t in task_list_arr:
if len(t) != 0:
task_list = t
task = {
'task_list': task_list
}
json_data = JsonSearch(object=task, mode='j')
task_id_arr = json_data.search_all_value('task_id')
task_id_dict = {
'新人签到': 1332,
'签到': 203,
'逛街赚钱': 1334,
'吃饭打卡赚金币': 1095,
'浏览爆款赚金币': 1455,
'搜索赚金币': 1495,
'看广告赚金币': 111,
'看小说赚金币': 1313,
'逛商城赚金币': 130024,
'逛热销爆品赚金币': 130003,
'看视频赚金币': 1007
}
try:
if task_id_dict.get('逛街赚钱') in task_id_arr:
shopping_info = task_list[task_id_arr.index(task_id_dict.get('逛街赚钱'))]
shopping_info_desc = shopping_info.get('desc')
shopping_max_count = re.findall('/([0-9]*)', shopping_info_desc)[0]
shopping_cur_count = re.findall('([0-9]*)/', shopping_info_desc)[0]
if shopping_cur_count == shopping_max_count:
self.shopping_completed = True
else:
self.shopping_completed = False
if task_id_dict.get('签到') in task_id_arr:
sign_info = task_list[task_id_arr.index(task_id_dict.get('签到'))]
else:
sign_info = task_list[task_id_arr.index(task_id_dict.get('新人签到'))]
sign_completed = sign_info.get('completed')
ad_info = task_list[task_id_arr.index(task_id_dict.get('看广告赚金币'))]
ad_completed = ad_info.get('completed')
ad_req_id = (json.loads(ad_info.get('status_extra'))).get('req_id')
# treasure_box_cur_time = treasure_box_info.get('treasure_stats').get('cur_time')
treasure_box_next_time = treasure_box_info.get('treasure_stats').get('next_time')
self.sign_completed = sign_completed
self.ad_completed = ad_completed
self.ad_req_id = ad_req_id
self.treasure_box_next_time = treasure_box_next_time
except:
print('【find_params 异常】')
def struct_requests(self, method, url, payload, referer):
# url 为完整的url
host = re.findall('https://(.*?)/', url)[0]
proxies = {
"http": None,
"https": None,
}
if method == 'get':
headers = {
'Host': host,
'User-Agent': ua,
'Connection': 'keep-alive',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'sdk-version': self.sdk_version,
'passport-sdk-version': self.passport_sdk_version,
'Cookie': self.cookie
}
if referer is not None:
headers['referer'] = referer
response = requests.get(url=url, headers=headers, proxies=proxies)
if debug_mode == 1:
print(response.text)
return response.json()
elif method == 'post':
headers = {
'Host': host,
'User-Agent': ua,
'Connection': 'keep-alive',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'sdk-version': self.sdk_version,
'passport-sdk-version': self.passport_sdk_version,
'x-argus': self.argus,
'x-ladon': self.ladon,
'Cookie': self.cookie
}
if referer is not None:
headers['referer'] = referer
if payload is not None:
headers['content-length'] = str(len(payload))
response = requests.post(url=url, headers=headers, data=payload, proxies=proxies)
else:
response = requests.post(url=url, headers=headers, proxies=proxies)
return response.json()
def get_info(self):
time.sleep(random.uniform(2, 5))
url = f"https://api5-normal-c-lf.amemv.com/luckycat/aweme/v1/task/page?" + self.params
response = self.struct_requests(method='get', url=url, payload=None, referer=None)
if debug_mode == 1:
print(response)
if response.get('err_no') == 0:
amount = response.get('data').get('income_data').get('amount1')
cash_amount = response.get('data').get('income_data').get('amount2')
total_amount = cash_amount * 100 + amount
cash_amount = ('%.2f' % (cash_amount / 100))
total_amount = ('%.2f' % (total_amount / 10000))
print(f'【查询信息】今日金币{amount},现金{cash_amount},总额{total_amount}')
if debug_mode == 1:
print(response.get("data").get("is_login"))
return response
else:
print('【查询信息】' + response.get('err_tips'))
def task(self, task_key):
temp = task_key
from_task_key = None
if task_key.rfind('#') != -1:
from_task_key = task_key[task_key.rfind('#') + 1:]
task_key = task_key[:task_key.rfind('#')]
url = f'https://api3-normal-c.amemv.com/luckycat/aweme/v1/task/{task_key}?' + self.params
task_key = temp
if task_key == 'done/sign_in':
time.sleep(random.uniform(3, 5))
payload = json.dumps({})
res = self.struct_requests(method='post', url=url, payload=payload, referer=None)
if debug_mode == 1:
print(res)
if res.get('err_no') == 0:
amount = res.get('data').get('amount')
print(f"【签到】获得{amount}金币")
self.amount += amount
return 1
else:
print('【签到】' + res.get('err_tips'))
elif task_key == 'done/excitation_ad':
# 每5分钟完成一次广告任务
# 获取广告金币数量
amount = self.task('excitation_ad/detail')
time.sleep(random.uniform(15, 25))
payload = json.dumps({
"amount": str(amount),
"inspire_modal_add_modal_manage": False,
"ad_rit": "12315",
"ad_inspire": {
"score_amount": str(amount),
"experience": "-1",
"req_id": str(self.ad_req_id)
},
"task_key": "excitation_ad",
"stage_score_amount": [],
"ad_alias_position": "task",
"need_reward": True,
"experience": "-1",
"params_for_special": "luckydog_sdk",
"static_settings_version": 50,
"dynamic_settings_version": 50,
"poll_settings_version": 0,
"aggr_income_id": ""
})
res = self.struct_requests(method='post', url=url, payload=payload, referer=None)
# print(res)
if debug_mode == 1:
print(res)
if res.get('err_no') == 0:
# if 'data' in res and 'amount' in res.get('data'):
amount = res.get('data').get('amount')
print(f"【看广告赚金币】第1个视频获得{amount}金币")
self.amount += amount
return 1
else:
print('【看广告赚金币】' + res.get('err_tips'))
return 0
elif task_key == 'done/treasure_task':
time.sleep(random.uniform(3, 5))
payload = json.dumps({})
res = self.struct_requests(method='post', url=url, payload=payload, referer=None)
if debug_mode == 1:
print('------【开宝箱】------')
print(res)
print('------------')
if res.get('err_no') == 0:
if 'data' in res and 'amount' in res.get('data'):
self.treasure_box_amount = res.get('data').get('amount')
self.treasure_box_score_amount = res.get('data').get('excitation_ad_info').get('score_amount')
self.treasure_box_req_id = res.get('data').get('excitation_ad_info').get('req_id')
print(f"【开宝箱】获得{self.treasure_box_amount}金币")
self.amount += self.treasure_box_amount
return 1
return 0
else:
print('【开宝箱】' + res.get('err_tips'))
return 0
elif task_key == 'done/excitation_ad_treasure_box':
# 看宝箱第一个广告
time.sleep(random.uniform(20, 25))
payload = json.dumps({
"amount": str(self.treasure_box_score_amount),
"inspire_modal_add_modal_manage": False,
"cat_treasure_reward": 0,
"ad_rit": "12317",
"ad_inspire": {
"score_amount": str(self.treasure_box_score_amount),
"amount": str(self.treasure_box_amount),
"req_id": str(self.treasure_box_req_id)
},
"task_key": "excitation_ad_treasure_box",
"stage_score_amount": [],
"ad_alias_position": "box",
"need_reward": True,
"finish_action": 0,
"params_for_special": "luckydog_sdk",
"static_settings_version": 50,
"dynamic_settings_version": 50,
"poll_settings_version": 0,
"aggr_income_id": ""
})
res = self.struct_requests(method='post', url=url, payload=payload, referer=None)
if debug_mode == 1:
print('------【宝箱】第1个视频------')
print(res)
print('------------')
if res.get('err_no') == 0:
amount = res.get('data').get('amount')
# print(amount)
print(f"【宝箱】第1个视频获得{amount}金币")
self.amount += amount
return 1
else:
print('【宝箱】第1个视频' + res.get('err_tips'))
return 0
elif task_key == 'done/excitation_ad/one_more#excitation_ad':
for rid in range(2):
time.sleep(random.uniform(20, 25))
payload = json.dumps({
"task_key": from_task_key,
"rit": "28038",
"creator_id": "12315000",
"one_more_round": rid,
"aggr_income_id": ""
})
res = self.struct_requests(method='post', url=url, payload=payload, referer=None)
if debug_mode == 1:
print(f'------【看广告赚金币】第{2 + rid}个视频------')
print(res)
print('------------')
if res.get('err_no') == 0:
amount = res.get('data').get('amount')
# print(amount)
print(f"【看广告赚金币】第{2 + rid}个视频获得{amount}金币")
self.amount += amount
else:
print(f'【看广告赚金币】第{2 + rid}个视频:' + res.get('err_tips'))
break
elif task_key == 'done/excitation_ad/one_more#excitation_ad_treasure_box':
for rid in range(2):
time.sleep(random.uniform(20, 25))
payload = json.dumps({
"task_key": from_task_key,
"rit": "28038",
"creator_id": "12317000",
"one_more_round": rid,
"aggr_income_id": ""
})
res = self.struct_requests(method='post', url=url, payload=payload, referer=None)
if debug_mode == 1:
print(f'------【宝箱】第{2 + rid}个视频------')
print(res)
print('------------')
if res.get('err_no') == 0:
amount = res.get('data').get('amount')
# print(amount)
print(f"【宝箱】第{2 + rid}个视频获得{amount}金币")
self.amount += amount
else:
print(f'【宝箱】第{2 + rid}个视频' + res.get('err_tips'))
break
elif task_key == 'done/shopping_gold':
# 逛街赚金币
time.sleep(random.uniform(30, 40))
payload = 'body=null'
res = self.struct_requests(method='post', url=url, payload=payload, referer=None)
if debug_mode == 1:
print('------【逛街赚金币】------')
print(res)
print('------------')
if res.get('err_no') == 0:
if 'data' in res and 'amount' in res.get('data'):
amount = res.get('data').get('amount')
print(f"【逛街赚金币】获得{amount}金币")
self.amount += amount
return 1
return 0
else:
print('【逛街赚金币】' + res.get('err_tips'))
return 0
elif task_key == 'walk/step_submit':
payload = json.dumps({
"step": 300,
"submit_time": int(time.time()),
"in_sp_time": 0
})
res = self.struct_requests(method='post', url=url, payload=payload, referer=None)
# print(res)
if res.get('err_no') == 0:
return 1
# else:
# print(f'【上传步数】没有返回金币数量')
# return 0
else:
print(f'【上传步数】' + res.get('err_tips'))
return 0
# ======================================== get方法 ====================================
elif task_key == 'excitation_ad/detail':
time.sleep(random.uniform(2, 5))
res = self.struct_requests(method='get', url=url, payload=None, referer=None)
if res.get('err_no') == 0:
if res.get('data').get('score_amount') is not None:
return res.get('data').get('score_amount')
else:
print(f'【获取第1个广告】没有返回金币数量')
return 0
else:
print(f'【获取第1个广告错误】' + res.get('err_tips'))
return 0
elif task_key == 'walk/page':
time.sleep(random.uniform(3, 6))
try:
time.sleep(random.uniform(2, 5))
res = self.struct_requests(method='get', url=url, payload=None, referer=None)
# print(res)
if res.get('err_no') == 0:
if 'data' in res and 'today_step' in res.get('data'):
today_step = res.get('data').get('today_step')
return today_step
else:
print(f'【获取步数】没有返回步数')
return -1
else:
print(f'【获取步数】' + res.get('err_tips'))
return -1
except Exception:
print('【walk/page】函数异常')
# =================================果园 ===============================
def game_orchard_task_list(self):
# 查询果园任务
time.sleep(random.uniform(3, 5))
url = 'https://minigame.zijieapi.com/ttgame/game_orchard/tasks/list?' + self.clear_mode_params
try:
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
# print(res)
if res.get('status_code') == 0:
task_list = res.get('data').get('tasks')
task_except_list = ['领取一次组队奖励', '分享找到的水滴给好友', '邀请好友种树领水滴',
'购买优惠好物', '体验道具拍视频']
todo_task_list = []
for t in task_list:
id = t.get('id')
state = t.get('reward_item').get('state')
action = t.get('action')
name = t.get('name')
if name not in task_except_list and state == 3:
todo_task_list.append(f'{id}#{action}')
# 返回格式为 id#action的list
return todo_task_list
else:
print('【果园 查询水滴任务】' + res.get('message'))
except AttributeError:
print('get值错误')
except Exception:
print('game_orchard_task_list 异常')
def game_orchard_sign_in_reward(self):
time.sleep(random.uniform(2, 4))
try:
url = 'https://minigame.zijieapi.com/ttgame/game_orchard/sign_in/reward?watch_ad=1&extra_ad_num=0&' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
if res.get('status_code') == 0:
reward_num = res.get('data').get('reward_item').get('num')
reward_name = res.get('data').get('reward_item').get('name')
cur_water_num = res.get('data').get('kettle').get('water_num')
cur_fertilizer_lite = res.get('data').get('fertilizer').get('lite')
cur_fertilizer_normal = res.get('data').get('fertilizer').get('normal')
print(f'【果园 签到】获得{reward_num}{reward_name}')
print(f'当前水滴{cur_water_num},小化肥{cur_fertilizer_lite},大化肥{cur_fertilizer_normal}')
else:
print('【果园 签到】' + res.get('message'))
except Exception:
print('game_orchard_sign_in_reward 异常')
def game_orchard_tasks_reward(self, todo_task_list):
# 做果园水滴任务
try:
for t in todo_task_list:
t_id = re.findall('^(.*?)#', t)[0]
t_action = re.findall('#(.*?)$', t)[0]
time.sleep(random.uniform(15, 30))
url = f'https://minigame.zijieapi.com/ttgame/game_orchard/tasks/reward?task_id={t_id}&do_action={t_action}&extra_ad_num=0&' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
if res.get('status_code') == 0:
reward_num = res.get('data').get('reward_item').get('num')
reward_name = res.get('data').get('reward_item').get('name')
cur_water_num = res.get('data').get('kettle').get('water_num')
cur_fertilizer_lite = res.get('data').get('fertilizer').get('lite')
cur_fertilizer_normal = res.get('data').get('fertilizer').get('normal')
print(f'【果园 任务】获得{reward_num}{reward_name}')
print(f'当前水滴{cur_water_num},小化肥{cur_fertilizer_lite},大化肥{cur_fertilizer_normal}')
else:
print('【果园 任务】' + res.get('message'))
except Exception:
print('game_orchard_tasks_reward 异常')
def game_orchard_water_bottle_reward(self):
# 领取水瓶的水
time.sleep(random.uniform(2, 4))
url = f'https://minigame.zijieapi.com/ttgame/game_orchard/water_bottle/reward?' + self.clear_mode_params
try:
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
if res.get('status_code') == 0:
reward_num = res.get('data').get('reward_item').get('num')
reward_name = res.get('data').get('reward_item').get('name')
cur_water_num = res.get('data').get('kettle').get('water_num')
cur_fertilizer_lite = res.get('data').get('fertilizer').get('lite')
cur_fertilizer_normal = res.get('data').get('fertilizer').get('normal')
print(f'【果园 领取水瓶的水】获得{reward_num}{reward_name}')
print(f'当前水滴{cur_water_num},小化肥{cur_fertilizer_lite},大化肥{cur_fertilizer_normal}')
else:
print('【果园 领取水瓶的水】' + res.get('message'))
except AttributeError:
print('get值错误')
except Exception:
print('【果园 领取水瓶的水】异常')
def game_orchard_tree_water(self, water_count):
# 可以查询果树所有信息
# three_water_resp.state == 4完成未领取 ==5已领取
# three_water_resp.times 浇水宝箱剩余浇水次数
# 浇水
try:
for count in range(water_count):
time.sleep(random.uniform(2, 4))
url = f'https://minigame.zijieapi.com/ttgame/game_orchard/tree/water?' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
# print(res)
# 最后一次打印明日领取水瓶的水的信息
if res.get('status_code') == 0:
cur_water_num = res.get('data').get('kettle').get('water_num')
today_watered_count = res.get('data').get('today_water')
progress_current = res.get('data').get('progress').get('current')
progress_target = res.get('data').get('progress').get('target')
bottle = res.get('data').get('bottle').get('water_num')
bottle_time = res.get('data').get('bottle').get('availiable_time')
three_water_resp_status = res.get('data').get('three_water_resp').get('state')
three_water_resp_remain_times = res.get('data').get('three_water_resp').get('times')
print(f'【果园】浇水1次成功,剩余水滴{cur_water_num}')
progress = "{:.2f}".format((progress_current / progress_target) * 100)
print(f'今日共浇水{today_watered_count}次,进度{progress}%')
shake_tree_state = res.get('data').get('shake_tree_state')
if self.shake_tree and (shake_tree_state == 2 or shake_tree_state == 3):
self.game_orchard_fortune_tree_shake()
# 需要完善摇树
if three_water_resp_remain_times != 0:
print(f'再浇水{three_water_resp_remain_times}次可领取浇水宝箱奖励')
elif three_water_resp_status == 4 and three_water_resp_remain_times == 0:
print('可领取浇水宝箱奖励')
self.game_orchard_three_water_reward()
else:
print('【果园】浇水1次' + res.get('message'))
break
except Exception:
print('game_orchard_tree_water 异常')
def game_orchard_three_water_reward(self):
time.sleep(random.uniform(2, 4))
url = 'https://minigame.zijieapi.com/ttgame/game_orchard/three_water/reward?' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
# print(res)
if res.get('status_code') == 0:
# 空
print('【果园 领取浇水宝箱奖励】成功')
else:
print('【果园 领取浇水宝箱奖励】' + res.get('message'))
def game_orchard_team_list(self):
# 组队领化肥
# 组队列表查询
try:
url = 'https://minigame.zijieapi.com/ttgame/game_orchard/team/list?open=open' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
# print(res)
if res.get('status_code') == 0:
reward_items_list = res.get('data').get('tasks').get('reward_items')
team_info_list = res.get('data').get('team_info')
todo_team_reward_dic = {} # 去领取团队奖励的dic
todo_token_list = [] # 好友的token
for l in reward_items_list:
if l.get('state') == 4:
todo_team_reward_dic[l.get('id')] = l.get('type')
for lindex in range(len(team_info_list)):
if lindex == 0:
continue
info = team_info_list[lindex]
if len(info.get('sec_uid')) > 0:
todo_token_list.append(info.get('token'))
# 执行组队奖励领取
todo_team_reward_dic_keys = todo_team_reward_dic.keys()
for key in todo_team_reward_dic_keys:
do_action = key
reward_type = todo_team_reward_dic.get(key)
self.game_orchard_team_reward(reward_type, do_action)
if len(todo_team_reward_dic) != 0:
time.sleep(random.uniform(4, 8))
return todo_token_list
else:
print('【组队列表查询】' + res.get('message'))
except Exception:
print('game_orchard_team_list 异常')
def game_orchard_team_reward(self, reward_type, do_action):
time.sleep(random.uniform(3, 5))
try:
url = f'https://minigame.zijieapi.com/ttgame/game_orchard/team/reward?type={reward_type}&do_action={do_action}&token=null&' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
type_and_name = {
1: '水滴',
4: '小化肥'
}
if res.get('status_code') == 0:
reward_num = res.get('data').get('reward_item').get('num')
reward_type = int(res.get('data').get('reward_item').get('type'))
cur_water_num = res.get('data').get('kettle').get('water_num')
cur_fertilizer_lite = res.get('data').get('fertilizer').get('lite')
cur_fertilizer_normal = res.get('data').get('fertilizer').get('normal')
print(f'【果园 组队奖励领取】获得{reward_num}{type_and_name.get(reward_type)}')
print(f'当前水滴{cur_water_num},小化肥{cur_fertilizer_lite},大化肥{cur_fertilizer_normal}')
else:
print('【果园 组队奖励领取】' + res.get('message'))
except Exception:
print('game_orchard_team_reward 异常')
def game_orchard_team_find_water(self, friend_token):
time.sleep(random.uniform(3, 5))
try:
url = f'https://minigame.zijieapi.com/ttgame/game_orchard/team/find_water?token={friend_token}&' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
if res.get('status_code') == 0:
friend_name = res.get('data').get('nick_name')
print(f'【果园 好友果园】好友:{friend_name}')
water_list = res.get('data').get('water_list')
return water_list
else:
print('【果园 好友果园】' + res.get('message'))
except Exception:
print('game_orchard_team_find_water 异常')
def game_orchard_team_gain_water(self, water_index, water_type, friend_token):
time.sleep(random.uniform(3, 5))
try:
url = f'https://minigame.zijieapi.com/ttgame/game_orchard/team/gain_water?water_index={water_index}&water_type={water_type}&token={friend_token}&' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
# print(res)
if res.get('status_code') == 0:
reward_num = res.get('data').get('reward_item').get('num')
reward_name = res.get('data').get('reward_item').get('name')
print(f'【果园 去好友果园】获得{reward_num}{reward_name}')
return 1
else:
print('【果园 去好友果园】' + res.get('message'))
return 0
except Exception:
print('game_orchard_team_gain_water 异常')
def game_orchard_fortune_tree_shake(self):
time.sleep(random.uniform(2, 5))
try:
url = 'https://minigame.zijieapi.com/ttgame/game_orchard/fortune_tree/shake?' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
if res.get('status_code') == 0:
reward_num = res.get('data').get('reward_item').get('num')
reward_name = res.get('data').get('reward_item').get('name')
print(f'【果园 摇树】获得{reward_num}{reward_name}')
else:
print('【果园 摇树】' + res.get('message'))
except Exception:
print('game_orchard_fortune_tree_shake 异常')
# 待完善
def game_orchard_three_gift_reward(self, task_id, watch_ad_type):
time.sleep(random.uniform(15, 20))
# task_id 0 早
# task_id 1 中
# task_id 2 晚
three_dift_dic = {
'1': '早餐',
'2': '午餐',
'3': '晚餐'
}
try:
url = f'https://minigame.zijieapi.com/ttgame/game_orchard/three_gift/reward?task_id={task_id}&watch_ad={watch_ad_type}&extra_ad_num=0&' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
if res.get('status_code') == 0:
reward_num = res.get('data').get('reward_item').get('num')
reward_name = res.get('data').get('reward_item').get('name')
cur_water_num = res.get('data').get('kettle').get('water_num')
cur_fertilizer_lite = res.get('data').get('fertilizer').get('lite')
cur_fertilizer_normal = res.get('data').get('fertilizer').get('normal')
print(f'【果园 三餐礼包{three_dift_dic.get(task_id)}】获得{reward_num}{reward_name}')
print(f'当前水滴{cur_water_num},小化肥{cur_fertilizer_lite},大化肥{cur_fertilizer_normal}')
else:
print('【果园 三餐礼包】' + res.get('message'))
except Exception:
print('game_orchard_three_gift_reward 异常')
def game_orchard_polling_info_write(self):
time.sleep(random.uniform(2, 5))
try:
url = 'https://minigame.zijieapi.com/ttgame/game_orchard/polling_info_write?' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
if res.get('status_code') == 0:
if 'kettle' in res.get('data') and 'water_num' in res.get('data').get('kettle'):
water_num = res.get('data').get('kettle').get('water_num')
self.water_num = water_num
if 'bottle' in res.get('data') and 'state' in res.get('data').get('bottle'):
bottle_state = res.get('data').get('bottle').get('state')
# print(f'【果园】当前水瓶状态{bottle_state}')
self.bottle_state = bottle_state
else:
print('【果园 信息查询】' + res.get('message'))
except Exception:
print('game_orchard_polling_info_write 异常')
def game_orchard_three_gift_list(self):
# 三餐礼包查询
time.sleep(random.uniform(2, 5))
try:
url = 'https://minigame.zijieapi.com/ttgame/game_orchard/three_gift/list?' + self.clear_mode_params
res = self.struct_requests(method='get', url=url, payload=None, referer=referer)
# print(res)
if res.get('status_code') == 0:
if 'data' in res and 'gift_list' in res.get('data'):
three_gift_list = res.get('data').get('gift_list')
three_gift_dic = {}
for l in three_gift_list:
# 查询未领取的三餐礼包
if l.get('current_rounds') == 0:
begin = l.get('available_time').get('begin')
end = l.get('available_time').get('end')
three_gift_dic[l.get('id')] = f'{begin}#{end}'
return three_gift_dic
else:
print('【果园 三餐礼包查询】' + res.get('message'))
except Exception:
print('game_orchard_three_gift_list 异常')
def run_test(self):
# 测试
self.game_orchard_sign_in_reward()
todo_task_list = self.game_orchard_task_list()
self.game_orchard_tasks_reward(todo_task_list)
todo_token_list = self.game_orchard_team_list()
for token in todo_token_list:
friend_orchard_water_list = self.game_orchard_team_find_water(token)
todo_friend_orchard_dic = {}
for l_index in range(len(friend_orchard_water_list)):
item = friend_orchard_water_list[l_index]
if item.get('has_gain') is False:
todo_friend_orchard_dic[l_index] = friend_orchard_water_list[l_index].get('type')
# 要执行的好友 key = index, value = type
if len(todo_friend_orchard_dic) == 0:
continue
keys = todo_friend_orchard_dic.keys()
for key in keys:
water_type = todo_friend_orchard_dic.get(key)
if self.game_orchard_team_gain_water(water_index=key, water_type=water_type,
friend_token=token) == 0:
break
time.sleep(random.uniform(5, 10))
three_gift_dic = self.game_orchard_three_gift_list()
print(three_gift_dic)
three_gift_keys = three_gift_dic.keys()
for key in three_gift_keys:
# 判断当前时间
task_hour = three_gift_dic.get(key)
task_id = key
start_hour = int(re.findall('^(.*?)#', task_hour)[0])
end_hour = int(re.findall('#(.*?)$', task_hour)[0])
format_hour = int(time.strftime('%H'))
format_minute_and_second = time.strftime('%M:%S')
# 执行正常领取
if start_hour <= format_hour < end_hour:
self.game_orchard_three_gift_reward(task_id, 1)
# 执行补领
elif format_hour >= end_hour and format_minute_and_second > '00:00':
self.game_orchard_three_gift_reward(task_id, 2)
time.sleep(random.uniform(5, 10))
def game_orchard_run(self):
format_time = time.strftime('%H:%M:%S')
# ==================== 领取水滴 ======================
# 签到 时间段06:00:00-08:00:00
if '06:00:00' <= format_time <= '08:00:00':
self.game_orchard_sign_in_reward()
# 水滴任务 时间段:08:00:00-10:00:00 14:00:00-16:00:00
if '08:00:00' <= format_time <= '10:00:00' or '14:00:00' <= format_time <= '16:00:00':
todo_task_list = self.game_orchard_task_list()
self.game_orchard_tasks_reward(todo_task_list)
# 去好友果园获取水滴 07:00:00-08:00:00 16:00:00-17:00:00
if '09:00:00' <= format_time <= '10:00:00' or '16:00:00' <= format_time <= '17:00:00':
todo_token_list = self.game_orchard_team_list()
for token in todo_token_list:
friend_orchard_water_list = self.game_orchard_team_find_water(token)
todo_friend_orchard_dic = {}
for l_index in range(len(friend_orchard_water_list)):
item = friend_orchard_water_list[l_index]
if item.get('has_gain') is False:
todo_friend_orchard_dic[l_index] = friend_orchard_water_list[l_index].get('type')
# 要执行的好友 key = index, value = type
if len(todo_friend_orchard_dic) == 0:
continue
keys = todo_friend_orchard_dic.keys()
for key in keys:
water_type = todo_friend_orchard_dic.get(key)
if self.game_orchard_team_gain_water(water_index=key, water_type=water_type,
friend_token=token) == 0:
break
time.sleep(random.uniform(5, 10))
if ('07:00:00' <= format_time <= '09:00:00') or ('11:00:00' <= format_time <= '14:00:00') or (
'18:00:00' <= format_time <= '21:00:00'):
three_gift_dic = self.game_orchard_three_gift_list()
if three_gift_dic is not None:
three_gift_keys = three_gift_dic.keys()
for key in three_gift_keys:
# 判断当前时间
task_hour = three_gift_dic.get(key)
task_id = key
start_hour = int(re.findall('^(.*?)#', task_hour)[0])
end_hour = int(re.findall('#(.*?)$', task_hour)[0])
format_hour = int(time.strftime('%H'))
format_minute_and_second = time.strftime('%M:%S')
# 执行正常领取
if start_hour <= format_hour < end_hour:
self.game_orchard_three_gift_reward(task_id, 1)
# 执行补领
elif format_hour >= end_hour and format_minute_and_second > '00:00':
self.game_orchard_three_gift_reward(task_id, 2)
time.sleep(random.uniform(5, 10))
# ==================== 浇水 ======================
# 查询
self.game_orchard_polling_info_write()
# 领取水瓶的水 08:00:00-10:00:00
if '08:00:00' <= format_time <= '10:00:00':
if self.bottle_state is not None and self.bottle_state != 3:
self.game_orchard_water_bottle_reward()
water_num = self.water_num
print(f'【果园】当前水滴{water_num}')
# 剩余水 其余全部浇水
water_count = int((water_num - remain_water_num) / 10)
# 浇水
self.game_orchard_tree_water(water_count)
print(f'【果园】已设置剩余水量{remain_water_num},不再浇水')
def origin_run(self):
if self.sign_completed:
print('【签到】已完成')
else:
self.task('done/sign_in')
if self.ad_completed:
print('【看广告赚金币】已完成')
else:
if self.task('done/excitation_ad'):
self.task('done/excitation_ad/one_more#excitation_ad')
cur_time = time.time()
if cur_time < self.treasure_box_next_time:
local_time = time.localtime(self.treasure_box_next_time)
formatted_time = time.strftime('%Y-%m-%d %H:%M:%S', local_time)
print(f'【开宝箱】时间未到,在{formatted_time}开宝箱')
else:
if self.task('done/treasure_task'): # 开宝箱
if self.task('done/excitation_ad_treasure_box'): # 看宝箱广告
self.task('done/excitation_ad/one_more#excitation_ad_treasure_box')
# 逛街任务
if self.shopping_completed is None or self.exec_shopping is False:
print('【逛街赚金币】不执行')
elif self.shopping_completed:
print('【逛街赚金币】已完成')
elif self.exec_shopping and self.shopping_completed is False:
self.task('done/shopping_gold')
def run(self):
origin_task_time = task_schedule.get('origin_task')
origin_task_time_start = re.findall('^(.*?)-', origin_task_time)[0]
origin_task_time_end = re.findall('-(.*?)$', origin_task_time)[0]
format_time = time.strftime('%H:%M:%S')
if origin_task_time_start <= format_time <= origin_task_time_end:
self.find_params()
self.origin_run()
print(f'本次执行获得{self.amount}金币')
else:
print('不在普通任务执行时间')
orchard_task_time = task_schedule.get('orchard_task')
orchard_task_time_start = re.findall('^(.*?)-', orchard_task_time)[0]
orchard_task_time_end = re.findall('-(.*?)$', orchard_task_time)[0]
if exec_orchard and orchard_task_time_start <= format_time <= orchard_task_time_end:
print('等待执行果园任务')
time.sleep(random.uniform(8, 20))
self.game_orchard_run()
elif exec_orchard is False:
print('设置不执行果园任务')
else:
print('不在果园任务执行时间')
if __name__ == "__main__":
user_cookie = cookies.split('\n')
print(f"极速版共获取到{len(user_cookie)}个账号")
i = 0
for cookie in user_cookie:
print(f"=========开始第{i + 1}个账号=========")
User(cookie).run()
if i != len(user_cookie) - 1:
i += 1
wait_time = random.randint(60, 150)
print(f'等待{wait_time}s')
time.sleep(wait_time)