# 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)