mirror of
https://github.com/3288588344/toulu.git
synced 2025-12-16 15:00:14 +08:00
842 lines
33 KiB
JavaScript
842 lines
33 KiB
JavaScript
"""
|
||
|
||
>TL库:https://github.com/3288588344/toulu.git
|
||
tg频道:https://t.me/TLtoulu
|
||
QQ频道:https://pd.qq.com/s/672fku8ge
|
||
|
||
项目 全棉时代种棉花
|
||
入口 #小程序://全棉时代
|
||
变量 code #token#备注 多账号换行
|
||
变量名 qmzmh
|
||
|
||
|
||
"""
|
||
|
||
import os
|
||
import requests
|
||
from datetime import datetime, timezone, timedelta
|
||
import json
|
||
import time
|
||
import random
|
||
|
||
|
||
# 配置参数
|
||
base_url = "https://hxxxy.gov.cn"
|
||
user_agent = "Mozilla/5.0 (Linux; Android 11; ONEPLUS A6000 Build/RKQ1.201217.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20231201 MMWEBID/2930 MicroMessenger/8.0.45.2521(0x28002D3D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxdfcaa44b1aa891a7"
|
||
|
||
def get_beijing_date():
|
||
beijing_time = datetime.now(timezone(timedelta(hours=8)))
|
||
return beijing_time.date()
|
||
|
||
def dq_time():
|
||
dqsj = int(time.time())
|
||
dysj = datetime.fromtimestamp(dqsj).strftime('%Y-%m-%d %H:%M:%S')
|
||
print("当前时间戳:", dqsj)
|
||
print("转换后的时间:", dysj)
|
||
return dqsj, dysj
|
||
|
||
def get_env_variable(var_name):
|
||
value = os.getenv(var_name)
|
||
if value is None:
|
||
print(f'环境变量{var_name}未设置,请检查。')
|
||
return None
|
||
accounts = value.strip().split('\n')
|
||
print(f'-----------本次账号运行数量:{len(accounts)}-----------')
|
||
print(f'------全棉时代种棉花-----1.2------')
|
||
return accounts
|
||
|
||
def create_headers(code, token):
|
||
headers = {
|
||
'host': 'sg01.purcotton.com',
|
||
'accept': 'application/json, text/plain, */*',
|
||
'app-id': 'wxdfcaa44b1aa891a7',
|
||
'user-agent': user_agent,
|
||
'content-type': 'application/json;charset=UTF-8',
|
||
'origin': 'https://sg01.purcotton.com',
|
||
'x-requested-with': 'com.tencent.mm',
|
||
'sec-fetch-site': 'same-origin',
|
||
'sec-fetch-mode': 'cors',
|
||
'sec-fetch-dest': 'empty',
|
||
'accept-encoding': 'gzip, deflate',
|
||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||
'cookie': 'sajssdk_2015_cross_new_user=1',
|
||
'code': code,
|
||
'token': token,
|
||
}
|
||
return headers
|
||
|
||
|
||
def jscz(code, token): # 浇水
|
||
# 调用hqid函数并获取树木ID及其他信息
|
||
tree_id, sunshine, total_sunshine = hqid(code, token)
|
||
|
||
if tree_id is not None:
|
||
#print(f"获得的树木ID: {tree_id}")
|
||
# 可以在这里打印阳光信息,如果需要
|
||
#print(f"当前阳光: {sunshine}, 总阳光: {total_sunshine}")
|
||
|
||
while True: # 开始一个无限循环
|
||
url = "https://sg01.purcotton.com/api/watering"
|
||
data = {"tree_user_id": tree_id, "water_cnt": 1} # 使用动态获取的树木ID
|
||
headers = create_headers(code, token)
|
||
#print(data)
|
||
try:
|
||
response = requests.post(url, headers=headers, json=data)
|
||
response.raise_for_status()
|
||
response_data = response.json()
|
||
|
||
if response_data.get("code") == 200:
|
||
# 提取剩余水滴数
|
||
remaining_water = response_data["data"]["info"]["sy_water"]
|
||
print(f"剩余水滴数: {remaining_water}")
|
||
|
||
# 根据剩余水滴数决定是否继续
|
||
if remaining_water < 30: # 如果剩余水滴数小于30,则停止
|
||
print("水滴不足,停止浇水。")
|
||
break
|
||
|
||
print("执行浇水操作...")
|
||
# 暂停1到3秒
|
||
time.sleep(random.randint(1, 3))
|
||
|
||
elif response_data.get("code") == 400:
|
||
print(response_data.get("msg", "未知错误"))
|
||
break # 遇到错误时停止循环
|
||
else:
|
||
print("未知的响应code:", response_data.get("code"))
|
||
print("完整响应:", response_data)
|
||
break # 如果响应码不是200或400,停止循环
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
break # 请求异常时停止循环
|
||
else:
|
||
print("未能获取树木ID,无法执行浇水操作。")
|
||
|
||
|
||
def llhmp(code, token, action, tid): # 添加了tid参数
|
||
phone, _ = login(code, token) # 调用login函数,获取电话号码,忽略user_id
|
||
|
||
url = "https://nmp.pureh2b.com/api/purcotton/completetask"
|
||
headers = {
|
||
'Host': 'nmp.pureh2b.com',
|
||
'XWeb-Xhr': '1',
|
||
'Accept-Encoding': 'gzip, deflate, br',
|
||
'Accept-Language': 'zh-CN,zh;q=0.9',
|
||
'code': code,
|
||
'token': token,
|
||
}
|
||
data = {
|
||
'action': action,
|
||
'phone': phone,
|
||
'from': 'guoyuan'
|
||
}
|
||
#print(data)
|
||
|
||
try:
|
||
response = requests.post(url, headers=headers, data=data)
|
||
response.raise_for_status()
|
||
response_data = response.json() # 解析响应数据为JSON
|
||
|
||
action_descriptions = {
|
||
'browse_venue': '逛甄选好棉品',
|
||
'browse_new_user_zone': '浏览新用户专区',
|
||
'browse_community': '社区送福利',
|
||
'subscibe': '订阅奖励提醒'
|
||
|
||
}
|
||
action_description = action_descriptions.get(action, '执行任务')
|
||
|
||
#print(f"执行任务 '{action_description}' 响应内容:", response.text) # 打印响应内容
|
||
|
||
if response_data.get("code") == 200:
|
||
print(f"{action_description} 任务成功,暂停一段时间再继续...")
|
||
time.sleep(random.randint(15, 20))
|
||
tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数
|
||
elif response_data.get("code") == 400:
|
||
#print() # 打印响应内容
|
||
print(f"{action_description} :{response_data.get('msg')}")
|
||
#tjlq_mpjl(code, token, tid) # 在任务成功后调用领取奖励的函数
|
||
else:
|
||
print("{action_description} 收到未预期的响应,响应内容如下:")
|
||
print(response_data)
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
def tjlq_mpjl(code, token, tid): # 添加了tid参数来指定任务ID 提交 任务 领取奖励
|
||
url = "https://sg01.purcotton.com/api/task/receive-task-water"
|
||
headers = create_headers(code, token)
|
||
data = {"tid": tid} # 使用传入的任务ID
|
||
#print(data)
|
||
try:
|
||
response = requests.post(url, headers=headers, json=data) # 发送POST请求
|
||
response.raise_for_status() # 检查响应状态码
|
||
|
||
# 解析响应数据
|
||
response_data = response.json()
|
||
if response_data.get("code") == 200:
|
||
print("奖励领取成功。")
|
||
# 打印sy_water和get_water
|
||
data = response_data.get("data", {})
|
||
sy_water = data.get("sy_water", "未知") #
|
||
get_water = data.get("get_water", "未知") # 同上
|
||
print(f"剩余水量:{sy_water}, 获取水量:{get_water}")
|
||
else:
|
||
print(f"奖励领取失败,错误信息:{response_data.get('msg')}")
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
def task_list(code, token): # 任务列表
|
||
url = "https://sg01.purcotton.com/api/task/list"
|
||
headers = create_headers(code, token)
|
||
today_date = datetime.now().strftime("%Y-%m-%d") # 获取今天的日期,格式为YYYY-MM-DD
|
||
|
||
# 任务ID到任务名称的映射
|
||
task_names = {
|
||
1: "签到, 1",
|
||
2: "不知道1, 0",
|
||
4: "三餐福袋, 3",
|
||
6: "逛甄选好棉品, 4",
|
||
10: "订阅奖励提醒, 1",
|
||
13: "浏览新用户, 2",
|
||
14: "庄园小课堂, 3",
|
||
15: "棉花工厂, 1",
|
||
16: "社区送福利, 1"
|
||
}
|
||
|
||
try:
|
||
response = requests.get(url, headers=headers)
|
||
response.raise_for_status()
|
||
response_data = response.json()
|
||
today_tasks = [] # 用于存储今天的任务信息
|
||
if response_data.get("code") == 200:
|
||
task_user_info = response_data.get("data", {}).get("task_user_info", [])
|
||
print("------任务进度条-----------")
|
||
for task in task_user_info:
|
||
task_id = task.get('task_id')
|
||
complete_num = task.get('complete_num')
|
||
complete_date = task.get('complete_date')
|
||
# 比较任务完成日期是否为今天
|
||
#print("------任务进度条-----------")
|
||
if complete_date == today_date:
|
||
task_name = task_names.get(task_id, f"未知任务 {task_id}") # 获取任务名称,如果未知则显示未知任务和ID
|
||
|
||
print(f"任务ID: {task_id} {task_name}/{complete_num}, 任务时间: {complete_date}")
|
||
#print(f"{task_name}/{complete_num} 时间: {complete_date}")
|
||
today_tasks.append(task)
|
||
print("-----------------")
|
||
print()
|
||
return today_tasks
|
||
|
||
else:
|
||
print(f"获取任务列表失败,错误信息:{response_data.get('msg')}")
|
||
return []
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
return []
|
||
|
||
|
||
|
||
def pdrw(code, token): # 判断任务
|
||
"""根据任务完成情况执行任务"""
|
||
try:
|
||
task_user_info = task_list(code, token)
|
||
|
||
task_completion_limits = {
|
||
6: 4,# 任务ID为6的任务只能完成4次 逛甄选好棉品
|
||
13: 2, # 任务ID为13的任务只能完成2次 浏览新用户专区
|
||
15: 1, # 假设任务ID为15的任务只能完成1次 棉花工厂
|
||
4: 3, # 4 3次三餐福袋 7-12 14-17 18-22
|
||
16: 1, # ID 16 社区送福利
|
||
10: 1, # ID 10 订阅奖励提醒
|
||
14: 1, #ID14 #庄园小课堂
|
||
1: 1, #ID #签到
|
||
}
|
||
|
||
# 先检查所有指定的任务是否已经存在于任务列表中
|
||
existing_task_ids = [task['task_id'] for task in task_user_info]
|
||
#print(existing_task_ids)
|
||
# 遍历每个任务ID,检查是否需要执行任务
|
||
for task_id, max_completes in task_completion_limits.items():
|
||
task_info = next((task for task in task_user_info if task['task_id'] == task_id), None)
|
||
|
||
if task_info:
|
||
complete_num = task_info['complete_num']
|
||
if complete_num < max_completes:
|
||
#print(f"任务ID: {task_id}, 当前完成次数: {complete_num}, 将执行任务并尝试领取奖励。")
|
||
print()
|
||
if task_id == 6:
|
||
llhmp(code, token, 'browse_venue', '6')
|
||
#today_water(code, token)
|
||
elif task_id == 13:
|
||
llhmp(code, token, 'browse_new_user_zone', '13')
|
||
today_water(code, token)
|
||
sj_yg(code, token)#收集阳光
|
||
syyg(code, token)#使用阳光
|
||
# 这里可以添加其他任务ID的逻辑
|
||
elif task_id == 15:
|
||
# 对于任务ID 15的特定处理
|
||
complete_task(code, token, '15')
|
||
elif task_id == 16:
|
||
llhmp(code, token, 'browse_community', '16')
|
||
|
||
elif task_id == 10:
|
||
llhmp(code, token, 'subscibe', '10')
|
||
elif task_id == 14:
|
||
hdwt_box(code, token, '14')
|
||
elif task_id == 4:
|
||
# 对于任务ID 15的特定处理
|
||
lq_fd(code, token, '4')
|
||
|
||
elif task_id == 1:
|
||
lq_fd(code, token, '1')
|
||
time.sleep(random.randint(1, 5))
|
||
|
||
|
||
elif task_id not in existing_task_ids:
|
||
#print(f"任务ID: {task_id}, 未在列表中,将尝试执行并领取奖励。")
|
||
print()
|
||
if task_id == 6:
|
||
llhmp(code, token, 'browse_venue', '6')
|
||
today_water(code, token)
|
||
elif task_id == 13:
|
||
llhmp(code, token, 'browse_new_user_zone', '13')
|
||
sj_yg(code, token)#收集阳光
|
||
syyg(code, token)#使用阳光
|
||
elif task_id == 15:
|
||
complete_task(code, token, '15')
|
||
elif task_id == 16:
|
||
llhmp(code, token, 'browse_community', '16')
|
||
elif task_id == 10:
|
||
llhmp(code, token, 'subscibe', '10')
|
||
elif task_id == 14:
|
||
hdwt_box(code, token, '14')
|
||
elif task_id == 1:
|
||
lq_fd(code, token, '1')
|
||
|
||
elif task_id == 4:
|
||
lq_fd(code, token, '4')
|
||
|
||
|
||
time.sleep(random.randint(1, 5))
|
||
|
||
|
||
|
||
|
||
# 添加其他任务ID和类型的逻辑
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
|
||
|
||
|
||
|
||
# 任务 数据
|
||
def complete_task(code, token, tid): # 棉花工厂
|
||
url = "https://sg01.purcotton.com/api/task/complete-manual-task"
|
||
headers = create_headers(code, token)
|
||
payload = {
|
||
"tid": tid,
|
||
"relate_id": 0,
|
||
}
|
||
|
||
try:
|
||
response = requests.post(url, headers=headers, json=payload)
|
||
response.raise_for_status() # 检查HTTP响应状态码,如果不是200系列,则抛出异常
|
||
|
||
# 解析响应数据
|
||
response_data = response.json()
|
||
if response_data.get("code") == 200:
|
||
print("奖励领取成功。")
|
||
tjlq_mpjl(code, token, tid)
|
||
else:
|
||
# 如果响应中的code不是200,打印错误信息
|
||
print(f"任务失败:{response_data.get('msg')}")
|
||
except requests.exceptions.RequestException as e:
|
||
# 如果请求过程中发生异常,打印异常信息
|
||
print(f"请求失败: {e}")
|
||
|
||
|
||
def lq_fd(code, token, tid): # 三餐福袋和签到
|
||
# 确保tid为整数类型
|
||
tid = int(tid) # 将tid转换为整型以确保与整数进行比较
|
||
|
||
task_name = "未知任务"
|
||
if tid == 4:
|
||
task_name = "三餐福袋" #7-12 14-17 18-22
|
||
elif tid == 1:
|
||
task_name = "签到"
|
||
|
||
url = "https://sg01.purcotton.com/api/task/complete-task"
|
||
headers = create_headers(code, token)
|
||
data = {"tid": tid} # 使用传入的任务ID
|
||
try:
|
||
response = requests.post(url, headers=headers, json=data)
|
||
response.raise_for_status() # 检查响应状态码
|
||
|
||
# 解析响应数据
|
||
response_data = response.json()
|
||
if response_data.get("code") == 200:
|
||
print(f"{task_name} 奖励领取成功。")
|
||
# 打印sy_water和get_water
|
||
data = response_data.get("data", {})
|
||
sy_water = data.get("sy_water", "未知")
|
||
get_water = data.get("get_water", "未知")
|
||
print(f"{task_name} 剩余水量:{sy_water}, 获取水量:{get_water}")
|
||
else:
|
||
print(f"{task_name}:{response_data.get('msg')}")
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
# 任务 完
|
||
|
||
# 提取数据 开始
|
||
|
||
def hqid(code, token): # 获取树木ID和阳光信息
|
||
url = "https://sg01.purcotton.com/api/index"
|
||
|
||
headers = create_headers(code, token)
|
||
|
||
try:
|
||
response = requests.get(url, headers=headers)
|
||
response.raise_for_status()
|
||
|
||
response_data = response.json()
|
||
# print("Response JSON:", response_data) # 用于调试
|
||
|
||
if response_data.get("code") == 200:
|
||
tree_data = response_data['data']['tree']
|
||
user_data = response_data['data']['user'] # 获取用户相关数据
|
||
|
||
# 获取树木ID
|
||
tree_id = tree_data.get('id')
|
||
|
||
# 获取阳光相关数据
|
||
sunshine = user_data.get('sunshine', 0) # 如果不存在,则默认为0
|
||
total_sunshine = user_data.get('total_sunshine', 0) # 如果不存在,则默认为0
|
||
|
||
# 可以选择打印这些信息
|
||
#print(f"树木ID: {tree_id} 当前阳光: {sunshine} 总阳光: {total_sunshine} ")
|
||
|
||
|
||
# 根据需要返回所需的数据,这里返回一个包含所有信息的元组
|
||
return tree_id, sunshine, total_sunshine
|
||
else:
|
||
print(f"请求失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||
return None, None, None # 如果请求失败,返回包含None的元组
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
return None, None, None # 如果发生异常,返回包含None的元组
|
||
|
||
|
||
def login(code, token): # 提取的号码
|
||
url = "https://sg01.purcotton.com/api/login"
|
||
headers = create_headers(code, token)
|
||
data = {
|
||
"invite_source": "task",
|
||
"channel": "" # "channel": "zmh_assist"
|
||
}
|
||
|
||
try:
|
||
response = requests.post(url, headers=headers, json=data)
|
||
response.raise_for_status() # 检查HTTP响应状态
|
||
|
||
response_data = response.json()
|
||
if response_data.get("code") == 200:
|
||
phone = response_data["data"]["phone"]
|
||
user_id = response_data["data"]["id"] # 提取id
|
||
#print("提取的电话号码:", phone)
|
||
#print("提取的用户ID:", user_id) # 打印id
|
||
return phone, user_id # 返回电话号码和用户ID
|
||
else:
|
||
print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg"))
|
||
return None, None
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
return None, None
|
||
|
||
# 提取数据 完
|
||
|
||
# 回答问题
|
||
def hdwt_box(code, token, tid): #庄园小课堂
|
||
url = "https://sg01.purcotton.com/api/answer"
|
||
headers = create_headers(code, token)
|
||
|
||
try:
|
||
response = requests.get(url, headers=headers)
|
||
response.raise_for_status()
|
||
response_data = response.json()
|
||
exams = response_data.get("data", {}).get("exams", [])
|
||
#print(response.json())
|
||
for exam in exams:
|
||
exam_id = exam.get('id')
|
||
print(f"正在处理问题ID: {exam_id}")
|
||
|
||
# 这里是你提交答案的代码逻辑
|
||
url_submit_answer = "https://sg01.purcotton.com/api/answer/complete"
|
||
payload = {
|
||
"tid": tid, # 假设任务ID为14
|
||
"exam_id": exam_id,
|
||
"win": 1 # 假设标记为正确
|
||
}
|
||
submit_response = requests.post(url_submit_answer, headers=headers, json=payload)
|
||
submit_response.raise_for_status()
|
||
|
||
if submit_response.status_code == 200:
|
||
submit_response_data = submit_response.json()
|
||
#print(submit_response_data) # 打印完整的响应体
|
||
|
||
# 提取并打印get_water, complete_num, 和 box_id
|
||
get_water = submit_response_data.get("data", {}).get("get_water", 0)
|
||
complete_num = submit_response_data.get("data", {}).get("complete_num", 0)
|
||
box_id = submit_response_data.get("data", {}).get("box_id", 0)
|
||
print(f"获取水量:{get_water}, 完成数量:{complete_num}, 宝箱ID:{box_id}")
|
||
|
||
# 如果box_id大于0,则打开宝箱
|
||
if box_id > 0:
|
||
print(f"检测到宝箱ID: {box_id},尝试打开宝箱...")
|
||
url_open_box = "https://sg01.purcotton.com/api/answer/open-box"
|
||
box_payload = {"box_id": box_id}
|
||
box_response = requests.post(url_open_box, headers=headers, json=box_payload)
|
||
box_response.raise_for_status()
|
||
|
||
if box_response.status_code == 200:
|
||
box_response_data = box_response.json()
|
||
# print(f"宝箱 {box_id} 打开成功,响应内容:", box_response_data)
|
||
# 提取sy_water和get_water
|
||
sy_water = box_response_data.get("data", {}).get("sy_water", 0)
|
||
get_water = box_response_data.get("data", {}).get("get_water", 0)
|
||
print(f"宝箱 剩余水量:{sy_water}, 宝箱水量:{get_water}")
|
||
|
||
|
||
# 随机停止3-5秒
|
||
time.sleep(random.randint(3, 5))
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
|
||
def today_water(code, token):#
|
||
url = "https://sg01.purcotton.com/api/get-today-water"
|
||
headers = create_headers(code, token) # 确保 create_headers 函数正确定义并返回所需的头部信息
|
||
|
||
try:
|
||
response = requests.post(url, headers=headers)
|
||
response.raise_for_status() # 确保响应状态为200
|
||
|
||
# 解析响应体为JSON
|
||
response_data = response.json()
|
||
|
||
# 检查响应中的code字段
|
||
if response_data.get("code") == 200:
|
||
#print("完整响应体:", response_data) # 打印完整的响应体
|
||
|
||
# 提取所需数据
|
||
sy_water = response_data.get("data", {}).get("sy_water", "未知")
|
||
get_water = response_data.get("data", {}).get("get_water", "未知")
|
||
tomorrow_get_water_num = response_data.get("data", {}).get("tomorrow_get_water_num", "未知")
|
||
|
||
#print(f"剩余水量(sy_water): {sy_water}")
|
||
print(f"今日获取水量: {get_water}")
|
||
print(f"明日可获取水量: {tomorrow_get_water_num}")
|
||
print(f"今日获取水量: {get_water} 明日可获取水量: {tomorrow_get_water_num}")
|
||
else:
|
||
# 打印错误消息
|
||
print(f"水瓶 {response_data.get('msg', '未知错误')}")
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
def cscscs(code, token):
|
||
url = "https://sg01.purcotton.com/api/statistics/store"
|
||
headers = create_headers(code, token)
|
||
_, user_id = login(code, token) # 调用login函数,忽略电话号码,只获取user_id
|
||
data = {
|
||
"uid": user_id,
|
||
"type": 301 # 确保这里的值符合API的要求
|
||
}
|
||
#print(data) # 打印整个响应数据
|
||
try:
|
||
response = requests.post(url, headers=headers, json=data)
|
||
response.raise_for_status() # 检查HTTP响应状态
|
||
|
||
response_data = response.json()
|
||
#print(response_data) # 打印整个响应数据
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
# 阳光
|
||
|
||
def sj_yg(code, token):
|
||
success = False
|
||
while not success:
|
||
url = "https://sg01.purcotton.com/api/get-sunshine"
|
||
headers = create_headers(code, token)
|
||
# 使用当前时间戳
|
||
payload = {"time": int(time.time() * 1000)}
|
||
#print(f"请求负载: {payload}")
|
||
|
||
try:
|
||
response = requests.post(url, headers=headers, json=payload)
|
||
response_data = response.json()
|
||
|
||
if response.status_code == 200:
|
||
if response_data["code"] == 200:
|
||
sy_sunshine = response_data['data'].get('sy_sunshine')
|
||
get_sunshine = response_data['data'].get('get_sunshine')
|
||
print(f"成功领取阳光: 剩余阳光: {sy_sunshine}, 获得阳光: {get_sunshine}")
|
||
success = True # 标记成功领取,退出循环
|
||
elif response_data["code"] == 400:
|
||
print("没有可领取的阳光")
|
||
break # 如果没有可领取的阳光,跳出循环
|
||
else:
|
||
print(f"阳光操作响应: {response_data}")
|
||
else:
|
||
print(f"请求失败,HTTP状态码: {response.status_code}")
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
if success:
|
||
# 如果成功领取阳光,则暂停1到3秒后继续
|
||
sleep_time = random.randint(1, 3)
|
||
print(f"暂停{sleep_time}秒后重新领取...")
|
||
time.sleep(sleep_time)
|
||
success = False # 重置成功标志,继续领取
|
||
|
||
def syyg(code, token):
|
||
"""当阳光值大于100时,完成阳光任务"""
|
||
# 假设hqid返回树木ID,sunshine,和其他信息
|
||
_, sunshine, _ = hqid(code, token)
|
||
|
||
if sunshine > 99:
|
||
url = "https://sg01.purcotton.com/api/sunshine-task/complete-task"
|
||
headers = create_headers(code, token) # 使用create_headers函数创建请求头
|
||
payload = {"tid": 1} # 固定payload,可能需要根据API文档调整
|
||
|
||
try:
|
||
response = requests.post(url, headers=headers, json=payload)
|
||
response.raise_for_status() # 检查响应是否成功
|
||
|
||
response_data = response.json()
|
||
if response_data.get("code") == 200:
|
||
print("成功完成阳光任务。")
|
||
# 这里可以根据响应体进一步处理,如打印信息或记录日志
|
||
else:
|
||
print(f"完成阳光任务失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求完成阳光任务时出错: {e}")
|
||
else:
|
||
print(f"阳光值未达到{sunshine}/100,不执行任务。")
|
||
|
||
|
||
|
||
|
||
|
||
# 好友?
|
||
|
||
|
||
def hyid(code, token):
|
||
url = "https://sg01.purcotton.com/api/friend/list?page=1&page_size=50"
|
||
headers = create_headers(code, token)
|
||
|
||
try:
|
||
response = requests.get(url, headers=headers)
|
||
response.raise_for_status() # 确保响应状态为200
|
||
|
||
# 解析响应体为JSON
|
||
response_data = response.json()
|
||
|
||
friend_user_ids = [] # 用于存储符合条件的朋友的用户ID
|
||
if response_data.get("code") == 200:
|
||
friends_list = response_data.get("data", {}).get("list", [])
|
||
for friend in friends_list:
|
||
friend_user_id = friend.get("friend_user_id")
|
||
help_water_cnt = friend.get("help_water_cnt")
|
||
be_help_water_cnt = friend.get("friend_user_info", {}).get("be_help_water_cnt")
|
||
#print(f"朋友用户ID: {friend_user_id}, 帮忙浇水次数: {help_water_cnt}, 被帮忙浇水次数: {be_help_water_cnt}")
|
||
|
||
# 只有当帮忙浇水次数小于1时,才收集该朋友的用户ID
|
||
if help_water_cnt < 1:
|
||
friend_user_ids.append(friend_user_id)
|
||
|
||
return friend_user_ids # 返回所有符合条件收集到的用户ID
|
||
else:
|
||
print("请求失败,错误代码:", response_data.get("code"), "错误信息:", response_data.get("msg"))
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
|
||
|
||
|
||
def access_friend_detail(code, token, friend_user_id):
|
||
"""访问朋友的详细信息,并尝试对其树进行浇水操作"""
|
||
url = "https://sg01.purcotton.com/api/friend/index"
|
||
headers = create_headers(code, token)
|
||
headers['friend-id'] = str(friend_user_id)
|
||
|
||
try:
|
||
response = requests.get(url, headers=headers)
|
||
response.raise_for_status()
|
||
response_data = response.json()
|
||
|
||
if response_data.get("code") == 200:
|
||
tree_info = response_data.get('data', {}).get('tree', {})
|
||
if isinstance(tree_info, list) and tree_info:
|
||
tree_info = tree_info[0]
|
||
|
||
tree_id = tree_info.get('id') if isinstance(tree_info, dict) else None
|
||
help_water_info = response_data.get('data', {}).get('help_water', {})
|
||
help_water_code = help_water_info.get('code')
|
||
help_water_msg = help_water_info.get('msg')
|
||
|
||
#print(f"{friend_user_id}朋友树ID: {tree_id}, 帮忙浇水代码: {help_water_code}, 信息: '{help_water_msg}'")
|
||
|
||
if tree_id is not None:
|
||
success = water_friend_tree(code, token, tree_id, friend_user_id)
|
||
if not success:
|
||
print(f"由于操作失败,停止处理朋友{friend_user_id}的后续操作。")
|
||
return False
|
||
else:
|
||
print(f"获取朋友{friend_user_id}的详细信息失败,错误代码: {response_data.get('code')}, 错误信息: {response_data.get('msg')}")
|
||
return False
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
return False
|
||
|
||
return True
|
||
|
||
def water_friend_tree(code, token, tree_id, friend_user_id):
|
||
"""执行给定朋友的树浇水操作"""
|
||
url = "https://sg01.purcotton.com/api/friend/water"
|
||
headers = create_headers(code, token)
|
||
payload = {"tree_user_id": tree_id}
|
||
headers['friend-id'] = str(friend_user_id)
|
||
|
||
try:
|
||
response = requests.post(url, headers=headers, json=payload)
|
||
response.raise_for_status()
|
||
|
||
response_data = response.json()
|
||
#print(response_data) # 打印整个响应体,用于调试
|
||
|
||
if response_data["code"] == 200:
|
||
# 检查response_data['data']是否为字典,以此判断是否可以安全访问'info'
|
||
if isinstance(response_data['data'], dict):
|
||
use_water = response_data['data']['info'].get('use_water', '未知')
|
||
reward_water = response_data['data']['info'].get('reward_water', '未知')
|
||
print(f"对树ID {tree_id} 的浇水操作成功: 使用水量: {use_water}, 奖励水量: {reward_water}")
|
||
else:
|
||
# 如果data不是字典,直接打印data字段,这里可能是错误消息或其他说明
|
||
print(f"操作结果: {response_data['data']}")
|
||
return False
|
||
elif response_data["code"] == 400:
|
||
#print(f"{response_data.get('msg', '未知错误')}. 完整响应体: {response_data}")
|
||
print(f"{response_data.get('msg', '未知错误')}. ")
|
||
return False
|
||
else:
|
||
print(f"对树ID {tree_id} 的浇水操作响应: {response_data}")
|
||
return False
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
print(f"请求失败: {e}")
|
||
return False
|
||
|
||
return True
|
||
|
||
def process_all_friends(friends_user_ids, code, token):
|
||
"""遍历朋友列表,尝试对每个朋友的树进行浇水操作,并在首次失败时停止"""
|
||
for friend_user_id in friends_user_ids:
|
||
if not access_friend_detail(code, token, friend_user_id):
|
||
#print(f"由于操作失败,停止对所有后续朋友的处理。")
|
||
break # 遇到第一个失败,立即跳出循环
|
||
|
||
|
||
|
||
def main():
|
||
var_name = 'qmzmh'
|
||
tokens = get_env_variable(var_name)
|
||
if not tokens:
|
||
return
|
||
|
||
total_tokens = len(tokens)
|
||
|
||
if total_tokens > 20:
|
||
print("账号数量超过20个,不执行操作。")
|
||
return
|
||
|
||
|
||
for index, token_info in enumerate(tokens, start=1):
|
||
parts = token_info.split('#')
|
||
if len(parts) < 2:
|
||
print("令牌格式不正确。跳过处理。")
|
||
continue
|
||
|
||
code = parts[0]
|
||
token = parts[1]
|
||
remark = parts[2] if len(parts) > 2 else ""
|
||
print()
|
||
print(f"------账号{index}/{total_tokens},备注: {remark}-------")
|
||
|
||
phone, user_id = login(code, token)
|
||
if phone and user_id: # 检查是否成功获取电话号码和用户ID
|
||
# 进行后续任务
|
||
cscscs(code, token)
|
||
#sj_yg(code, token)#收集阳光
|
||
#syyg(code, token)#使用阳光
|
||
jscz(code, token) #浇水
|
||
pdrw(code, token) #任务判断
|
||
friend_user_ids = hyid(code, token)
|
||
if friend_user_ids:
|
||
process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表
|
||
else:
|
||
print("登录失败或获取用户信息失败,跳过当前账号的后续操作。")
|
||
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
|
||
'''
|
||
def main():
|
||
var_name = 'qmzmh'
|
||
tokens = get_env_variable(var_name)
|
||
if not tokens:
|
||
return
|
||
|
||
total_tokens = len(tokens)
|
||
|
||
if total_tokens > 20:
|
||
print("账号数量超过20个,不执行操作。")
|
||
return
|
||
|
||
for index, token_info in enumerate(tokens, start=1):
|
||
parts = token_info.split('#')
|
||
if len(parts) < 2:
|
||
print("令牌格式不正确。跳过处理。")
|
||
continue
|
||
|
||
code = parts[0]
|
||
token = parts[1]
|
||
remark = parts[2] if len(parts) > 2 else ""
|
||
|
||
print(f"------账号{index}/{total_tokens},备注: {remark}-------")
|
||
|
||
|
||
login(code, token)#判断要手机号码/提取的电话号码: 才运行下面的任务
|
||
cscscs(code, token)#更新
|
||
#sj_yg(code, token)#收集阳光
|
||
#syyg(code, token)#使用阳光
|
||
jscz(code, token) #浇水
|
||
pdrw(code, token) #任务判断
|
||
friend_user_ids = hyid(code, token)
|
||
if friend_user_ids:
|
||
process_all_friends(friend_user_ids, code, token) # 正确传入朋友ID列表
|
||
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
''' |