Files
qinglong/脚本库/web版/抓包/tst/2025-11-27_tst_bb3abb0a.py
2026-05-24 03:53:42 +00:00

235 lines
7.6 KiB
Python
Raw Permalink 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/back-101/zyqinglong/blob/main/tst.py
# Raw: https://raw.githubusercontent.com/back-101/zyqinglong/main/tst.py
# Repo: back-101/zyqinglong
# Path: tst.py
# UploadedAt: 2025-11-27T10:49:43Z
# SHA256: bb3abb0a9bff29861a10318c1ea94861781faafe5dc21b2d43f5b7f65281cfaf
# Category: web版/抓包
# Evidence: web/H5关键词 + cookie/token/header
# -*- coding: utf-8 -*-
"""
塔斯汀汉堡签到脚本使用青龙notify模块
原作者https://github.com/linbailo/zyqinglong
二改https://github.com/wanvfx/zyqinglong
最后更新日期2025.6.8
功能说明:
1. 每日自动签到获取积分
2. 支持多账号管理
3. 使用青龙面板自带的notify.py模块发送通知
使用方法:
1. 添加环境变量 tst_tk_env
2. 格式:每行一个账号,格式为 token
示例:
sss113-23129-123123-123123
sss234-23129-123123-234312
"""
import os
import time
import requests
import json
import sys
from datetime import datetime
# 配置区域
DEBUG_MODE = False # 调试模式开关
MAX_RETRIES = 3 # 请求最大重试次数
# 全局通知内容
notification_list = []
# 导入青龙通知模块
try:
sys.path.append('/ql/scripts')
import notify
except ImportError:
notify = None
print("警告:未找到青龙通知模块,通知功能将不可用")
def log_debug(msg):
"""调试日志"""
if DEBUG_MODE:
print(f"[DEBUG] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {msg}")
def log_info(msg):
"""信息日志"""
print(f"[INFO] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {msg}")
def log_error(msg):
"""错误日志"""
print(f"[ERROR] {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {msg}")
def safe_request(method, url, **kwargs):
"""带重试机制的请求函数"""
retries = 0
while retries < MAX_RETRIES:
try:
response = requests.request(method, url, **kwargs)
if response.status_code == 200:
return response
log_error(f"请求失败: {url} 状态码: {response.status_code}")
except Exception as e:
log_error(f"请求异常: {url} 错误: {str(e)}")
retries += 1
if retries < MAX_RETRIES:
time.sleep(2 ** retries) # 指数退避
return None
def add_notification(title, content):
"""添加到通知列表"""
notification_list.append(f"{title}\n{content}")
log_info(f"已添加通知: {title}")
def send_notification():
"""使用青龙通知模块发送通知"""
if not notification_list:
log_info("无通知内容,跳过发送")
return
if notify is None:
log_error("通知模块未导入,无法发送通知")
return
content = "\n\n".join(notification_list)
try:
notify.send("塔斯汀签到脚本通知", content)
log_info("通知发送成功")
except Exception as e:
log_error(f"发送通知异常: {str(e)}")
def checkin(tk):
"""签到功能"""
# 获取动态活动ID
activityId = qdsj(tk)
# 如果动态获取失败使用计算的活动ID
if not activityId:
current_date = datetime.now()
activityId = 59 + (current_date.year - 2025) * 12 + (current_date.month - 5)
log_info(f"使用计算的活动ID: {activityId}")
url = "https://sss-web.tastientech.com/api/sign/member/signV2"
payload = {"activityId": activityId, "memberName": "", "memberPhone": ""}
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) UnifiedPCWindowsWechat(0xf254032b) XWEB/13655",
'Content-Type': "application/json",
'xweb_xhr': "1",
'user-token': tk,
'channel': "1"
}
response = safe_request('POST', url, data=json.dumps(payload), headers=headers)
if response:
try:
data = response.json()
if data.get("code") == 200:
# 解析签到结果
if data['result']['rewardInfoList'][0].get('rewardName'):
reward = data['result']['rewardInfoList'][0]['rewardName']
else:
reward = f"{data['result']['rewardInfoList'][0]['point']}积分"
# 添加到通知
add_notification(
"签到成功",
f"账号: {tk[:10]}...\n"
f"结果: 获得 {reward}\n"
f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}"
)
return True, f"签到成功,获得: {reward}"
else:
add_notification(
"签到失败",
f"账号: {tk[:10]}...\n"
f"原因: {data.get('msg', '未知错误')}\n"
f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}"
)
return False, data.get("msg", f"签到失败: {response.text}")
except Exception as e:
add_notification(
"签到异常",
f"账号: {tk[:10]}...\n"
f"错误: {str(e)}\n"
f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}"
)
return False, f"解析签到响应异常: {str(e)}"
else:
add_notification(
"签到请求失败",
f"账号: {tk[:10]}...\n"
f"时间: {datetime.now().strftime('%Y-%m-%d %H:%M')}"
)
return False, "请求失败"
def qdsj(ck):
"""获取签到活动ID"""
headers = {
'user-token': ck,
'channel': '1'
}
data = {"shopId": "", "birthday": "", "gender": 0, "nickName": None, "phone": ""}
response = safe_request('POST', 'https://sss-web.tastientech.com/api/minic/shop/intelligence/banner/c/list',
json=data, headers=headers)
if not response:
return ''
try:
dl = response.json()
activityId = ''
for i in dl['result']:
if '每日签到' in i['bannerName'] or '签到' in i['bannerName']:
qd = i['jumpPara']
activityId = json.loads(qd)['activityId']
log_info(f"获取到本月签到代码:{activityId}")
return activityId
except Exception as e:
log_error(f"解析签到活动ID异常: {str(e)}")
return ''
def filter_lines(input_string):
"""过滤有效账号行"""
lines = input_string.splitlines()
return [
line.strip()
for line in lines
if line.strip()
]
def start():
"""主启动函数"""
global notification_list
# 环境变量处理
env = os.getenv('tst_tk_env', '')
accounts = filter_lines(env)
if not accounts:
log_error("未找到有效账号配置")
add_notification("配置错误", "未找到有效账号配置请检查环境变量tst_tk_env")
return
log_info(f"===== 开始执行签到,共 {len(accounts)} 个账号 =====")
# 处理每个账号
for account in accounts:
try:
tk = account.split('|')[0].strip() # 只取token部分
log_info(f"处理账号: {tk[:10]}...")
# 签到
success, message = checkin(tk)
log_info(f"签到结果: {message}")
except Exception as e:
log_error(f"处理账号异常: {str(e)}")
# 发送所有通知
send_notification()
log_info("===== 签到执行结束 =====")
if __name__ == '__main__':
start()