mirror of
https://github.com/3288588344/toulu.git
synced 2025-12-16 23:11:00 +08:00
Add files via upload
This commit is contained in:
116
TOI.py
Normal file
116
TOI.py
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
#环境变量名:TOI 格式:access_token#sid#uuid
|
||||||
|
#抓包h5.youzan.com域名下的以上值填到环境变量TOI中,多账号用&分割
|
||||||
|
#入口:微信小程序:toi图益官方商城
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
import requests
|
||||||
|
|
||||||
|
# ====== 常量 ======
|
||||||
|
KDT_ID = "97827637"
|
||||||
|
APP_ID = "wxbb5a91aacbab57f2"
|
||||||
|
CHECKIN_ID = "2163238"
|
||||||
|
|
||||||
|
# ====== 通用请求头工厂 ======
|
||||||
|
def _headers(sid: str, uuid: str) -> dict:
|
||||||
|
return {
|
||||||
|
"Host": "h5.youzan.com",
|
||||||
|
"content-type": "application/json",
|
||||||
|
"charset": "utf-8",
|
||||||
|
"referer": "https://servicewechat.com/wxbb5a91aacbab57f2/38/page-frame.html",
|
||||||
|
"extra-data": json.dumps(
|
||||||
|
{
|
||||||
|
"is_weapp": 1,
|
||||||
|
"sid": sid,
|
||||||
|
"version": "3.165.8.103",
|
||||||
|
"client": "weapp",
|
||||||
|
"bizEnv": "retail",
|
||||||
|
"uuid": uuid,
|
||||||
|
"ftime": int(time.time() * 1000),
|
||||||
|
},
|
||||||
|
separators=(",", ":"),
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
# ====== 获取用户信息 ======
|
||||||
|
def get_user_info(access_token: str, sid: str, uuid: str) -> tuple[str, str]:
|
||||||
|
|
||||||
|
url = "https://h5.youzan.com/wscaccount/api/authorize/data.json"
|
||||||
|
params = {
|
||||||
|
"kdt_id": KDT_ID,
|
||||||
|
"app_id": APP_ID,
|
||||||
|
"access_token": access_token,
|
||||||
|
"kdtId": KDT_ID,
|
||||||
|
}
|
||||||
|
try:
|
||||||
|
r = requests.get(url, params=params, headers=_headers(sid, uuid), timeout=5)
|
||||||
|
data = r.json()
|
||||||
|
info = data.get("data", {}).get("userInfo", {})
|
||||||
|
nick = info.get("nickname", "")
|
||||||
|
mobile = info.get("mobile", "")
|
||||||
|
if mobile and len(mobile) >= 11:
|
||||||
|
mobile = mobile[:3] + "****" + mobile[-4:]
|
||||||
|
return nick, mobile
|
||||||
|
except Exception:
|
||||||
|
return "", ""
|
||||||
|
|
||||||
|
# ====== 签到 ======
|
||||||
|
def do_checkin(access_token: str, sid: str, uuid: str) -> str:
|
||||||
|
url = "https://h5.youzan.com/wscump/checkin/checkinV2.json"
|
||||||
|
params = {
|
||||||
|
"checkinId": CHECKIN_ID,
|
||||||
|
"app_id": APP_ID,
|
||||||
|
"kdt_id": KDT_ID,
|
||||||
|
"access_token": access_token,
|
||||||
|
}
|
||||||
|
try:
|
||||||
|
r = requests.get(url, params=params, headers=_headers(sid, uuid), timeout=10)
|
||||||
|
data = r.json()
|
||||||
|
code = data.get("code")
|
||||||
|
if code == 0:
|
||||||
|
return "签到成功"
|
||||||
|
if code == 1000030071:
|
||||||
|
return "今日已签到"
|
||||||
|
return data.get("msg") or f"未知错误({code})"
|
||||||
|
except Exception as e:
|
||||||
|
return str(e)
|
||||||
|
|
||||||
|
#--------------- 公告 ---------------
|
||||||
|
def get_proclamation():
|
||||||
|
primary_url = "https://github.com/3288588344/toulu/raw/refs/heads/main/tl.txt"
|
||||||
|
backup_url = "https://tfapi.cn/TL/tl.json"
|
||||||
|
|
||||||
|
for url in (primary_url, backup_url):
|
||||||
|
try:
|
||||||
|
r = requests.get(url, timeout=10)
|
||||||
|
if r.status_code == 200:
|
||||||
|
print("📢 公告信息")
|
||||||
|
print("=" * 45)
|
||||||
|
print(r.text)
|
||||||
|
print("=" * 45 + "\n")
|
||||||
|
return
|
||||||
|
except Exception as e:
|
||||||
|
continue
|
||||||
|
print("⚠️ 获取公告失败,跳过公告直接执行签到...\n")
|
||||||
|
|
||||||
|
# ====== 主流程 ======
|
||||||
|
def main() -> None:
|
||||||
|
raw = os.getenv("TOI", "").strip()
|
||||||
|
if not raw:
|
||||||
|
print("环境变量 TOI 为空")
|
||||||
|
return
|
||||||
|
|
||||||
|
for idx, item in enumerate(raw.split("&"), 1):
|
||||||
|
parts = item.strip().split("#")
|
||||||
|
if len(parts) != 3:
|
||||||
|
print(f"#{idx} 格式错误")
|
||||||
|
continue
|
||||||
|
token, sid, uuid = parts
|
||||||
|
nick, mobile = get_user_info(token, sid, uuid)
|
||||||
|
account_desc = f"{nick} {mobile}" if nick and mobile else uuid
|
||||||
|
result = do_checkin(token, sid, uuid)
|
||||||
|
print(f"{account_desc} {result}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
get_proclamation()
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user