mirror of
https://github.com/XiaoGe-LiBai/yangmao.git
synced 2025-12-17 05:18:14 +08:00
创建 农夫山泉龙年任务.py
This commit is contained in:
497
农夫山泉龙年任务.py
Normal file
497
农夫山泉龙年任务.py
Normal file
@@ -0,0 +1,497 @@
|
||||
"""
|
||||
--------介绍--------------
|
||||
搜 https://gateway.jmhd8.com/geement.marketinglottery/api/v1/marketinglottery
|
||||
抽奖一次就出来
|
||||
|
||||
入口 #小程序://龙年吉祥/tanOZLnNuagiQfa
|
||||
|
||||
变量 apitoken#unique_identity#请求体#备注
|
||||
变量名 nfsqrw
|
||||
多账号 换行/回车
|
||||
脚本作者: QGh3amllamll
|
||||
版本1.22
|
||||
-----------更新说明--
|
||||
1.1 更新 不运行游戏逻辑
|
||||
1.2 更新白嫖每日抽奖
|
||||
1.21 固定抽奖每日抽奖id
|
||||
1.22 更新 浏览公众号文章 自动匹配/遍历任务 (默认固定任务)
|
||||
-------------使用说明--
|
||||
user_agent 复制一个进去脚本就可以
|
||||
|
||||
"""
|
||||
import os
|
||||
import requests
|
||||
from datetime import datetime, timezone, timedelta
|
||||
import json
|
||||
import time
|
||||
import random
|
||||
|
||||
#---------简化的框架0.2--------
|
||||
#-----本地使用方法-----
|
||||
|
||||
#本地测试用 下面nfsqrwcs 改成nfsqrw 变量放进去就可以
|
||||
os.environ['nfsqrwcs'] = '''
|
||||
apitoken#unique_identity#unique_identity#备注
|
||||
apitoken#unique_identity#unique_identity#备注
|
||||
apitoken#unique_identity#unique_identity#备注
|
||||
'''
|
||||
#-------本地运行------
|
||||
|
||||
|
||||
|
||||
#-------------配置参数 开始----------------------------
|
||||
base_url = "https://gateway.jmhd8.com" # 修改为实际的基础URL
|
||||
user_agent = ""
|
||||
rwbl = 0 # 任务中心函数开关变量 0固定任务 1 遍历任务版(自动匹配) 默认固定版
|
||||
|
||||
#user_agent = ""备份
|
||||
|
||||
#----------------------设置完成----------------------------
|
||||
def get_beijing_date(): # 获取北京日期的函数
|
||||
beijing_time = datetime.now(timezone(timedelta(hours=8)))
|
||||
return beijing_time.date()
|
||||
|
||||
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') # 假设每行是一个账户信息
|
||||
num_accounts = len(accounts) # 计算账号数量
|
||||
print(f'-----------本次账号运行数量:{num_accounts}-----------')
|
||||
print(f'-----------农夫山泉龙年任务-----------')
|
||||
print(f'-----------脚本作者: QGh3amllamll -----------')
|
||||
|
||||
return accounts
|
||||
|
||||
def get_action_time():#当前时间并格式化为URL编码
|
||||
current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||
action_time = current_time.replace(" ", "%20")
|
||||
#print(f"格式化后的时间: {action_time}") # 打印格式化后的时间
|
||||
return action_time
|
||||
|
||||
def build_headers(api_token, unique_identity):#构建请求头/封装
|
||||
"""构建请求头"""
|
||||
return {
|
||||
'Host': 'gateway.jmhd8.com',
|
||||
'Connection': 'keep-alive',
|
||||
'apitoken': api_token,
|
||||
'charset': 'utf-8',
|
||||
'User-Agent': user_agent,
|
||||
'unique_identity': unique_identity,
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'Accept-Encoding': 'gzip,compress,br,deflate',
|
||||
#'Referer': 'https://servicewechat.com/wxd79ec05386a78727/65/page-frame.html',
|
||||
}
|
||||
|
||||
def rwzx1_gd(api_token, unique_identity): # 任务中心函数
|
||||
url = f"{base_url}/geement.marketingplay/api/v1/task?pageNum=1&pageSize=10&task_status=2&status=1&group_id=23122117303222"
|
||||
headers = build_headers(api_token, unique_identity)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status() # 检查HTTP错误
|
||||
|
||||
try:
|
||||
response_data = response.json()
|
||||
#print("解析的JSON数据:", response_data)
|
||||
|
||||
tasks_to_run = False
|
||||
|
||||
# 在迭代之前检查 'data' 是否为None或者是否可以迭代
|
||||
if response_data and 'data' in response_data and isinstance(response_data['data'], list):
|
||||
for item in response_data['data']:
|
||||
task_name = item.get('name')
|
||||
complete_status = item.get('complete_status')
|
||||
|
||||
if complete_status == 0:
|
||||
tasks_to_run = True
|
||||
if task_name == "每日签到":
|
||||
submit_task(api_token, unique_identity, item.get('id'), "签到")
|
||||
elif task_name == "访问视频号":
|
||||
submit_task(api_token, unique_identity, item.get('id'), "视频号")
|
||||
elif task_name == "向好友分享活动":
|
||||
submit_task(api_token, unique_identity, item.get('id'), "向好友分享活动")
|
||||
elif task_name == "浏览公众号文章":
|
||||
submit_task(api_token, unique_identity, item.get('id'), "浏览公众号文章")
|
||||
|
||||
# 随机等待3到5秒
|
||||
time.sleep(random.randint(3, 5))
|
||||
|
||||
elif complete_status == 1:
|
||||
print(f"{task_name}💬 次数{complete_status} ❌不运行")
|
||||
|
||||
if tasks_to_run:
|
||||
# 运行游戏逻辑
|
||||
yxid(api_token, unique_identity) # 传入适当的user_id
|
||||
else:
|
||||
print("所有任务已完成,不运行游戏")
|
||||
|
||||
return response_data # 返回解析后的JSON数据
|
||||
except ValueError:
|
||||
print("响应不是有效的JSON格式。")
|
||||
return None
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
def rwzx_blb(api_token, unique_identity): # 任务中心函数 遍历任务 版
|
||||
url = f"{base_url}/geement.marketingplay/api/v1/task?pageNum=1&pageSize=10&task_status=2&status=1&group_id=23122117303222"
|
||||
headers = build_headers(api_token, unique_identity)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status() # 检查HTTP错误
|
||||
|
||||
try:
|
||||
response_data = response.json()
|
||||
tasks_to_run = False
|
||||
|
||||
#
|
||||
if response_data and 'data' in response_data and isinstance(response_data['data'], list):
|
||||
for item in response_data['data']:
|
||||
task_name = item.get('name')
|
||||
task_id = item.get('id')
|
||||
complete_status = item.get('complete_status')
|
||||
|
||||
if complete_status == 0:
|
||||
tasks_to_run = True
|
||||
submit_task(api_token, unique_identity, task_id, task_name) # 直接使用任务名称
|
||||
|
||||
# 随机等待3到5秒
|
||||
time.sleep(random.randint(3, 5))
|
||||
|
||||
elif complete_status == 1:
|
||||
print(f"{task_name}💬 次数{complete_status} ❌不运行")
|
||||
|
||||
if tasks_to_run:
|
||||
# 运行游戏逻辑
|
||||
yxid(api_token, unique_identity)
|
||||
else:
|
||||
print("所有任务已完成,不运行游戏")
|
||||
|
||||
return response_data
|
||||
except ValueError:
|
||||
print("响应不是有效的JSON格式。")
|
||||
return None
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
|
||||
|
||||
def submit_task(api_token, unique_identity, task_id, task_type):#通用的任务提交函数
|
||||
"""通用的任务提交函数"""
|
||||
action_time = get_action_time()
|
||||
url = f"{base_url}/geement.marketingplay/api/v1/task/join?action_time={action_time}&task_id={task_id}"
|
||||
headers = build_headers(api_token, unique_identity)
|
||||
#print(f"{url}:",, "")
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
try:
|
||||
response_data = response.json()
|
||||
msg = response_data.get('msg', '无消息内容')
|
||||
#print(f"{task_type}响应消息:", msg)
|
||||
#print(f"{task_type}:", msg)
|
||||
print(f"{task_type}💬:", msg, "✅")
|
||||
|
||||
return response_data
|
||||
except ValueError:
|
||||
print(f"{task_type}响应不是有效的JSON格式。")
|
||||
return None
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"{task_type}请求失败: {e}")
|
||||
return None
|
||||
|
||||
def yxid(api_token, unique_identity): # 获取游戏id
|
||||
url = f"{base_url}/geement.actjextra/api/v1/act/check?act_code=ACT42582331778956001281600711680"
|
||||
headers = build_headers(api_token, unique_identity)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
#print("解析的游戏JSON数据:", response_data)
|
||||
|
||||
|
||||
|
||||
if 'data' in response_data and 'user_id' in response_data['data']:
|
||||
user_id = response_data['data']['user_id']
|
||||
#print("提取的 user_id:", user_id)
|
||||
|
||||
# 运行游戏逻辑
|
||||
if user_id:
|
||||
yxlj(api_token, unique_identity, user_id)
|
||||
else:
|
||||
print("无法获取 user_id,无法提交分数。")
|
||||
|
||||
return user_id
|
||||
else:
|
||||
print("user_id 不存在于响应数据中。")
|
||||
return None
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
def yxlj(api_token, unique_identity, user_id): #提交游戏
|
||||
while True: # 用循环来重发请求
|
||||
score = random.randint(90, 140) # 生成一个90到140之间的随机分数
|
||||
url = f"https://www.ukh5.com/g/12/PaoKu/api.php?a=sumbitscore&openid={user_id}&score={score}"
|
||||
#print(url)
|
||||
headers = {
|
||||
'host': 'www.ukh5.com',
|
||||
'content-length': '0',
|
||||
'unique_identity': unique_identity,
|
||||
'accept': '*/*',
|
||||
'origin': 'https://www.ukh5.com',
|
||||
'x-requested-with': 'com.tencent.mm',
|
||||
'sec-fetch-site': 'same-origin',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'referer': 'https://www.ukh5.com/g/12/PaoKu/index.html?beecre_user_id=U2401020434032181600711680',
|
||||
'accept-encoding': 'gzip, deflate',
|
||||
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
|
||||
# 'cookie': 'PHPSESSID=f6da2789f2aca3e870e0b041d8ab72db',
|
||||
}
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status() # 检查HTTP错误
|
||||
response_data = response.json() # 获取JSON数据
|
||||
#print("解析的JSON数据:", response_data)
|
||||
|
||||
# 提取并打印info字段
|
||||
info = response_data.get('info', 'No info available')
|
||||
#print(f"Info: {info}")
|
||||
|
||||
# 提取data字段中的status和num
|
||||
data = response_data.get('data', {})
|
||||
status = data.get('status')
|
||||
num = data.get('num')
|
||||
|
||||
if status is not None and num is not None:
|
||||
# print(f" {info} Status: {status} 游戏次数: {num}")
|
||||
print(f" 游戏响应{info} 游戏次数: {num}")
|
||||
|
||||
# 如果status为0,打印嵌套在data内的data内容
|
||||
if status == 0 and 'data' in data:
|
||||
nested_data = data['data']
|
||||
print(f"游戏??: {nested_data}")
|
||||
|
||||
time.sleep(3) # 如果状态为0,等待3-5秒后重试
|
||||
continue
|
||||
|
||||
return response_data # 返回解析后的JSON数据
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
#抽奖
|
||||
def cxlscj(api_token, unique_identity): #查询历史抽奖/领取?
|
||||
url = "https://gateway.jmhd8.com/geement.usercenter/api/v1/user/seniority?sencodes=SEN42583085600829603841600711680"
|
||||
headers = build_headers(api_token, unique_identity)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
|
||||
response_data = response.json()
|
||||
code = response_data.get('code')
|
||||
|
||||
if code == 200:
|
||||
# 当code为200时处理逻辑
|
||||
data = response_data.get('data', [])
|
||||
for item in data:
|
||||
total_count = item.get('total_count', 0)
|
||||
used_count = item.get('used_count', 0)
|
||||
hycs = total_count - used_count
|
||||
|
||||
print(f"总次数: {total_count}, 已用次数: {used_count}, 剩余次数: {hycs}")
|
||||
else:
|
||||
# 打印非200响应的完整响应体
|
||||
print("完整响应体:", response.text)
|
||||
|
||||
return response_data
|
||||
|
||||
except ValueError:
|
||||
print("响应不是有效的JSON格式。")
|
||||
return None
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
def jrmfcjcs(api_token, unique_identity, datacj): # 今日免费抽奖次数
|
||||
url = "https://gateway.jmhd8.com/geement.actjextra/api/v1/act/lottery/data/todaycount?act_code=ACT42582331778956001281600711680"
|
||||
headers = build_headers(api_token, unique_identity)
|
||||
|
||||
try:
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
|
||||
response_data = response.json()
|
||||
|
||||
if response_data.get('code') == 200:
|
||||
used_draws = response_data.get('data')
|
||||
total_free_draws = 3 # 每天有3次免费抽奖机会
|
||||
remaining_draws = total_free_draws - used_draws
|
||||
|
||||
if remaining_draws > 0:
|
||||
print(f"您还有 {remaining_draws} 次免费抽奖机会。")
|
||||
for _ in range(remaining_draws):
|
||||
lottery_draw(api_token, unique_identity, datacj) # 多次调用抽奖
|
||||
else:
|
||||
print("今日的免费抽奖机会已经用完。")
|
||||
|
||||
except ValueError:
|
||||
print("响应不是有效的JSON格式。")
|
||||
return None
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
def lottery_draw(api_token, unique_identity, datacj): # 正确提交抽奖数据
|
||||
url = "https://gateway.jmhd8.com/geement.marketinglottery/api/v1/marketinglottery"
|
||||
|
||||
headers = {
|
||||
'host': 'gateway.jmhd8.com',
|
||||
'content-length': '288',
|
||||
'content-type': 'application/json',
|
||||
'charset': 'utf-8',
|
||||
'apitoken': api_token,
|
||||
'User-Agent': user_agent,
|
||||
'unique_identity': unique_identity,
|
||||
'xweb_xhr': '1',
|
||||
'accept': '*/*',
|
||||
'accept-language': '*',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
'sec-fetch-mode': 'cors',
|
||||
'sec-fetch-dest': 'empty',
|
||||
'accept-encoding': 'gzip, deflate, br',
|
||||
}
|
||||
#print(datacj)
|
||||
data = json.loads(datacj)
|
||||
# 更改code值
|
||||
data['code'] = "SCENE-202312221126017708681600711680"
|
||||
|
||||
try:
|
||||
# 发送POST请求
|
||||
#updated_data_json = json.dumps(data, ensure_ascii=False)
|
||||
#print("发送的data:", updated_data_json)
|
||||
response = requests.post(url, headers=headers, json=data)
|
||||
response.raise_for_status()
|
||||
|
||||
# 如需打印请求体和完整响应体,取消以下两行的注释
|
||||
# print("请求体:", json.dumps(data))
|
||||
# print("完整响应体:", response.text)
|
||||
|
||||
try:
|
||||
# 解析响应体的JSON内容
|
||||
response_data = response.json()
|
||||
code = response_data.get('code')
|
||||
msg = response_data.get('msg')
|
||||
|
||||
if code == 200:
|
||||
# 如果code为200,处理并打印奖品信息
|
||||
prize_info = response_data.get('data', {}).get('prizedto', {})
|
||||
prize_name = prize_info.get('prize_name')
|
||||
prize_level = prize_info.get('prize_level')
|
||||
print(f"🎉奖品名称: {prize_name}, 奖品等级: {prize_level}")
|
||||
elif code == 500:
|
||||
# 如果code为500,只打印消息
|
||||
print(f"消息: {msg}")
|
||||
else:
|
||||
# 对于其他情况,打印完整响应
|
||||
print("完整响应体:", response.text)
|
||||
|
||||
return response_data
|
||||
except ValueError:
|
||||
print("响应不是有效的JSON格式。")
|
||||
return None
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
def cxcjsju(api_token, unique_identity): # 查询抽奖/历史中奖
|
||||
url = f"{base_url}/geement.actjextra/api/v1/act/win/goods/simple?act_codes=ACT42582331778956001281600711680,ACT42583272504384552961600711680"
|
||||
headers = build_headers(api_token, unique_identity)
|
||||
|
||||
try:
|
||||
# 发送GET请求
|
||||
response = requests.get(url, headers=headers)
|
||||
response.raise_for_status()
|
||||
|
||||
try:
|
||||
response_data = response.json()
|
||||
if 'data' in response_data and isinstance(response_data['data'], list):
|
||||
special_prize = "特等奖-龙年生肖水一套"
|
||||
special_prizes = []
|
||||
|
||||
for item in response_data['data']:
|
||||
scan_time = item.get('scan_time', '无scan_time字段')
|
||||
win_prize_name = item.get('win_prize_name', '无win_prize_name字段')
|
||||
#print(f"时间:{scan_time} 中奖名称:{win_prize_name}")
|
||||
|
||||
# 检查是否有特等奖,并记录扫描时间
|
||||
if win_prize_name == special_prize:
|
||||
special_prizes.append((scan_time, win_prize_name))
|
||||
|
||||
print(f"总中奖次数:{len(response_data['data'])}")
|
||||
if special_prizes:
|
||||
print("-----------")
|
||||
for scan_time, prize_name in special_prizes:
|
||||
print(f"获得特别奖项:{prize_name},时间:{scan_time}")
|
||||
|
||||
else:
|
||||
print("响应JSON中没有data字段或data不是一个列表。")
|
||||
|
||||
except ValueError:
|
||||
print("响应不是有效的JSON格式。")
|
||||
return None
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"请求失败: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
var_name = 'nfsqrw' # 实际的环境变量名
|
||||
tokens = get_env_variable(var_name) # 使用函数获取环境变量中的令牌列表
|
||||
if tokens is None:
|
||||
return # 如果令牌列表为空,则退出
|
||||
|
||||
total_tokens = len(tokens) # 总令牌数量
|
||||
#rwbl = 0 # 开关变量
|
||||
|
||||
for index, token in enumerate(tokens, start=1): # 遍历所有令牌
|
||||
parts = token.split('#')
|
||||
if len(parts) < 3:
|
||||
print("令牌格式错误,应为 'apitoken#unique_identity#响应体#备注'")
|
||||
continue # 跳过错误格式的令牌
|
||||
|
||||
api_token, unique_identity, datacj = parts[0], parts[1], parts[2]
|
||||
remark = parts[3] if len(parts) > 3 else None # 检查是否有备注
|
||||
|
||||
# 打印当前处理的账号编号和备注信息
|
||||
remark_info = f"---备注: {remark}" if remark else ""
|
||||
print(f"------账号{index}/{total_tokens}{remark_info}-------")
|
||||
|
||||
if rwbl == 0:
|
||||
rwzx1_gd(api_token, unique_identity) # 任务中心
|
||||
elif rwbl == 1:
|
||||
rwzx_blb(api_token, unique_identity) # 任务中心函数 遍历任务 版
|
||||
|
||||
cxlscj(api_token, unique_identity) # 查询历史抽奖/领取?
|
||||
jrmfcjcs(api_token, unique_identity, datacj) # 今日免费抽奖次数
|
||||
cxcjsju(api_token, unique_identity) # 查询抽奖/历史中奖
|
||||
|
||||
# lottery_draw(api_token, unique_identity, datacj) # 提交抽奖
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user