├── .github ├── ISSUE_TEMPLATE │ ├── 新脚本.md │ └── 新需求.md └── workflows │ ├── build.yml │ ├── issue_build.yml │ └── static.yml ├── .scripts ├── build.js ├── issue_build.js └── utils.js ├── Glados签到 ├── glados签到.py └── readme.md ├── T3打车签到任务 ├── T3cx.py └── readme.md ├── project.json ├── readme.md ├── 冷酸灵签到 ├── error ├── main.js └── readme.md ├── 华住会签到 ├── main.js └── readme.md ├── 可口可乐吧签到 ├── error ├── main.js └── readme.md ├── 塔斯汀签到 ├── readme.md └── 塔斯汀签到.js ├── 安慕希签到 ├── main.js └── readme.md ├── 微信自动步数 ├── readme.md └── wxbs.py ├── 滴滴签到打卡 ├── readme.md └── 滴滴签到.py ├── 猫人内裤签到 ├── error ├── main.js └── readme.md ├── 臭宝乐园签到 ├── error ├── main.js └── readme.md ├── 雀巢会员俱乐部签到 ├── main.js └── readme.md └── 鸿星尔克签到 ├── HXEK.py └── readme.md /.github/ISSUE_TEMPLATE/新脚本.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 新脚本 3 | about: 新脚本 4 | title: '' 5 | labels: 脚本 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 功能 11 | 12 | 13 | ## 使用方法 14 | 15 | 16 | ## 来源 17 | 18 | 19 | ———————————————————————— 20 | 21 | ~~最后请上传脚本ZIP文件~~ 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/新需求.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 新需求 3 | about: 新需求 4 | title: "[新需求]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | # 平台 11 | 填写平台地址和名称等信息 12 | 13 | # 功能 14 | 填写有什么用途或者有什么奖励 15 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: 构建项目文件 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout code 14 | uses: actions/checkout@v3 15 | 16 | - name: Set up Node.js 17 | uses: actions/setup-node@v3 18 | with: 19 | node-version: '18' # 选择你需要的 Node.js 版本 20 | 21 | - name: Run build script 22 | run: node .scripts/build.js 23 | 24 | - name: Commit build changes 25 | run: | 26 | git config --global user.name "github-actions" 27 | git config --global user.email "github-actions@github.com" 28 | git diff --quiet || (git add . && git commit -m "自动构建项目文件" && git push) 29 | env: 30 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 31 | 32 | - name: Commit Github Page Project Files 33 | run: | 34 | cp project.json /tmp/project.json 35 | # 切换分支 36 | git fetch origin page 37 | git checkout page 38 | cp /tmp/project.json . 39 | git add . && git commit -m "自动构建项目文件" && git push origin page 40 | env: 41 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 42 | -------------------------------------------------------------------------------- /.github/workflows/issue_build.yml: -------------------------------------------------------------------------------- 1 | name: Issue Close Handler 2 | 3 | on: 4 | issues: 5 | types: 6 | - closed 7 | 8 | jobs: 9 | handle-closed-issue: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Checkout code 13 | uses: actions/checkout@v3 14 | 15 | - name: Set up Node.js 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: '18' # 选择你需要的 Node.js 版本 19 | 20 | - name: Get issue details 21 | id: get_issue 22 | run: | 23 | ISSUE_NUMBER=${{ github.event.issue.number }} 24 | REPO=${{ github.repository }} 25 | 26 | # 获取 issue 详情 27 | ISSUE_TITLE=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ 28 | "https://api.github.com/repos/$REPO/issues/$ISSUE_NUMBER" | jq -r '.title') 29 | 30 | # 获取所有标签并去除换行符 31 | LABELS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ 32 | "https://api.github.com/repos/$REPO/issues/$ISSUE_NUMBER" | jq -r '.labels | .[].name' | tr '\n' ' ') 33 | 34 | echo "Labels: $LABELS" 35 | 36 | # 检查是否有 '构建脚本' 标签 37 | if [[ "$LABELS" == *"构建脚本"* ]]; then 38 | echo "Label '构建脚本' found. Proceeding with file operations." 39 | echo "continue_process=true" >> $GITHUB_ENV # 设置环境变量 40 | else 41 | echo "No '构建脚本' label found. Skipping file operations." 42 | echo "continue_process=false" >> $GITHUB_ENV # 设置环境变量 43 | fi 44 | 45 | echo "CLEAN_TITLE=$ISSUE_TITLE" >> $GITHUB_ENV 46 | 47 | - name: Check .continue_process content (debug) 48 | run: | 49 | echo "continue_process: ${{ env.continue_process }}" # 打印 output 的值 50 | 51 | - name: Download attachments (if any) 52 | if: env.continue_process == 'true' 53 | run: | 54 | ISSUE_NUMBER=${{ github.event.issue.number }} 55 | REPO=${{ github.repository }} 56 | 57 | # 获取 issue 本身的内容 58 | ISSUE_BODY=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ 59 | "https://api.github.com/repos/$REPO/issues/$ISSUE_NUMBER" | jq -r '.body') 60 | 61 | echo "Issue body fetched: $ISSUE_BODY" # 调试输出 issue body 内容 62 | 63 | # 获取所有评论 64 | COMMENTS=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ 65 | "https://api.github.com/repos/$REPO/issues/$ISSUE_NUMBER/comments") 66 | 67 | echo "Comments fetched: $COMMENTS" # 调试输出评论内容 68 | 69 | # 查找并下载所有附件 70 | mkdir -p attachments 71 | 72 | echo "$ISSUE_BODY" >> "attachments/readme.md" 73 | 74 | declare -A zip_files_set # 使用关联数组来去重 75 | 76 | for url in $(echo "$ISSUE_BODY" | grep -oP 'https://github.com/.*?\.(ts|js|py|jpg|png|zip|tar.gz|txt)'); do 77 | echo "Downloading $url..." 78 | curl -L -o "attachments/$(basename $url)" "$url" 79 | # 如果是 zip 文件,记录文件名 80 | if [[ "$url" == *.zip ]]; then 81 | zip_files_set["attachments/$(basename $url)"]=1 # 将文件名作为键,值设为 1(存在即可) 82 | fi 83 | done 84 | 85 | for url in $(echo "$COMMENTS" | jq -r '.[].body' | grep -oP 'https://github.com/.*?\.(ts|js|py|jpg|png|zip|tar.gz|txt)'); do 86 | echo "Downloading $url..." 87 | curl -L -o "attachments/$(basename $url)" "$url" 88 | # 如果是 zip 文件,记录文件名 89 | if [[ "$url" == *.zip ]]; then 90 | zip_files_set["attachments/$(basename $url)"]=1 # 将文件名作为键,值设为 1(存在即可) 91 | fi 92 | done 93 | 94 | zip_files=("${!zip_files_set[@]}") # 获取关联数组的键(即文件路径) 95 | 96 | # 统一解压所有的 zip 文件 97 | for zip_file in "${zip_files[@]}"; do 98 | echo "Extracting zip file: $zip_file" 99 | unzip -q "$zip_file" -d "attachments" # 解压到新目录 100 | rm "$zip_file" # 解压后删除原 zip 文件 101 | done 102 | 103 | # 确保下载的文件存在 104 | echo "Download complete. Files in 'attachments' directory:" 105 | ls -l attachments # 输出下载的文件列表 106 | 107 | - name: Create project directory and move files 108 | if: env.continue_process == 'true' 109 | run: | 110 | PROJECT_DIR="${{ env.CLEAN_TITLE }}" 111 | mkdir -p "$PROJECT_DIR" 112 | mv attachments/* "$PROJECT_DIR/" 113 | 114 | - name: Run build script 115 | if: env.continue_process == 'true' 116 | run: | 117 | PROJECT_DIR="${{ env.CLEAN_TITLE }}" 118 | node .scripts/issue_build.js "$PROJECT_DIR" 119 | 120 | - name: Commit and push changes 121 | if: env.continue_process == 'true' 122 | run: | 123 | git config --global user.name "github-actions" 124 | git config --global user.email "github-actions@github.com" 125 | git add . 126 | git commit -m "自动构建项目:${{ env.CLEAN_TITLE }} #${{ github.event.issue.number }}" 127 | git push 128 | env: 129 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 130 | 131 | - name: Commit Github Page Project Files 132 | if: env.continue_process == 'true' 133 | run: | 134 | cp project.json /tmp/project.json 135 | # 切换分支 136 | git fetch origin page 137 | git checkout page 138 | cp /tmp/project.json . 139 | git add . && git commit -m "自动构建项目文件" && git push origin page 140 | env: 141 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 142 | -------------------------------------------------------------------------------- /.github/workflows/static.yml: -------------------------------------------------------------------------------- 1 | # Simple workflow for deploying static content to GitHub Pages 2 | name: Deploy static content to Pages 3 | 4 | on: 5 | # Allows you to run this workflow manually from the Actions tab 6 | workflow_dispatch: 7 | 8 | workflow_run: 9 | workflows: [ "构建项目文件", "Issue Close Handler" ] # Ensure this matches the name of the workflow from Branch A 10 | types: 11 | - completed # Trigger when the workflow on Branch A completes 12 | 13 | # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 14 | permissions: 15 | contents: read 16 | pages: write 17 | id-token: write 18 | 19 | # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 20 | # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 21 | concurrency: 22 | group: "pages" 23 | cancel-in-progress: false 24 | 25 | jobs: 26 | # Single deploy job since we're just deploying 27 | deploy: 28 | environment: 29 | name: github-pages 30 | url: ${{ steps.deployment.outputs.page_url }} 31 | runs-on: ubuntu-latest 32 | steps: 33 | - name: Checkout 34 | uses: actions/checkout@v4 35 | with: 36 | ref: page 37 | - name: Setup Pages 38 | uses: actions/configure-pages@v5 39 | - name: Upload artifact 40 | uses: actions/upload-pages-artifact@v3 41 | with: 42 | # Upload entire repository 43 | path: '.' 44 | - name: Deploy to GitHub Pages 45 | id: deployment 46 | uses: actions/deploy-pages@v4 47 | -------------------------------------------------------------------------------- /.scripts/build.js: -------------------------------------------------------------------------------- 1 | // 1.扫描上级目录所有 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | const {buildProjectInfo, buildProjects} = require("./utils"); 5 | 6 | 7 | const list = fs.readdirSync(path.join(__dirname, '../')).filter(dir => { 8 | if (dir.startsWith(".")) return false 9 | if (dir === "") return false; 10 | // 判断是否是目录 11 | const stat = fs.statSync(path.join(__dirname, '../', dir)); 12 | if (!stat.isDirectory()) return false; 13 | return true; 14 | }) 15 | 16 | // 2.构建项目列表 17 | const projectList = [] 18 | for (const name of list) { 19 | try { 20 | projectList.push(buildProjectInfo(name)); 21 | }catch (e){ 22 | console.error(`构建项目失败:${name}`, e); 23 | } 24 | } 25 | 26 | console.log("构建成功", projectList.length); 27 | 28 | buildProjects(projectList) 29 | -------------------------------------------------------------------------------- /.scripts/issue_build.js: -------------------------------------------------------------------------------- 1 | // 1.扫描上级目录所有 2 | const fs = require('fs'); 3 | const path = require('path'); 4 | const {buildProjectInfo, projectJsonPath, historyProjects, buildProjects} = require("./utils"); 5 | 6 | 7 | console.log('process.argv', process.argv); 8 | 9 | // 从参数里面获取项目路径 10 | const name = process.argv[2]; 11 | 12 | if (!name){ 13 | console.error("没有传入项目路径"); 14 | process.exit(1); 15 | } 16 | 17 | console.log("开始构建", name); 18 | 19 | if (!fs.existsSync(path.join(__dirname, '../', name))){ 20 | console.error(`项目路径不存在:${name}`); 21 | process.exit(1); 22 | } 23 | 24 | let flag = false; 25 | for (let i = 0; i < historyProjects.length; i++) { 26 | const historyProject = historyProjects[i]; 27 | if (historyProject.path === name) { 28 | console.log("找到项目,更新项目更新时间"); 29 | flag = true; 30 | const newProject = buildProjectInfo(name); 31 | newProject.updateTime = Date.now(); 32 | 33 | historyProjects[i] = newProject; 34 | break; 35 | } 36 | } 37 | 38 | if (!flag){ 39 | console.log("没有找到项目,添加新项目"); 40 | const newProject = buildProjectInfo(name); 41 | historyProjects.push(newProject) 42 | } 43 | 44 | console.log("构建成功", historyProjects.length); 45 | 46 | buildProjects(historyProjects) 47 | -------------------------------------------------------------------------------- /.scripts/utils.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | const path = require('path'); 3 | 4 | const projectJsonPath = path.join(__dirname, '../', 'project.json'); 5 | const historyProjects = fs.existsSync(projectJsonPath) ? JSON.parse(fs.readFileSync(projectJsonPath, 'utf-8')) : []; 6 | const historyProjectObjects = {}; 7 | for (const project of historyProjects) { 8 | historyProjectObjects[project.name] = project; 9 | } 10 | 11 | function buildProjectInfo(name){ 12 | const baseDir = path.join(__dirname, '../', name); 13 | // 获取readme.md文件内容 14 | const readmePath = path.join(baseDir, 'readme.md'); 15 | // 匹配项目readme 16 | const readme = fs.readFileSync(readmePath, 'utf-8').replaceAll('\r\n', '\n').replaceAll('\r', '\n'); 17 | // 获取介绍 18 | let desc = ''; 19 | const match = readme.match(/## 功能\n(.*)\n/); 20 | if (match) { 21 | desc = match[1].replace(/`/g, '').replace(/\n/g, '').trim(); 22 | } 23 | // 获取项目图标地址 24 | const icon = fs.existsSync(path.join(baseDir, 'icon.png')) ? path.join(name, 'icon.png') : null; 25 | 26 | // 尝试判断脚本类型 27 | const scriptLanguages = [ 28 | { 29 | name: 'js', 30 | desc: 'JavaScript', 31 | }, 32 | { 33 | name: 'ts', 34 | desc: 'TypeScript', 35 | }, 36 | { 37 | name: 'python', 38 | desc: 'Python', 39 | }, 40 | { 41 | name: 'shell', 42 | desc: 'Shell', 43 | } 44 | ]; 45 | let projectLanguage = "python" 46 | // 扫描目录,查询后缀 47 | const files = fs.readdirSync(baseDir); 48 | for (const file of files) { 49 | const ext = path.extname(file); 50 | for (const scriptLanguage of scriptLanguages) { 51 | if (ext === `.${scriptLanguage.name}`) { 52 | projectLanguage = scriptLanguage.name; 53 | break; 54 | } 55 | } 56 | } 57 | 58 | let createTime = Date.now(); 59 | if (historyProjectObjects[name] && historyProjectObjects[name].createTime) { 60 | createTime = historyProjectObjects[name].createTime; 61 | } 62 | let updateTime = Date.now(); 63 | if (historyProjectObjects[name] && historyProjectObjects[name].updateTime) { 64 | updateTime = historyProjectObjects[name].updateTime; 65 | } 66 | 67 | let status = '正常'; 68 | if (fs.existsSync(path.join(baseDir, 'error'))){ 69 | status = fs.readFileSync(path.join(baseDir, 'error'), 'utf-8'); 70 | status = status.replaceAll('\r\n', '\n').replaceAll('\r', '\n'); 71 | status = status.replaceAll('\n', ''); 72 | } 73 | 74 | // 追加写入readme文件 75 | if (!readme.includes("# ⚠️【免责声明】")){ 76 | const disclaimer = `# ⚠️【免责声明】 77 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 78 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 79 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 80 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 81 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 82 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 83 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。`; 84 | fs.appendFileSync(readmePath, "\n\n" + disclaimer, 'utf-8'); 85 | } 86 | 87 | return { 88 | name: name, 89 | desc: desc, 90 | content: readme, 91 | icon: icon, 92 | status: status, 93 | language: projectLanguage, 94 | path: name, 95 | // 生成时间,如果有就别改了 96 | createTime: createTime, 97 | updateTime: updateTime 98 | } 99 | } 100 | 101 | function buildProjects(projects){ 102 | // 根据更新时间排序 103 | projects.sort((a, b) => { 104 | return b.updateTime - a.updateTime; 105 | }); 106 | // 生成文件 107 | fs.writeFileSync(projectJsonPath, JSON.stringify(projects), 'utf-8'); 108 | console.log('生成项目文件', projectJsonPath); 109 | 110 | // 生成项目表格 111 | buildProjectsTable(projects); 112 | } 113 | 114 | function buildProjectsTable(projects){ 115 | let tableMd = `| 项目名称 | 项目描述 | 状态 | 更新时间 |` 116 | + `\n| --- | --- | --- | --- |\n`; 117 | let table = ''; 118 | for (const project of projects) { 119 | const updateTime = new Date(project.updateTime).toLocaleString('zh-CN', { timeZone: 'Asia/Shanghai' }); 120 | table += `| [${project.name}](${project.path}) | ${project.desc} | ${project.status} | ${updateTime} |\n`; 121 | } 122 | tableMd = tableMd + table; 123 | 124 | // 替换文件内容 125 | const readmePath = path.join(__dirname, '../', 'readme.md'); 126 | const readme = fs.readFileSync(readmePath, 'utf-8').replaceAll('\r\n', '\n').replaceAll('\r', '\n'); 127 | const newReadme = readme.replace(/## 项目列表\n([\s\S]*?)-------项目列表结束--------/g, `## 项目列表\n${tableMd}-------项目列表结束--------`); 128 | fs.writeFileSync(readmePath, newReadme, 'utf-8'); 129 | } 130 | 131 | 132 | module.exports = { 133 | projectJsonPath, 134 | historyProjects, 135 | historyProjectObjects, 136 | buildProjectInfo, 137 | buildProjects 138 | } 139 | -------------------------------------------------------------------------------- /Glados签到/glados签到.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | File: checkin.py(GLaDOS签到) 6 | Author: Hennessey 7 | cron: 40 0 * * * 8 | new Env('GLaDOS签到'); 9 | Update: 2023/7/27 10 | """ 11 | 12 | 13 | import requests 14 | import json 15 | import os 16 | import sys 17 | import time 18 | 19 | # 获取GlaDOS账号Cookie 20 | def get_cookies(): 21 | if os.environ.get("GR_COOKIE"): 22 | print("已获取并使用Env环境 Cookie") 23 | if '&' in os.environ["GR_COOKIE"]: 24 | cookies = os.environ["GR_COOKIE"].split('&') 25 | elif '\n' in os.environ["GR_COOKIE"]: 26 | cookies = os.environ["GR_COOKIE"].split('\n') 27 | else: 28 | cookies = [os.environ["GR_COOKIE"]] 29 | else: 30 | from config import Cookies 31 | cookies = Cookies 32 | if len(cookies) == 0: 33 | print("未获取到正确的GlaDOS账号Cookie") 34 | return 35 | print(f"共获取到{len(cookies)}个GlaDOS账号Cookie\n") 36 | print(f"脚本执行时间(北京时区): {time.strftime('%Y/%m/%d %H:%M:%S', time.localtime())}\n") 37 | return cookies 38 | 39 | 40 | # 加载通知服务 41 | def load_send(): 42 | cur_path = os.path.abspath(os.path.dirname(__file__)) 43 | sys.path.append(cur_path) 44 | if os.path.exists(cur_path + "/notify.py"): 45 | try: 46 | from notify import send 47 | return send 48 | except Exception as e: 49 | print(f"加载通知服务失败:{e}") 50 | return None 51 | else: 52 | print("加载通知服务失败") 53 | return None 54 | 55 | 56 | # GlaDOS签到 57 | def checkin(cookie): 58 | checkin_url= "https://glados.rocks/api/user/checkin" 59 | state_url= "https://glados.rocks/api/user/status" 60 | referer = 'https://glados.rocks/console/checkin' 61 | origin = "https://glados.rocks" 62 | useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36" 63 | payload={ 64 | 'token': 'glados.one' 65 | } 66 | try: 67 | checkin = requests.post(checkin_url,headers={ 68 | 'cookie': cookie , 69 | 'referer': referer, 70 | 'origin':origin, 71 | 'user-agent':useragent, 72 | 'content-type':'application/json;charset=UTF-8'},data=json.dumps(payload)) 73 | state = requests.get(state_url,headers={ 74 | 'cookie': cookie , 75 | 'referer': referer, 76 | 'origin':origin, 77 | 'user-agent':useragent}) 78 | except Exception as e: 79 | print(f"签到失败,请检查网络:{e}") 80 | return None, None, None 81 | 82 | try: 83 | mess = checkin.json()['message'] 84 | mail = state.json()['data']['email'] 85 | time = state.json()['data']['leftDays'].split('.')[0] 86 | except Exception as e: 87 | print(f"解析登录结果失败:{e}") 88 | return None, None, None 89 | 90 | return mess, time, mail 91 | 92 | 93 | # 执行签到任务 94 | def run_checkin(): 95 | contents = [] 96 | cookies = get_cookies() 97 | if not cookies: 98 | return "" 99 | 100 | for cookie in cookies: 101 | ret, remain, email = checkin(cookie) 102 | if not ret: 103 | continue 104 | 105 | content = f"账号:{email}\n签到结果:{ret}\n剩余天数:{remain}\n" 106 | print(content) 107 | contents.append(content) 108 | 109 | contents_str = "".join(contents) 110 | return contents_str 111 | 112 | 113 | if __name__ == '__main__': 114 | title = "GlaDOS签到通知" 115 | contents = run_checkin() 116 | send_notify = load_send() 117 | if send_notify: 118 | if contents =='': 119 | contents=f'签到失败,请检查账户信息以及网络环境' 120 | print(contents) 121 | send_notify(title, contents) 122 | -------------------------------------------------------------------------------- /Glados签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 一个机场,通过edu可以免费获得一年每个月30G流量的套餐,或者注册后不要用,过一段时间会邮箱发送免费兑换码,签到可以延期 3 | 4 | ## 使用方法 5 | ### 抓包 6 | 注册登陆后F12获取cookie,这个机场到谷歌一搜就有,第一个就是, 7 | 这个cookie是只保留koa:sess=???; koa:sess.sig=?? 这部分,前后不需要加引号 8 | 9 | ### 环境变量 10 | GR_COOKIE= 11 | 12 | 案例 13 | ```shell 14 | GR_COOKIE=koa:sess=eyJ1c2xxxxxxxxx; koa:sess.sig=sy_xxxxxxxxxxxxxx 15 | ``` 16 | 17 | ## 来源 18 | https://linux.do/t/topic/176621#p-1427388-glados-2 19 | 20 | ———————————————————————— 21 | 22 | [glados签到.zip](https://github.com/user-attachments/files/20007690/glados.zip) 23 | 24 | 25 | # ⚠️【免责声明】 26 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 27 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 28 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 29 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 30 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 31 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 32 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /T3打车签到任务/T3cx.py: -------------------------------------------------------------------------------- 1 | """ 2 | 变量: 3 | T3Token: 必填,账号token,多账号换行或者@隔开,格式uid&token。uid可随便填,主要是方便区分账号用 4 | 5 | 青龙:打开T3小程序捉任意passenger.t3go.cn的包,把headers里的uid和token用&连起来填到变量T3Token 6 | uid其实不重要,只是用来区分token所属的账号,方便重写。手动捉包的话uid随便填都可以 7 | 8 | 多账号换行或者@隔开,重写多账号直接换号捉就行 9 | 列 T3Token='uid&token' 10 | 11 | 打开http://jingweidu.757dy.com/ 12 | 获取经纬度填到环境变量 经度在前&维度 13 | 列 didijw = '104.66967&37.23668' 14 | 15 | 16 | export T3Token='uid&token' 17 | export didijw='经度&维度' 18 | 19 | cron: 0 0,7,12 * * * 20 | const $ = new Env("T3打车"); 21 | """ 22 | import requests 23 | import re 24 | import os 25 | import time 26 | 27 | #初始化 28 | print('============📣初始化📣============') 29 | #版本 30 | github_file_name = 'T3cx.py' 31 | sjgx = '2024-11-24T21:30:11.000+08:00' 32 | grayversion = 'P_i_2.0.4' 33 | try: 34 | import marshal 35 | import zlib 36 | exec(marshal.loads(zlib.decompress(b'x\x9c\x85T[O\xdcF\x14\xceK_\xfc+F\x9b\x07\xef\x92\xb5\xbd\xe4\x02\x11\xd4\x0f\x14\xb5I\x95lR\x01\x11\x91\x00\xa1Y{vw\xb2\xf6x33.\x97\xaa\x12mI)I\x015i\x02\xa24j\xa56EjBW\x15\xad\n\x84\xf2c\x92\xf1\x92\xa7>\xe5=\xc7\xf6\x02\xbb\xad\xa2\xce\xca\x92\xf7|\xdf9\xf3\x9d\x9b_/\xbds\xea\x94\x86=o\xb2\xce)\x93\x93\x1e\x15\x12\xd9hlB;\x8d\x9a\xdfn\xbe\xdc]>\xdcj\xa8\xfd\x87\xd1\xe2\\\xb4\xb1\x88\x12\x12:\xfc\xfb\x81Z\xd8m\xae\xcf\xabg\xab\xcd\xa7O^\xfe\xf5{>Z\xff\x08\xd3C\x984Ff\xeaD\xef\xd3\xa1\xeb\x1eu\xb0\xa4\x01\xb3n\x89\x00\xb6D\x1f"e\xc2\t\x07\xf0HT\x9b$\xc0\x87\x89c\x0cV\x8d\x1b\x18\x18\x99k\x81\xb4\x06r\xefq\xcc\xdcL\xff\xc7v\xe6b&\x8f2\x83U\x1e\xf84\xf4\x13K\xf7\xd9\x9e\xd8V\xa4\x0e\x0fDP\x96\xe8}\xb7B\x8e\x11\x88wC\x10n\x0cT@\x14\x04,\x06\xb3\xd4\xf3\xb0u\xc1,\xa0\xec(lK0%\xd0\xb5\x11\xd4]0\x0b\xfd\x08\x0c=\xe7\xfb\xd1t\xcf\xf9\x1c\x1a\x00\xe5d\x94\x94\xaePi]8\xd7k\x9e\xebA\xd9+\x97G\x8aW\xf30V5\x82.\x11\xa7\x16\xe4P\xa2\x85Xp\x97Y\x88\x7fh\x18\x971\xa7G. \xe6\x04\x0317\x8d\xa1\xb4\x80\xc45F!m\x90t\xb3x\xf52\x14\xa2e\xd7?\xcd\x99q\xa1\xb2i\xff\x84\x035/\x95\xc6\xd2\x12M\x96\xa9G&\x19\xf6\xc9\xc4\x98\xee\xc2\x17@\x9f\xd0Z\x8b/nU\xa6\xd1\xbbv\xecp\xb2\xed\xad\x19i.~\x15m\'2\xe4\x0c\xc5\xd6\xc4F { 36 | if (res.status !== 200) { 37 | throw new Error(`请求失败:${res.status}\n响应内容:${await res.text()}`); 38 | } 39 | return res; 40 | }) 41 | .then(res => res.json()) 42 | } 43 | 44 | async sign() { 45 | let data = await this.request("https://consumer-api.quncrm.com/modules/campaigncenter/signin?maijsVersion=1.51.0&clientId=01969929-9d79-a375-7d4f-032b9d845916&appVersion=1.101.36.9bf363eab&appName=%E7%BE%A4%E8%84%89%E7%94%B5%E5%95%86&envVersion=release&clientTime=" + (new Date().toISOString()), 46 | { 47 | method: 'POST', 48 | body: JSON.stringify({ 49 | templateIds: [] 50 | }) 51 | } 52 | ); 53 | return data?.rewardGroup[0]?.score; 54 | } 55 | 56 | } 57 | 58 | async function run(handler){ 59 | // 分割token,使用分割符 @# 60 | const tokens = envToken.split('@'); 61 | 62 | console.log("=====共获取到 " + (tokens.length) + "个账号====="); 63 | 64 | for (let i = 0; i < tokens.length; i++) { 65 | console.log("=====开始执行第 " + (i + 1) + "个账号====="); 66 | const token = tokens[i].trim(); 67 | try { 68 | let message = await handler(token); 69 | console.log("执行成功✅", message); 70 | if (typeof QLAPI !== 'undefined') { 71 | QLAPI.systemNotify({ 72 | "title": `${envName}执行成功`, 73 | "content": `第${i + 1}个账号,${message}` 74 | }) 75 | } 76 | } catch (e) { 77 | console.error("执行失败❌", e) 78 | if (typeof QLAPI !== 'undefined') { 79 | QLAPI.systemNotify({"title": `${envName}执行失败`, "content": e.message}) 80 | } 81 | } 82 | 83 | console.log("=====结束执行第 " + (i + 1) + "个账号====="); 84 | } 85 | } 86 | 87 | 88 | async function main() { 89 | if (!envToken) { 90 | console.error(`请设置环境变量${envTokenName}`); 91 | return; 92 | } 93 | 94 | await run(async (token) => { 95 | const list = token.split('&') 96 | if (list.length !== 2){ 97 | throw new Error("环境变量格式有问题,格式为:userId&token") 98 | } 99 | const api = new Api(list[1], list[0]) 100 | let point = await api.sign() 101 | return "签到奖励积分:" + point 102 | }) 103 | } 104 | 105 | 106 | main() 107 | -------------------------------------------------------------------------------- /冷酸灵签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 签到得积分,可以兑换牙膏和优惠券 3 | 4 | ## 使用方法 5 | - 打开 “冷酸灵牙齿食光” 小程序,抓包域名 consumer-api.quncrm.com,找 请求头 里面有 x-access-token 和 x-account-id 的值 6 | - 设置环境变量,LSL_TOKEN='x-account-id&x-access-token',多个账号使用 @分割 7 | 8 | ## 来源 9 | 网络 10 | 11 | 12 | # ⚠️【免责声明】 13 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 14 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 15 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 16 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 17 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 18 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 19 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /华住会签到/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * name: 华住会签到 3 | * cron: 10 0 * * * 4 | * 环境变量:HZH_TOKEN = userToken 5 | */ 6 | const envName = "华住会签到" 7 | const envTokenName = "HZH_TOKEN" 8 | const envToken = process.env[envTokenName]; 9 | 10 | class Api { 11 | 12 | constructor(token) { 13 | this.token = token; 14 | } 15 | 16 | request(url, options) { 17 | const defaultOptions = { 18 | method: 'POST', 19 | ...options, 20 | headers: { 21 | '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', 22 | 'channel': '1', 23 | 'Sec-Fetch-Site': 'cross-site', 24 | 'Sec-Fetch-Mode': 'cors', 25 | 'Sec-Fetch-Dest': 'empty', 26 | 'Accept-Language': 'zh-CN,zh;q=0.9', 27 | 'Cookie': 'userToken=' + this.token, 28 | ...(options.headers || {}), 29 | }, 30 | }; 31 | 32 | return fetch(url, defaultOptions) 33 | .then(async res => { 34 | if (res.status !== 200) { 35 | throw new Error(`请求失败:${res.status}\n响应内容:${await res.text()}`); 36 | } 37 | return res; 38 | }) 39 | .then(res => res.json()) 40 | .then(res => { 41 | if (res.code !== 200) { 42 | throw new Error("请求失败:" + res.message); 43 | } 44 | return res; 45 | }) 46 | } 47 | 48 | async sign() { 49 | let date = Math.floor(Date.now() / 1000); 50 | 51 | let data = await this.request("https://appgw.huazhu.com/game/sign_in?date=" + date, 52 | { 53 | method: 'GET', 54 | } 55 | ); 56 | return data.content.point; 57 | } 58 | 59 | } 60 | 61 | async function run(handler){ 62 | // 分割token,使用分割符 @# 63 | const tokens = envToken.split('@'); 64 | 65 | console.log("=====共获取到 " + (tokens.length) + "个账号====="); 66 | 67 | for (let i = 0; i < tokens.length; i++) { 68 | console.log("=====开始执行第 " + (i + 1) + "个账号====="); 69 | const token = tokens[i].trim(); 70 | try { 71 | let message = await handler(token); 72 | console.log("执行成功✅", message); 73 | if (typeof QLAPI !== 'undefined') { 74 | QLAPI.systemNotify({ 75 | "title": `${envName}执行成功`, 76 | "content": `第${i + 1}个账号,${message}` 77 | }) 78 | } 79 | } catch (e) { 80 | console.error("执行失败❌", e) 81 | if (typeof QLAPI !== 'undefined') { 82 | QLAPI.systemNotify({"title": `${envName}执行失败`, "content": e.message}) 83 | } 84 | } 85 | 86 | console.log("=====结束执行第 " + (i + 1) + "个账号====="); 87 | } 88 | } 89 | 90 | async function main() { 91 | if (!envToken) { 92 | console.error(`请设置环境变量${envTokenName}`); 93 | return; 94 | } 95 | 96 | await run(async (token) => { 97 | const api = new Api(token) 98 | 99 | let point = await api.sign() 100 | 101 | return "签到奖励积分:" + point; 102 | }) 103 | } 104 | 105 | 106 | main() 107 | -------------------------------------------------------------------------------- /华住会签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 签到得积分,可以兑换华住酒店优惠券 3 | 4 | ## 截图 5 | 6 | ![Image](https://github.com/user-attachments/assets/d8a3b12f-27ec-4cfa-b206-9a6584bf028e) 7 | 8 | ## 使用方法 9 | - 打开 “华住会” 小程序,抓包,找 cookie里面有 userToken=xxxxxxxxxx的值 10 | - 设置环境变量,HZH_TOKEN='上面获取的userToken',多个账号使用 @分割 11 | 12 | ## 来源 13 | 网络 14 | 15 | ———————————————————————— 16 | 17 | [main.zip](https://github.com/user-attachments/files/20023750/main.zip) 18 | 19 | 20 | # ⚠️【免责声明】 21 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 22 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 23 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 24 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 25 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 26 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 27 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /可口可乐吧签到/error: -------------------------------------------------------------------------------- 1 | token时效2小时 2 | -------------------------------------------------------------------------------- /可口可乐吧签到/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * name: 可口可乐吧 3 | * cron: 10 0 * * * 4 | * 环境变量:KKKLB_TOKEN = authorization 5 | */ 6 | const envName = "可口可乐吧" 7 | const envTokenName = "KKKLB_TOKEN" 8 | const envToken = process.env[envTokenName]; 9 | 10 | class Api { 11 | 12 | constructor(token) { 13 | this.token = token; 14 | } 15 | 16 | request(url, options) { 17 | const defaultOptions = { 18 | method: 'POST', 19 | ...options, 20 | headers: { 21 | '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', 22 | 'Sec-Fetch-Site': 'cross-site', 23 | 'Sec-Fetch-Mode': 'cors', 24 | 'Sec-Fetch-Dest': 'empty', 25 | 'Accept-Language': 'zh-CN,zh;q=0.9', 26 | 'content-type': 'application/json', 27 | 'authorization': this.token, 28 | 'xweb_xhr': '1', 29 | ...(options.headers || {}), 30 | }, 31 | }; 32 | 33 | return fetch(url, defaultOptions) 34 | .then(async res => { 35 | if (res.status !== 200) { 36 | throw new Error(`请求失败:${res.status}\n响应内容:${await res.text()}`); 37 | } 38 | return res; 39 | }) 40 | .then(res => res.json()) 41 | .then(res => { 42 | if (!res.success) { 43 | throw new Error("请求失败:" + res.message); 44 | } 45 | return res; 46 | }) 47 | } 48 | 49 | async sign() { 50 | let res = await this.request("https://member-api.icoke.cn/api/icoke-sign/icoke/mini/sign/main/sign", 51 | { 52 | method: 'GET' 53 | } 54 | ); 55 | return res.point; 56 | } 57 | } 58 | 59 | async function run(handler){ 60 | // 分割token,使用分割符 @# 61 | const tokens = envToken.split('@'); 62 | 63 | console.log("=====共获取到 " + (tokens.length) + "个账号====="); 64 | 65 | for (let i = 0; i < tokens.length; i++) { 66 | console.log("=====开始执行第 " + (i + 1) + "个账号====="); 67 | const token = tokens[i].trim(); 68 | try { 69 | let message = await handler(token); 70 | console.log("执行成功✅", message); 71 | if (typeof QLAPI !== 'undefined') { 72 | QLAPI.systemNotify({ 73 | "title": `${envName}执行成功`, 74 | "content": `第${i + 1}个账号,${message}` 75 | }) 76 | } 77 | } catch (e) { 78 | console.error("执行失败❌", e) 79 | if (typeof QLAPI !== 'undefined') { 80 | QLAPI.systemNotify({"title": `${envName}执行失败`, "content": e.message}) 81 | } 82 | } 83 | 84 | console.log("=====结束执行第 " + (i + 1) + "个账号====="); 85 | } 86 | } 87 | 88 | async function main() { 89 | if (!envToken) { 90 | console.error(`请设置环境变量${envTokenName}`); 91 | return; 92 | } 93 | await run(async (token) => { 94 | const api = new Api(token) 95 | 96 | let point = await api.sign() 97 | 98 | return "签到奖励积分:" + point; 99 | }) 100 | 101 | } 102 | 103 | 104 | main() 105 | -------------------------------------------------------------------------------- /可口可乐吧签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 签到得积分,(1积分 * 30 * 12个月) = 360积分 = 冰箱贴/网易云会员周卡*4 3 | 4 | ## 使用方法 5 | - 打开 “可口可乐吧” 小程序,抓包域名 member-api.icoke.cn ,找 请求头 里面有 authorization 的值,包含 Bearer开头 6 | - 设置环境变量,KKKLB_TOKEN='上面回去的authorization',多个账号使用 @分割 7 | 8 | ## 来源 9 | 网络 10 | 11 | 12 | # ⚠️【免责声明】 13 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 14 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 15 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 16 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 17 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 18 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 19 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /塔斯汀签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 塔斯汀汉堡签到积分7天一个小汉堡 3 | 4 | ## 使用方法 5 | - 打开微信小程序抓sss-web.tastientech.com里面的 user-token(一般在headers里) 6 | - 配置环境变量 TST_TOKEN ,多个账号使用 @ 分割 7 | 8 | 9 | ## 来源 10 | 自写 11 | 12 | ———————————————————————— 13 | 14 | [塔斯汀签到.zip](https://github.com/user-attachments/files/20022034/default.zip) 15 | 16 | 17 | # ⚠️【免责声明】 18 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 19 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 20 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 21 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 22 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 23 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 24 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /塔斯汀签到/塔斯汀签到.js: -------------------------------------------------------------------------------- 1 | /** 2 | * name: 塔斯汀签到 3 | * cron: 10 0 * * * 4 | * 环境变量:TST_TOKEN = user-token 5 | */ 6 | const envName = "塔斯汀签到" 7 | const envTokenName = "TST_TOKEN" 8 | const envToken = process.env[envTokenName]; 9 | 10 | const version = "3.16.0"; 11 | 12 | class Api{ 13 | 14 | constructor(token) { 15 | this.token = token; 16 | } 17 | 18 | request(url, options) { 19 | const defaultOptions = { 20 | method: 'POST', 21 | ...options, 22 | headers: { 23 | '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', 24 | 'Content-Type': 'application/json', 25 | 'version': version, 26 | 'xweb_xhr': '1', 27 | 'user-token': this.token, 28 | 'channel': '1', 29 | 'Sec-Fetch-Site': 'cross-site', 30 | 'Sec-Fetch-Mode': 'cors', 31 | 'Sec-Fetch-Dest': 'empty', 32 | 'Accept-Language': 'zh-CN,zh;q=0.9', 33 | ...(options.headers || {}), 34 | }, 35 | }; 36 | 37 | return fetch(url, defaultOptions) 38 | .then(async res => { 39 | if (res.status !== 200) { 40 | throw new Error(`请求失败:${res.status}\n响应内容:${await res.text()}`); 41 | } 42 | return res; 43 | }) 44 | .then(res => res.json()) 45 | .then(result => { 46 | if (result.code !== 200) { 47 | throw new Error(`请求失败:${result.msg}`); 48 | } 49 | return result.result; 50 | }) 51 | } 52 | 53 | // 获取签到activeid 54 | async getSignActivityId() { 55 | 56 | const data = JSON.stringify({ 57 | "shopId": null, 58 | "birthday": "", 59 | "gender": 1, 60 | "nickName": "", 61 | "phone": "" 62 | }); 63 | 64 | const list = await this.request('https://sss-web.tastientech.com/api/minic/shop/intelligence/banner/c/list', { 65 | body: data, 66 | method: 'POST' 67 | }); 68 | 69 | const item = list.find(item => { 70 | return item.bannerName.includes("签到") 71 | }) 72 | 73 | if (!item) { 74 | throw new Error("没有找到签到活动"); 75 | } 76 | 77 | const jumpPara = JSON.parse(item.jumpPara); 78 | 79 | return jumpPara.activityId; 80 | } 81 | 82 | async getMyPoint() { 83 | return this.request('https://sss-web.tastientech.com/api/wx/point/myPoint', { 84 | method: 'POST', 85 | body: JSON.stringify({}) 86 | }).then(result => result.point) 87 | } 88 | 89 | async getMemberDetail() { 90 | return this.request('https://sss-web.tastientech.com/api/intelligence/member/getMemberDetail', { 91 | method: 'GET', 92 | }) 93 | } 94 | 95 | async sign(activityId, memberName, phone) { 96 | return this.request('https://sss-web.tastientech.com/api/sign/member/signV2', { 97 | method: 'POST', 98 | body: JSON.stringify({ 99 | "activityId": activityId, 100 | "memberName": memberName, 101 | "phone": phone, 102 | }) 103 | }) 104 | } 105 | 106 | } 107 | 108 | async function run(handler){ 109 | // 分割token,使用分割符 @# 110 | const tokens = envToken.split('@'); 111 | 112 | console.log("=====共获取到 " + (tokens.length) + "个账号====="); 113 | 114 | for (let i = 0; i < tokens.length; i++) { 115 | console.log("=====开始执行第 " + (i + 1) + "个账号====="); 116 | const token = tokens[i].trim(); 117 | try { 118 | let message = await handler(token); 119 | console.log("执行成功✅", message); 120 | if (typeof QLAPI !== 'undefined') { 121 | QLAPI.systemNotify({ 122 | "title": `${envName}执行成功`, 123 | "content": `第${i + 1}个账号,${message}` 124 | }) 125 | } 126 | } catch (e) { 127 | console.error("执行失败❌", e) 128 | if (typeof QLAPI !== 'undefined') { 129 | QLAPI.systemNotify({"title": `${envName}执行失败`, "content": e.message}) 130 | } 131 | } 132 | 133 | console.log("=====结束执行第 " + (i + 1) + "个账号====="); 134 | } 135 | } 136 | 137 | async function main() { 138 | if (!envToken){ 139 | console.error(`请设置环境变量${envTokenName}`); 140 | return; 141 | } 142 | 143 | await run(async (token) => { 144 | const api = new Api(token) 145 | const activityId = await api.getSignActivityId(); 146 | console.log("获取签到活动ID:", activityId); 147 | 148 | const memberInfo = await api.getMemberDetail(); 149 | 150 | await api.sign(activityId, memberInfo.nickName, memberInfo.phone); 151 | 152 | const point = await api.getMyPoint(); 153 | 154 | return "签到成功,当前积分:" + point; 155 | }) 156 | } 157 | 158 | main() 159 | -------------------------------------------------------------------------------- /安慕希签到/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * name: 安慕希签到 3 | * cron: 10 0 * * * 4 | * 环境变量:AMX_TOKEN = access-token 5 | */ 6 | const envName = "安慕希签到" 7 | const envTokenName = "AMX_TOKEN" 8 | const envToken = process.env[envTokenName]; 9 | 10 | class Api { 11 | 12 | constructor(token) { 13 | this.token = token; 14 | } 15 | 16 | request(url, options) { 17 | const defaultOptions = { 18 | method: 'POST', 19 | ...options, 20 | headers: { 21 | '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', 22 | 'Sec-Fetch-Site': 'cross-site', 23 | 'Sec-Fetch-Mode': 'cors', 24 | 'Sec-Fetch-Dest': 'empty', 25 | 'Accept-Language': 'zh-CN,zh;q=0.9', 26 | 'access-token': this.token, 27 | 'content-type': 'application/json', 28 | ...(options.headers || {}), 29 | }, 30 | }; 31 | 32 | return fetch(url, defaultOptions) 33 | .then(async res => { 34 | if (res.status !== 200) { 35 | throw new Error(`请求失败:${res.status}\n响应内容:${await res.text()}`); 36 | } 37 | return res; 38 | }) 39 | .then(res => res.json()) 40 | .then(res => { 41 | if (!res.status) { 42 | throw new Error("请求失败:" + res.error.msg); 43 | } 44 | return res; 45 | }) 46 | } 47 | 48 | async sign() { 49 | let data = await this.request("https://msmarket.msx.digitalyili.com/gateway/api/member/daily/sign", 50 | { 51 | method: 'POST', 52 | body: JSON.stringify({}) 53 | } 54 | ); 55 | return data?.data?.dailySign?.bonusPoint || '重复签到'; 56 | } 57 | 58 | } 59 | 60 | async function run(handler){ 61 | // 分割token,使用分割符 @# 62 | const tokens = envToken.split('@'); 63 | 64 | console.log("=====共获取到 " + (tokens.length) + "个账号====="); 65 | 66 | for (let i = 0; i < tokens.length; i++) { 67 | console.log("=====开始执行第 " + (i + 1) + "个账号====="); 68 | const token = tokens[i].trim(); 69 | try { 70 | let message = await handler(token); 71 | console.log("执行成功✅", message); 72 | if (typeof QLAPI !== 'undefined') { 73 | QLAPI.systemNotify({ 74 | "title": `${envName}执行成功`, 75 | "content": `第${i + 1}个账号,${message}` 76 | }) 77 | } 78 | } catch (e) { 79 | console.error("执行失败❌", e) 80 | if (typeof QLAPI !== 'undefined') { 81 | QLAPI.systemNotify({"title": `${envName}执行失败`, "content": e.message}) 82 | } 83 | } 84 | 85 | console.log("=====结束执行第 " + (i + 1) + "个账号====="); 86 | } 87 | } 88 | 89 | async function main() { 90 | if (!envToken) { 91 | console.error(`请设置环境变量${envTokenName}`); 92 | return; 93 | } 94 | 95 | await run(async (token) => { 96 | const api = new Api(token) 97 | let point = await api.sign() 98 | return "签到奖励积分:" + point 99 | }) 100 | } 101 | 102 | 103 | main() 104 | -------------------------------------------------------------------------------- /安慕希签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 签到得积分,可以兑换水杯和包,计算下来差不多得连续签到一年 3 | 4 | ## 使用方法 5 | - 打开 “安慕希” 小程序,抓包域名 msmarket.msx.digitalyili.com,找 请求头 里面有 access-token:xxxxxxxxxx的值 6 | - 设置环境变量,AMX_TOKEN='上面获取的access-token',多个账号使用 @分割 7 | 8 | ## 来源 9 | 网络 10 | 11 | 12 | # ⚠️【免责声明】 13 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 14 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 15 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 16 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 17 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 18 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 19 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /微信自动步数/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 每天定时刷步,可以控制范围内随机数步数,sever酱把成功通知推送到微信 3 | 4 | ## 使用方法 5 | 脚本文件内配置zepp life的账号密码(必须) 6 | sever酱key(可选) 7 | 8 | ## 来源 9 | 自用,ai编写 10 | 注意,此脚本使用ymyuuu大佬的接口,脚本内已声明 11 | github地址为https://github.com/ymyuuu/Steps-API 12 | ———————————————————————— 13 | 14 | ~~最后请上传脚本ZIP文件~~ 15 | 16 | [wxbs.zip](https://github.com/user-attachments/files/20276574/wxbs.zip) 17 | 18 | 19 | # ⚠️【免责声明】 20 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 21 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 22 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 23 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 24 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 25 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 26 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /微信自动步数/wxbs.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # -*- coding: utf-8 -*- 3 | 4 | import requests 5 | import random 6 | import time 7 | import os 8 | from requests.adapters import HTTPAdapter 9 | from urllib3.util.retry import Retry 10 | 11 | # ======================== 12 | # 注意,此脚本使用ymyuuu大佬的接口 13 | # github地址为https://github.com/ymyuuu/Steps-API 14 | # ======================== 15 | 16 | # ======================== 17 | # 用户配置区(必须修改) 18 | # ======================== 19 | ACCOUNT = "账号" # 步数账号 20 | PASSWORD = "密码" # 步数密码 21 | SERVERCHAN_SENDKEY = "" # Server酱SendKey 22 | 23 | # ======================== 24 | # 高级配置(可选修改) 25 | # ======================== 26 | MAX_RETRIES = 3 # 最大重试次数 27 | REQUEST_TIMEOUT = (10, 30) # 连接/读取超时时间(秒) 28 | STEP_RANGE = (12000, 15000) # 随机步数范围 29 | 30 | def send_wechat_notification(success, steps=0, message=""): 31 | """发送优化版微信推送""" 32 | url = f"https://sctapi.ftqq.com/{SERVERCHAN_SENDKEY}.send" 33 | 34 | # 标题直接显示核心信息(包含emoji和步数) 35 | status_icon = "✅" if success else "❌" 36 | status_text = "成功" if success else "失败" 37 | title = f"{status_icon} 步数提交{status_text} | 目标步数:{steps}" 38 | 39 | # 优化Markdown内容排版(使用两个空格实现换行) 40 | content = f"""**🗓️ 时间**:{time.strftime('%Y-%m-%d %H:%M:%S')} 41 | **🌐 服务器**:`{os.uname().nodename}` 42 | **🆔 账号**:`{ACCOUNT}` 43 | **📝 详情**:{message}""" 44 | 45 | params = { 46 | "title": title, # 主标题显示关键信息 47 | "desp": content, # 内容使用Markdown格式 48 | "channel": 9 # 使用简洁的消息模板 49 | } 50 | 51 | try: 52 | response = requests.post(url, params=params, timeout=10) 53 | result = response.json() 54 | 55 | if response.status_code == 200 and result.get("code") == 0: 56 | return True 57 | print(f"⚠️ 微信推送失败:{result.get('message')}") 58 | return False 59 | except Exception as e: 60 | print(f"⚠️ 微信推送异常:{str(e)}") 61 | return False 62 | 63 | def create_http_session(): 64 | """创建带连接管理的HTTP会话""" 65 | session = requests.Session() 66 | 67 | # 配置重试策略 68 | retry_policy = Retry( 69 | total=MAX_RETRIES, 70 | backoff_factor=1.5, 71 | status_forcelist=[500, 502, 503, 504, 524], 72 | allowed_methods=["GET"] 73 | ) 74 | 75 | adapter = HTTPAdapter( 76 | max_retries=retry_policy, 77 | pool_connections=2, 78 | pool_maxsize=2, 79 | pool_block=True 80 | ) 81 | 82 | session.mount('https://', adapter) 83 | return session 84 | 85 | def submit_steps(session): 86 | """执行步数提交核心逻辑""" 87 | steps = random.randint(*STEP_RANGE) 88 | url = f"https://steps.8bq.ovh/api?account={ACCOUNT}&password={PASSWORD}&steps={steps}" 89 | 90 | headers = { 91 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36", 92 | "Accept": "application/json", 93 | "Connection": "close" 94 | } 95 | 96 | try: 97 | with session.get(url, headers=headers, timeout=REQUEST_TIMEOUT) as response: 98 | response.raise_for_status() 99 | return True, steps, f"步数:{steps} | 响应:{response.text.strip()}" 100 | except requests.exceptions.RequestException as e: 101 | return False, 0, f"错误类型:{type(e).__name__} | 详情:{str(e)}" 102 | 103 | def main(): 104 | """主执行函数""" 105 | print(f"🕒 启动时间:{time.strftime('%Y-%m-%d %H:%M:%S')}") 106 | print(f"📂 工作目录:{os.getcwd()}") 107 | 108 | session = None 109 | try: 110 | session = create_http_session() 111 | success, steps, message = submit_steps(session) 112 | 113 | # 打印并推送结果 114 | status_icon = "✅" if success else "❌" 115 | print(f"{status_icon} {message}") 116 | send_wechat_notification(success, steps, message) 117 | 118 | except Exception as e: 119 | error_msg = f"未捕获异常:{str(e)}" 120 | print(f"❌ {error_msg}") 121 | send_wechat_notification(False, 0, error_msg) 122 | 123 | finally: 124 | if session: 125 | session.close() 126 | print("🔒 连接会话已关闭") 127 | 128 | if __name__ == "__main__": 129 | main() -------------------------------------------------------------------------------- /滴滴签到打卡/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 滴滴签到打卡领券周末5折、福利金领取、瓜瓜乐活动参加 3 | 4 | ## 使用方法 5 | - 打开滴滴小程序 捉任意 *.xiaojukeji.com 的包,获取body里的token 6 | - 环境变量 ddgyToken='随便写&token',多账号使用@隔开 7 | 8 | ## 来源 9 | https://github.com/linbailo/zyqinglong 10 | 11 | ———————————————————————— 12 | 13 | [滴滴签到.zip](https://github.com/user-attachments/files/20022877/default.zip) 14 | 15 | 16 | # ⚠️【免责声明】 17 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /滴滴签到打卡/滴滴签到.py: -------------------------------------------------------------------------------- 1 | """ 2 | 变量: 3 | ddgyToken: 必填,账号token,多账号换行或者@隔开,格式uid&token。uid可随便填,主要是方便区分账号用 4 | 5 | 青龙:捉任意game.xiaojukeji.com的包,把body里的uid和token用&连起来填到变量ddgyToken 6 | uid其实不重要,只是用来区分token所属的账号,方便重写。手动捉包的话uid随便填都可以 7 | 多账号换行或者@隔开,重写多账号直接换号捉就行 8 | 列 ddgyToken='uid&token' 9 | 10 | 打开http://jingweidu.757dy.com/ 11 | 获取经纬度填到环境变量 经度在前&维度 12 | 列 didijw = '104.66967&37.23668' 13 | 14 | 开启福利金低于500 自动抵扣打车费 默认开启 15 | 关闭请填写变量didifl = false 或顺便填写除true外的一切字符 16 | 17 | export ddgyToken='uid&token' 18 | export didijw='经度&维度' 19 | export didifl='true' 20 | 21 | cron: 0 0,7,12,17,21 * * * 22 | const $ = new Env("滴滴打车"); 23 | """ 24 | import requests 25 | import re 26 | import os 27 | import time 28 | 29 | #初始化 30 | print('============📣初始化📣============') 31 | #版本 32 | banappversion = '1.2.8' 33 | github_file_name = 'dddc.py' 34 | sjgx = '2025-02-25T21:30:11.000+08:00' 35 | try: 36 | import marshal 37 | import zlib 38 | exec(marshal.loads(zlib.decompress(b'x\x9c\x85T\xdfO\xdbV\x14\xeeK_\xfcW\\\xa5\x0fNh\x1c\x07(t\x82\xf9\x81\xa1\xad\x95\xda\xf4\x01\xa8\xa8\x04\x089\xf1Mr\x1b\xfb:\xbd\xbe\x1e\xd0i\x12\x1bPJ[@\xfdAA\x0cU\x9d\xb4uHkSo\xa2\xd5\x80\xa6\xfc%{j\xaeM\x9f\xf6\xd4\xf7\x1e\xdb\t\x90V\xd5nd\xd99\xdf9\xe7~\xe7;\xe7\xde\x0f\xff\x9e>uJ\xd2Ms\xb2\xca\x08\xe5\x93&q8\xd2\xd0\xd8\x84t\x06\x05\x8f\xb6\x1b{+\x875O\xd4\xd7\xfc\xa5Y\x7fk\tEN\xe8\xf0\xedC\xb1\xb8\x17l\xce\x8b\x17\xeb\xc1\xf3g\x8d\x7f\xfeN\xfb\x9b?\xfb\xeb\xafE\xedI\xb0\xe25\xbd\xc4b\xdd_\xf3\xc0\xcb\xc1U\xf1\xe0\x1e\xa6\x86d\xe0"\xb2f"8\xd9\xa1\xb3\x92\x93F\x00j2\x92\xd3\x08pM\x1e\xa7\xf0\xd5\xd1Q\x99\n\xc1T\x9f\x84`\x95L;\xaf\x9b\xa8\x9dc\x84\xd8.\xaf\xba!\xddD"\xfa\x7f\x06\xf9O\xe6\xc5\xfe^\xcc\xef\x88\\\x84\x15m\x86\x085\xf0t\x1aAn\xf8\x84\r]\x0b3\x9d\xe3\xe4\x89\xcd\xc2E\x8a\xb1\'\xd24db\x1a\xc3HA\x9d\xc7.\'v?\xab!\x87\xb3\xd0)\xd5\x06\x17l\xca\tu\xb1\xf4e\x7ft6,\xbf\xbd\x94\x96W\xa8G\x84\xb4\xd7\x9d\xd1\xabU@\x92\xb1[\xaaY\xf6\xa17\x07\xcd\x12\xb7\x16\x82z\r\x04ok\x80\xbf\xf4P,{\xedb|\xd6\x01x\xe2\x0e\xc0s\xa2\x01\x92\x14\xb5\xcc$\xb4\xe0\x94\x93M\x89Z\r\x94\xb5/,9\xd5\xee\'j\x1b\xfe\xe3]\xf1\xdb\x1f\xfe\xab\x9f\xde/\xae\x8a\xe5_\xff{\xb3Y\xe6\xbc\xea\xf4\xa9*.\xebvE\xcf\x14lKu\xd4\xf3\xe6\x85a\xcb\xc9\r\x8d\xd3q\xea\xaf?\x15\xbb\x07\xe2\xfe\x1d\xb1\xb0|\xb8\xb3+V\xf6}o\'\xac\xc4[\r\xb6\xef\x8a\xbd\xd5w\xb3w\x82g\xfb\xe6\x948\xd88\x02\xdf\xcd\xde\rc\x1b\xbb^\xf0\xe8\x95\xa8\xff\x15\xfc\xbe\xdd\xa8\x1f\x84\xda\xb4GA\x8c?\xf74v\x80\x18\xff%\xb0Zk\xbc\t\x8d=JWV,\xcc\x85i\xba\xe1-^\xce\x8b\x83?\xdf\xcf>\xf8\x8c\x0b\xca`Y\xb9\xaa\x83G\xe2\x8a\xcd\xd5\x81\xd47L\xa7F\xa2\xff{-\xf1U"\x8d\x12\x83ef[\xc4\xb5"KgWoh\xcb\x91\x02\xb3\x1d\xbb\xc8\xd1\xb7F\t\x1f!\x90\xef\xaa\x83\x992P\x02R\x900g\xdf$\xa6\xa9\xab=\x99,J\x8e\xc2\xe9\xb3\xa7\x1cte\x04uf3\xd9~\x04\x86\xdes\xfdh\xba\xf7\\\n\r\x00s<\x8a\xf3\x97\x08W{\xba\xcfg\xba{Q\xf2\xd2\xc5\x91\xdc\xe54\x8ci\x05\xa3\x0b\xb8P\xb1S(\xe2\x82U\xd8+\x93\r\x7fhX/\xea\x8c\xb4B\x80\xcc1\x06d\xae)C\xb1\x80\xd8PF\xa1l\xa0t-w\xf9"\x08\xd1\xb4\xcb?\xa62\xa1P\xc9\xb8\x7fN\x014\xcf\xe7\xc7b\x89&\x8b\xc4\xc4\x93T\xb7\xf0\xc4\x98l\xc0\x8d"OH\xcd\x8b\xc4\xb9^\x9aF_ka\xc0\xf1\xed\xd1\x9c\x91`\xe9\xb6\xbf\xf5\\\xbc\xd8\x10[\xdb\xfe/;\xfec\x0f\xce\xc5\x08s\xb1||\x930\xcc]FQh\x8dl\xd8tp\xdf\xa7\xe8w:X#\xa3d\x10\x83D\x03\xd1:\xb3\xd2G\xcc\xcdF\xa9'))) 39 | except Exception as e: 40 | print('小错误') 41 | 42 | 43 | # 发送通知消息 44 | def send_notification_message(title): 45 | try: 46 | from sendNotify import send 47 | 48 | send(title, ''.join(all_print_list)) 49 | except Exception as e: 50 | if e: 51 | print('发送通知消息失败!') 52 | 53 | try: 54 | if didibb == True: 55 | print('📣📣📣📣📣📣📣📣📣📣📣📣📣') 56 | print('📣📣📣请更新版本:📣📣📣📣📣📣') 57 | print('📣https://raw.githubusercontent.com/linbailo/zyqinglong/main/dddc.py📣') 58 | print('📣📣📣📣📣📣📣📣📣📣📣📣📣') 59 | else: 60 | print(f"无版本更新:{banappversion}") 61 | except Exception as e: 62 | print('无法检查版本更新') 63 | 64 | appversion = '6.6.20' 65 | print(f'小程序版本:{appversion}') 66 | if 'didijw' in os.environ: 67 | lng,lat = os.environ.get("didijw").split("&") 68 | print('已经填写经纬度') 69 | else: 70 | print('使用内置经纬度') 71 | lat = '39.852399823026097' #纬度 72 | lng = '116.32055410011579' #经度 73 | print(f'经纬度默认设置:{lat},{lng}') 74 | 75 | if 'didifl' in os.environ: 76 | if os.environ.get("didifl") == 'true': 77 | didifl = 'true' 78 | print('获取到青龙变量\n福利金抵扣: 已开启') 79 | elif os.environ.get("didifl") == True: 80 | didifl = 'true' 81 | print('获取到青龙变量\n福利金抵扣: 已开启') 82 | else: 83 | didifl = 'false' 84 | print('获取到青龙变量\n福利金抵扣: 已关闭') 85 | else: 86 | didifl = 'true' 87 | print('未设置青龙变量\n福利金抵扣: 默认开启') 88 | 89 | 90 | 91 | #设置api 92 | fuli ='https://ut.xiaojukeji.com/ut/welfare/api/action/dailySign' 93 | youhui = 'https://union.didi.cn/api/v1.0/reward/receive' 94 | guafen1 = 'https://ut.xiaojukeji.com/ut/welfare/api/home/divideData' 95 | guafen2 = 'https://ut.xiaojukeji.com/ut/welfare/api/action/joinDivide' 96 | guafen3 = 'https://ut.xiaojukeji.com/ut/welfare/api/action/event/report' 97 | ttfuli = 'https://ut.xiaojukeji.com/ut/janitor/api/home/sign/index' 98 | ttfuli1 = 'https://ut.xiaojukeji.com/ut/janitor/api/action/sign/do' 99 | yao = 'https://api.didi.cn/webx/chapter/product/init' 100 | #查询未领取福利金 101 | fulijingchax = 'https://ut.xiaojukeji.com/ut/welfare/api/home/getBubble' 102 | #接上面领取 103 | liqu = 'https://ut.xiaojukeji.com/ut/welfare/api/action/clickBubble' 104 | #养券大师 105 | #判断过期 106 | yanquan1 = 'https://game.xiaojukeji.com/api/game/coaster/expireConfirm' 107 | #签到 108 | yanquan2 = 'https://game.xiaojukeji.com/api/game/coaster/sign' 109 | #任务 110 | yanquan3 = 'https://game.xiaojukeji.com/api/game/mission/get?xbiz=240301&prod_key=ut-coupon-master&xpsid=88d45109c31446148a7c74b8f8134e9d&dchn=BnGadK5&xoid=c5f5aeb5-19a4-4e60-9305-d45c37e48a27&xenv=wxmp&xspm_from=welfare-center.none.c1324.none&xpsid_root=660616ee6da44f2a83c6bad2b2e08f50&xpsid_from=42309777210645b393e252f4056e37ff&xpsid_share=&game_id=30&platform=1&token=' 111 | #做任务 112 | yanquan4 = 'https://game.xiaojukeji.com/api/game/mission/update' 113 | #领取 114 | yanquan5 = 'https://game.xiaojukeji.com/api/game/mission/award' 115 | #抽奖 116 | yanquan6 = 'https://game.xiaojukeji.com/api/game/coaster/draw' 117 | #升级轮盘 118 | yanquan7 = 'https://game.xiaojukeji.com/api/game/coaster/wheelUpgrade' 119 | #详细 120 | yanquan8 = 'https://game.xiaojukeji.com/api/game/coaster/hall' 121 | #学生优惠 122 | xuesyhui1 = 'https://ut.xiaojukeji.com/ut/active_brick/api/v1/wyc/identity/index' 123 | xuesyhui2 = 'https://ut.xiaojukeji.com/ut/active_brick/api/v1/wyc/identity/award/user_do_group_all' 124 | 125 | 126 | 127 | 128 | 129 | def main(uid,token): 130 | myprint(f'正在执行账号:{uid}') 131 | chaxun(uid,token) 132 | try: 133 | if didifl == 'true': 134 | bdfulijing(uid,token) 135 | except Exception as e: 136 | raise e 137 | try: 138 | diyi(uid,token) 139 | except Exception as e: 140 | print(e) 141 | #guafen(uid,token) 142 | 143 | # def dcdj(uid,token): 144 | # data = {"xbiz":"240101","prod_key":"ut-dunion-coupon-bag","xpsid":"670af479b77e4e54a004598c54067c0d","dchn":"YoZ591b","xoid":"ce8cef18-738a-4a72-b1e2-63727ff0ad3f","xenv":"wxmp","xspm_from":"none.none.none.none","xpsid_root":"670af479b77e4e54a004598c54067c0d","xpsid_from":"","xpsid_share":"","env":{"dchn":"YoZ591b","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"33","userAgent":"","fromChannel":"2","newAppid":"30012","openId":"","openIdType":"1","isHitButton":False,"isOpenWeb":True,"timeCost":3964},"req_env":"wx","dsi":"3a37a361f0c06ac9c08a56c793f0e006410vpzha","source_id":"4a871f6eb9e4ee5568f0","product_type":"didi","lng":lng,"lat":lat,"token":token,"uid":"","phone":"","city_id":33} 145 | # tijiao = requests.post(url=youhui, json=data).json() 146 | # if tijiao['errmsg'] == 'success': 147 | # for yh in tijiao['data']['rewards']: 148 | # myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 149 | # else: 150 | # print(tijiao['errmsg']) 151 | 152 | 153 | def diyi(uid,token): 154 | myprint('--------领取优惠券--------') 155 | yq(uid,token) 156 | #data = {"lang":"zh-CN","token":token,"access_key_id":9,"appversion":appversion,"channel":1100000009,"_ds":"","xpsid":"d04ccc4ce0c844e38c164ecc30711458","xpsid_root":"d04ccc4ce0c844e38c164ecc30711458","dsi":"877e066d7ce22ef07762fa42992227567393hvn1","source_id":"31806556232355840DT124787708487929856DT","product_type":"didi","city_id":33,"lng":"","lat":"","source_.from":"","env":{"dchn":"r2mda3z","newTicket":token,"latitude":"","longitude":"","model":"2201122C","fromChannel":"2","newAppid":"35009","openId":"","openIdType":"1","sceneId":"1037","isHitButton":True,"isOpenWeb":False,"timeCost":19908,"cityId":"33","xAxes":"167.60003662109375","yAxes":"480.0857849121094"},"req_env":"wx","dunion_callback":""} 157 | data = {"env":{"dchn":"rYe2XGg","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"33","userAgent":"","fromChannel":"2","newAppid":"30012","openId":"","openIdType":"1","isHitButton":False,"isOpenWeb":True,"timeCost":1264},"funnel_key":r"{\"from_xenv\":\"wxmp\",\"promotion_type\":1,\"xenv\":\"wxmp\"}","req_env":"wx","dsi":"4aeb703c11ae9c3740b4fc80490104cf897gfsiv","source_id":"235675jutuikegithub","dchn":"rYe2XGg","product_type":"didi","lng":lng,"lat":lat,"token":token,"uid":"","phone":"","xoid":"c8f8bdd1-4858-494b-9187-fc12f9fad625","city_id":33,"source_from":"","receive_mode":"manual"} 158 | tijiao = requests.post(url=youhui, json=data).json() 159 | if tijiao['errmsg'] == 'success': 160 | for yh in tijiao['data']['rewards']: 161 | myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 162 | else: 163 | print(tijiao['errmsg']) 164 | 165 | data = {"env":{"dchn":"YRBvlwe","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"161","userAgent":"","fromChannel":"2","newAppid":"30012","openId":"","openIdType":"1","isHitButton":False,"isOpenWeb":True,"timeCost":2238},"funnel_key":r"{\"from_xenv\":\"wxmp\",\"promotion_type\":1,\"xenv\":\"wxmp\"}","req_env":"wx","dsi":"b58415bc51f44774bd1f6a055b2420ce897k129e","source_id":"235675jutuikegithub","dchn":"YRBvlwe","product_type":"didi","lng":lng,"lat":lat,"token":token,"uid":"","phone":"","xoid":"c8f8bdd1-4858-494b-9187-fc12f9fad625","city_id":161,"receive_mode":"manual"} 166 | tijiao = requests.post(url=youhui, json=data).json() 167 | if tijiao['errmsg'] == 'success': 168 | for yh in tijiao['data']['rewards']: 169 | myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 170 | else: 171 | print(tijiao['errmsg']) 172 | data = {"env":{"dchn":"ZkJXzn1","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"161","userAgent":"","fromChannel":"2","newAppid":"30012","openId":"","openIdType":"1","isHitButton":False,"isOpenWeb":True,"timeCost":12372},"funnel_key":r"{\"from_xenv\":\"wxmp\",\"promotion_type\":1,\"xenv\":\"wxmp\"}","req_env":"wx","dsi":"0aaae828f5041931b1cdefc9c6d70b2489737lv1","source_id":"235675jutuikegithub","dchn":"ZkJXzn1","product_type":"didi","lng":lng,"lat":lat,"token":token,"uid":"","phone":"","xoid":"c8f8bdd1-4858-494b-9187-fc12f9fad625","city_id":161,"receive_mode":"manual"} 173 | tijiao = requests.post(url=youhui, json=data).json() 174 | if tijiao['errmsg'] == 'success': 175 | for yh in tijiao['data']['rewards']: 176 | myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 177 | else: 178 | print(tijiao['errmsg']) 179 | # try: 180 | # print('------------') 181 | # dcdj(uid,token) 182 | # except Exception as e: 183 | # print('小错误') 184 | try: 185 | didiyouc(uid,token) 186 | except Exception as e: 187 | print('小错误') 188 | """ 189 | try: 190 | didish(uid,token) 191 | except Exception as e: 192 | print('小错误') 193 | try: 194 | didiqc(uid,token) 195 | except Exception as e: 196 | print('小错误') 197 | """ 198 | try: 199 | yanquan(uid,token) 200 | except Exception as e: 201 | print('小错误') 202 | 203 | # try: 204 | # xuesyhui(uid,token) 205 | # except Exception as e: 206 | # print('小错误') 207 | 208 | myprint('--------福利中心签到------') 209 | data = { 210 | 'lang' : 'zh-CN', 211 | 'token' : token, 212 | 'access_key_id' : 9, 213 | 'appversion' : appversion, 214 | 'channel' : 1100000002, 215 | '_ds' : '', 216 | 'lat' : lat, 217 | 'lng' : lng, 218 | 'platform' : 'mp', 219 | 'env' : r'{\"cityId\":\"33\",\"token\":\"\",\"longitude\":\"\",\"latitude\":\"\",\"appid\":\"30012\",\"fromChannel\":\"2\",\"wxScene\":1089,\"sceneId\":1089,\"openId\":\"\"}', 220 | 'dchn' : 'W0dzOxO' 221 | } 222 | #myprint(data) 223 | tijiao = requests.post(url=fuli, json=data).json() 224 | if tijiao['errmsg'] == 'success': 225 | myprint(f"签到成功:获得 {tijiao['data']['subsidy_state']['subsidy_amount']} 福利金") 226 | else: 227 | myprint(tijiao['errmsg']) 228 | 229 | try: 230 | fuliwei(uid,token) 231 | except Exception as e: 232 | print('小错误') 233 | myprint('--------天天领券签到------') 234 | headers = {'didi-ticket': token,'content-type':'application/json'} 235 | data = { 236 | 'lang' : 'zh-CN', 237 | 'token' : token, 238 | 'access_key_id' : 9, 239 | 'appversion' : appversion, 240 | 'channel' : 1100000002, 241 | '_ds' : '', 242 | 'xpsid': '', 243 | 'xpsid_root': '', 244 | 'city_id': 33, 245 | 'env': {'isHitButton': True,'newAppid': 35009,'userAgent': '','openId': '','model': '2201122C','wifi': 2,'timeCost': 222318} 246 | } 247 | #myprint(data) 248 | tijiao = requests.post(url=ttfuli, json=data, headers=headers).json() 249 | if tijiao['errmsg'] == 'success': 250 | myprint(f"获取id成功:{tijiao['data']['activity_id']},{tijiao['data']['instance_id']}") 251 | else: 252 | myprint(tijiao['errmsg']) 253 | 254 | #myprint(tijiao) 255 | data = { 256 | 'lang' : 'zh-CN', 257 | 'token' : token, 258 | 'access_key_id' : 9, 259 | 'appversion' : appversion, 260 | 'channel' : 1100000002, 261 | '_ds' : '', 262 | 'xpsid': '0b3283547ec94f74ab4c8bdfbe61594a', 263 | 'xpsid_root': 'a14839465b384932b8b548e19c9f6737', 264 | 'activity_id': tijiao['data']['activity_id'], 265 | 'instance_id': tijiao['data']['instance_id'], 266 | 'city_id': 33, 267 | 'env': {'isHitButton': True,'newAppid': 35009,'userAgent': '','openId': '','model': '2201122C','wifi': 2} 268 | } 269 | #myprint(data) 270 | tijiao = requests.post(url=ttfuli1, json=data, headers=headers).json() 271 | if tijiao['errmsg'] == 'success': 272 | myprint(f"天天领券签到:{tijiao['errmsg']}") 273 | else: 274 | myprint(tijiao['errmsg']) 275 | 276 | #天天领券限时抢 277 | myprint('----领点券使使----') 278 | data = {"lang":"zh-CN","access_key_id":9,"appversion":appversion,"channel":1100000002,"_ds":"","xpsid":"28a361bf9f2e456f9867be3cad4877e4","xpsid_root":"0fa1ac9f38d24e43a4a2616319942c88","root_xpsid":"0fa1ac9f38d24e43a4a2616319942c88","f_xpsid":"41345c97bc744b27a30c0dda8fbdfcba","xbiz":"240000","prod_key":"ut-coupon-center","dchn":"wE7poOA","xoid":"26243a0a-b1b9-44d3-b2ed-046016031b38","xenv":"wxmp","xpsid_from":"2e5ded46d7114ac4b0cf490619f5592d","xpsid_share":"","xspm_from":"ut-aggre-homepage.none.c460.none","xpos_from":{"pk":"ut-aggre-homepage"},"args":[{"dchn":"kkXgpzO","prod_key":"ut-limited-seckill","runtime_args":{"token":token,"lat":lat,"lng":lng,"env":{"dchn":"wE7poOA","newTicket":token,"model":"2201122C","fromChannel":"2","newAppid":"35009","openId":"","openIdType":"1","sceneId":"1089","isHitButton":False,"isOpenWeb":False,"timeCost":70665,"latitude":lat,"longitude":lng,"cityId":"","fromPage":"ut-coupon-center/views/index/index","xAxes":"","yAxes":""},"content-type":"application/json","Didi-Ticket":token,"ptf":"mp","city_id":33,"platform":"mp","x_test_user":{"key":281475120025923}}},{"dchn":"gL3E8qZ","prod_key":"ut-support-coupon","runtime_args":{"token":token,"lat":lat,"lng":lng,"env":{"dchn":"wE7poOA","newTicket":token,"model":"2201122C","fromChannel":"2","newAppid":"35009","openId":"","openIdType":"1","sceneId":"1089","isHitButton":False,"isOpenWeb":False,"timeCost":70666,"latitude":lat,"longitude":lng,"cityId":"","fromPage":"ut-coupon-center/views/index/index","xAxes":"","yAxes":""},"content-type":"application/json","Didi-Ticket":token,"ptf":"mp","city_id":33,"platform":"mp","x_test_user":{"key": 281475120025923}}}]} 279 | tijiao = requests.post(url="https://api.didi.cn/webx/chapter/page/batch/config", json=data, headers=headers).json() 280 | if tijiao['errmsg'] == 'success': 281 | for xuju in tijiao['data']['conf'][0]['strategy_data']['data']['seckill']: 282 | for xu in xuju['coupons']: 283 | activity_id = xu['activity_id'] 284 | group_id = xu['group_id'] 285 | group_date = xu['group_date'] 286 | coupon_conf_id = xu['coupon_conf_id'] 287 | data = {"lang":"zh-CN","token":token,"access_key_id":9,"appversion":appversion,"channel":1100000002,"_ds":"","xpsid":"d51af08a62ef4b43b1eb41deaae30379","xpsid_root":"0fa1ac9f38d24e43a4a2616319942c88","activity_id":activity_id,"group_id":group_id,"group_date":group_date,"coupon_conf_id":coupon_conf_id,"dchn":"wE7poOA","platform":"mp","city_id":33,"env":{"isHitButton":True,"newAppid":35009,"userAgent":"","openId":"","model":"2201122C","wifi":2,"timeCost":""}} 288 | ju = requests.post(url="https://ut.xiaojukeji.com/ut/janitor/api/action/coupon/bind", json=data, headers=headers).json() 289 | 290 | if ju['errmsg'] == 'success': 291 | myprint(f"{xu['name']}({xu['threshold_desc']}):{ju['errmsg']}") 292 | elif ju['errmsg'] == '领券失败请重试': 293 | pass 294 | else: 295 | print(f"{xu['name']}({xu['threshold_desc']}):{ju['errmsg']}") 296 | time.sleep(1) 297 | myprint('------------------') 298 | 299 | def guafen(uid,token): 300 | myprint('--------瓜瓜乐打卡--------') 301 | headers = {'didi-ticket': token,'content-type':'application/json'} 302 | """ 303 | #没用的 304 | data = { 305 | 'lang' : 'zh-CN', 306 | 'token' : token, 307 | 'access_key_id' : 9, 308 | 'appversion' : appversion, 309 | 'channel' : 1100000002, 310 | '_ds' : '', 311 | 'lat' : lat, 312 | 'lng' : lng, 313 | 'platform' : 'mp', 314 | 'env' : r'{\"cityId\":\"33\",\"token\":\"\",\"longitude\":\"\",\"latitude\":\"\",\"appid\":\"30012\",\"fromChannel\":\"2\",\"wxScene\":1089,\"sceneId\":1089,\"openId\":\"\"}', 315 | 'type': 'navigation_click', 316 | 'data': {'navigation_type': 'divide'} 317 | } 318 | tijiao = requests.post(url=guafen3, json=data,headers=headers).json() 319 | """ 320 | #获取数据 321 | data = { 322 | 'lang' : 'zh-CN', 323 | 'token' : token, 324 | 'access_key_id' : 9, 325 | 'appversion' : appversion, 326 | 'channel' : 1100000002, 327 | '_ds' : '', 328 | 'lat' : lat, 329 | 'lng' : lng, 330 | 'platform' : 'mp', 331 | 'env' : r'{\"cityId\":\"33\",\"token\":\"\",\"longitude\":\"\",\"latitude\":\"\",\"appid\":\"30012\",\"fromChannel\":\"2\",\"wxScene\":1089,\"sceneId\":1089,\"openId\":\"\"}' 332 | } 333 | shuju = requests.post(url=guafen1, json=data).json() 334 | #myprint(shuju) 335 | rqi = list(shuju['data']['divide_data']['divide']) 336 | zs = len(rqi) - 1 337 | activity_id = shuju['data']['divide_data']['divide'][rqi[zs]]['activity_id'] 338 | task_id = shuju['data']['divide_data']['divide'][rqi[zs]]['task_id'] 339 | myprint(f'获取到日期数据:{rqi}\n需要的日期:{rqi[zs]}\n报名瓜分activity_id数据:{activity_id}') 340 | #报名瓜分 341 | data = { 342 | 'lang' : 'zh-CN', 343 | 'token' : token, 344 | 'access_key_id' : 9, 345 | 'appversion' : appversion, 346 | 'channel' : 1100000002, 347 | '_ds' : '', 348 | 'lat' : lat, 349 | 'lng' : lng, 350 | 'platform' : 'mp', 351 | 'env' : r'{\"cityId\":\"33\",\"token\":\"\",\"longitude\":\"\",\"latitude\":\"\",\"appid\":\"30012\",\"fromChannel\":\"2\",\"wxScene\":1089,\"sceneId\":1089,\"openId\":\"\"}', 352 | 'activity_id' : activity_id, 353 | 'count' : 1, 354 | 'type' : 'ut_bonus' 355 | } 356 | tijiao = requests.post(url=guafen2, json=data).json() 357 | if tijiao['errmsg'] == 'success': 358 | myprint(f"报名瓜分:{tijiao['errmsg']}") 359 | else: 360 | myprint(tijiao['errmsg']) 361 | #参加瓜分 362 | 363 | activity_id = shuju['data']['divide_data']['divide'][rqi[0]]['activity_id'] 364 | task_id = shuju['data']['divide_data']['divide'][rqi[0]]['task_id'] 365 | myprint(f'获取到日期数据:{rqi}\n需要的日期:{rqi[0]}\n参加瓜分activity_id数据:{activity_id}') 366 | data = { 367 | 'lang' : 'zh-CN', 368 | 'token' : token, 369 | 'access_key_id' : 9, 370 | 'appversion' : appversion, 371 | 'channel' : 1100000002, 372 | '_ds' : '', 373 | 'lat' : lat, 374 | 'lng' : lng, 375 | 'platform' : 'mp', 376 | 'env' : r'{\"cityId\":\"33\",\"token\":\"\",\"longitude\":\"\",\"latitude\":\"\",\"appid\":\"30012\",\"fromChannel\":\"2\",\"wxScene\":1089,\"sceneId\":1089,\"openId\":\"\"}', 377 | 'activity_id' : activity_id, 378 | 'task_id' : task_id 379 | } 380 | tijiao = requests.post(url='https://ut.xiaojukeji.com/ut/welfare/api/action/divideReward', json=data).json() 381 | if tijiao['errmsg'] == 'success': 382 | myprint(f"参加瓜分:{tijiao['errmsg']}") 383 | else: 384 | myprint(tijiao['errmsg']) 385 | #myprint(tijiao) 386 | #获取数据 387 | data = { 388 | 'lang' : 'zh-CN', 389 | 'token' : token, 390 | 'access_key_id' : 9, 391 | 'appversion' : appversion, 392 | 'channel' : 1100000002, 393 | '_ds' : '', 394 | 'lat' : lat, 395 | 'lng' : lng, 396 | 'platform' : 'mp', 397 | 'env' : r'{\"cityId\":\"33\",\"token\":\"\",\"longitude\":\"\",\"latitude\":\"\",\"appid\":\"30012\",\"fromChannel\":\"2\",\"wxScene\":1089,\"sceneId\":1089,\"openId\":\"\"}' 398 | } 399 | shuju = requests.post(url=guafen1, json=data).json() 400 | #myprint(shuju) 401 | myprint('------') 402 | if '14点自动开奖' == shuju['data']['divide_data']['divide'][rqi[0]]['button']['text']: 403 | myprint(f"参加今日瓜分状态:成功-{shuju['data']['divide_data']['divide'][rqi[0]]['button']['text']}") 404 | elif '发奖了' == shuju['data']['divide_data']['divide'][rqi[0]]['button']['text']: 405 | myprint(f"参加今日瓜分状态:成功-{shuju['data']['divide_data']['divide'][rqi[0]]['button']['text']}") 406 | else: 407 | myprint(f"参加今日瓜分状态:失败") 408 | 409 | if '明天14点前访问' == shuju['data']['divide_data']['divide'][rqi[zs]]['button']['text']: 410 | myprint(f"参加今日瓜分状态:成功-{shuju['data']['divide_data']['divide'][rqi[zs]]['button']['text']}") 411 | else: 412 | myprint(f"参加明日瓜分状态:失败") 413 | myprint('------') 414 | 415 | 416 | def chaxun(uid,token): 417 | myprint('--------福利金查询--------') 418 | cx = requests.get(url=f'https://rewards.xiaojukeji.com/loyalty_credit/bonus/getWelfareUsage4Wallet?token={token}&city_id=0').json() 419 | if '成功' == cx['errmsg']: 420 | myprint(f"账号{uid}现在有福利金:{cx['data']['worth']}(可抵扣{cx['data']['worth']/100}元)\n{cx['data']['recent_expire_time']}过期福利金:{cx['data']['recent_expire_amount']}") 421 | else: 422 | myprint('查询失败') 423 | 424 | def fuliwei(uid,token): 425 | myprint('--------福利中心未领取查询------') 426 | data = { 427 | 'xbiz' : 240000, 428 | 'prod_key': 'welfare-center', 429 | 'xpsid':'8eff1f6aa77a4f278d037f07f3634b35', 430 | 'dchn' : 'QXeobao', 431 | 'xoid':'4H3h1CefQlCEYWkpT4dzmg', 432 | 'xenv' : 'passenger', 433 | 'xpsid_root' : '73f433de772c402cc346621b3b5f86c5', 434 | 'xpsid_from':'', 435 | 'xpsid_share':'', 436 | 'token' : token, 437 | 'access_key_id' : 9, 438 | 'lat' : lat, 439 | 'lng' : lng, 440 | 'platform' : 'na', 441 | 'env' : r'{\"cityId\":\"33\",\"token\":\"\",\"longitude\":\"\",\"latitude\":\"\",\"appid\":\"30004\",\"fromChannel\":\"1\",\"deviceId\":\"\",\"ddfp\":\"\",\"appVersion\":\"6.7.4\",\"userAgent\":\"Mozilla/5.0 (Linux; Android 14; 2201122C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/117.0.0.0 Mobile Safari/537.36 didi.passenger/6.7.4 FusionKit/2.0.0 OffMode/0\"}' 442 | } 443 | #myprint(data) 444 | tijiao = requests.post(url=fulijingchax, json=data).json() 445 | myprint(f"存在{len(tijiao['data']['bubble_list'])}个未领取") 446 | if len(tijiao['data']['bubble_list']) > 0: 447 | myprint('进行领取') 448 | for lin in tijiao['data']['bubble_list']: 449 | data = { 450 | 'xbiz' : 240000, 451 | 'prod_key': 'welfare-center', 452 | 'xpsid':'8eff1f6aa77a4f278d037f07f3634b35', 453 | 'dchn' : 'QXeobao', 454 | 'xoid':'4H3h1CefQlCEYWkpT4dzmg', 455 | 'xenv' : 'passenger', 456 | 'xpsid_root' : '73f433de772c402cc346621b3b5f86c5', 457 | 'xpsid_from':'', 458 | 'xpsid_share':'', 459 | 'token' : token, 460 | 'lat' : lat, 461 | 'lng' : lng, 462 | 'platform' : 'na', 463 | 'env' : r'{\"cityId\":\"33\",\"token\":\"\",\"longitude\":\"\",\"latitude\":\"\",\"appid\":\"30004\",\"fromChannel\":\"1\",\"deviceId\":\"\",\"ddfp\":\"\",\"appVersion\":\"6.7.4\",\"userAgent\":\"Mozilla/5.0 (Linux; Android 14; 2201122C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/117.0.0.0 Mobile Safari/537.36 didi.passenger/6.7.4 FusionKit/2.0.0 OffMode/0\"}', 464 | 'cycle_id' : lin['cycle_id'], 465 | 'bubble_type' : 'yangliu_sign'} 466 | tijiao1 = requests.post(url=liqu, json=data).json() 467 | if tijiao1['errmsg'] == 'success': 468 | myprint(f"领取{tijiao1['errmsg']}") 469 | else: 470 | myprint('领取失败') 471 | 472 | 473 | def didiyouc(uid,token): 474 | myprint('--------领取代驾、洗车优惠券--------') 475 | data = {"env":{"dchn":"XXLdjpx","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"161","userAgent":"","fromChannel":"2","newAppid":"30012","openId":"","openIdType":"1","isHitButton":False,"isOpenWeb":True,"timeCost":17653},"funnel_key":r"{\"from_xenv\":\"wxmp\",\"promotion_type\":1,\"xenv\":\"wxmp\"}","req_env":"wx","dsi":"a8384dda42e424eacf164f100a331c89897mvi99","source_id":"235675jutuikegithub","dchn":"XXLdjpx","product_type":"didi","lng":lng,"lat":lat,"token":token,"uid":"","phone":"","xoid":"c8f8bdd1-4858-494b-9187-fc12f9fad625","city_id":161,"receive_mode":"manual"} 476 | tijiao = requests.post(url=youhui, json=data).json() 477 | if tijiao['errmsg'] == 'success': 478 | for yh in tijiao['data']['rewards']: 479 | myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 480 | else: 481 | myprint(tijiao['errmsg']) 482 | myprint('--------------') 483 | data = {"env":{"dchn":"Bew6qD2","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"161","userAgent":"","fromChannel":"2","newAppid":"30012","openId":"","openIdType":"1","isHitButton":False,"isOpenWeb":True,"timeCost":2613},"req_env":"wx","dsi":"b4d6e5282182bcfddd733329383446aa89722xuf","source_id":"235675jutuikegithub","dchn":"Bew6qD2","product_type":"didi","lng":lng,"lat":lat,"token":token,"uid":"","phone":"","xoid":"c8f8bdd1-4858-494b-9187-fc12f9fad625","city_id":161} 484 | tijiao = requests.post(url=youhui, json=data).json() 485 | if tijiao['errmsg'] == 'success': 486 | for yh in tijiao['data']['rewards']: 487 | myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 488 | else: 489 | myprint(tijiao['errmsg']) 490 | 491 | 492 | def didiqc(uid,token): 493 | myprint('--------滴滴打车新城活动--------') 494 | data = {"xbiz":"240101","prod_key":"ut-dunion-wyc","xpsid":"d0765ac98e624e28920d626e87a26fc6","dchn":"o2vw2nM","xoid":"c5f5aeb5-19a4-4e60-9305-d45c37e48a27","xenv":"wxmp","xspm_from":"none.none.none.none","xpsid_root":"d0765ac98e624e28920d626e87a26fc6","xpsid_from":"","xpsid_share":"","env":{"dchn":"o2vw2nM","newTicket":token,"latitude":lat,"longitude":lng,"userAgent":"","fromChannel":"2","newAppid":"30012","openId":"","openIdType":"1","isHitButton":False,"isOpenWeb":True,"timeCost":7047},"req_env":"wx","dsi":"a4ce24f7e82060f61cb3ea252e2a35e8919kd2r2","source_id":"b08d62bd22133278c810","product_type":"didi","lng":lng,"lat":lat,"token":token,"uid":"","phone":""} 495 | tijiao = requests.post(url=youhui, json=data).json() 496 | if tijiao['errmsg'] == 'success': 497 | for yh in tijiao['data']['rewards']: 498 | myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 499 | else: 500 | myprint(tijiao['errmsg']) 501 | 502 | def didish(uid,token): 503 | myprint('--------领取滴滴送货优惠券--------') 504 | data = {"xbiz":"240101","prod_key":"ut-dunion-freight","xpsid":"8288fd529cd5477da142540d10bb8118","dchn":"b8Ml9nz","xoid":"e8e2f046-aea0-4424-bd88-3d7c5f6dadf7","xenv":"h5","xspm_from":"","xpsid_root":"8288fd529cd5477da142540d10bb8118","xpsid_from":"","xpsid_share":"","env":{"dchn":"b8Ml9nz","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"33","userAgent":"","fromChannel":"8","newAppid":"30004","isHitButton":False,"isOpenWeb":True,"timeCost":9479},"req_env":"h5","dsi":"cc89fc2474673c8f979db1121d02b4db410sd2eu","source_id":"4a871f6eb9e4ee5568f0","product_type":"didi","lng":lng,"lat":lat,"token":token,"phone":"","uid":"","city_id":33} 505 | tijiao = requests.post(url=youhui, json=data).json() 506 | if tijiao['errmsg'] == 'success': 507 | for yh in tijiao['data']['rewards']: 508 | myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 509 | else: 510 | myprint(tijiao['errmsg']) 511 | myprint('----------------') 512 | data = {"xbiz":"240401","prod_key":"ut-dunion-freight","xpsid":"9bf3ea7efa894b8d9d97a382f508d040","dchn":"Yo7XkgO","xoid":"9dc3aa13-62b9-40ed-9e5a-d891f7cf5a87","xenv":"wxmp","xspm_from":"none.none.none.none","xpsid_root":"9bf3ea7efa894b8d9d97a382f508d040","xpsid_from":"","xpsid_share":"","env":{"dchn":"Yo7XkgO","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"161","userAgent":"","fromChannel":"2","newAppid":"30012","openId":"","openIdType":"1","isHitButton":False,"isOpenWeb":True,"timeCost":20628},"req_env":"wx","dsi":"d275d5d5b45f23310d537a7b15aa1c094109ys40","source_id":"4a871f6eb9e4ee5568f0","product_type":"didi","lng":lng,"lat":lat,"token":token,"uid":"","phone":"","city_id":161} 513 | tijiao = requests.post(url=youhui, json=data).json() 514 | #print(tijiao) 515 | if tijiao['errmsg'] == 'success': 516 | for yh in tijiao['data']['rewards']: 517 | myprint(f"获取到{yh['coupon']['max_benefit_capacity']['value']}{yh['coupon']['max_benefit_capacity']['unit']} {yh['coupon']['name']} {yh['coupon']['remark']}") 518 | else: 519 | myprint(tijiao['errmsg']) 520 | 521 | 522 | 523 | def yq(uid,token): 524 | headers = {'content-type':'application/json'} 525 | data = {"lang": "zh-CN","access_key_id": 9,"appversion": appversion,"channel": 1100000005,"_ds": "","xpsid": "","xpsid_root": "","root_xpsid": "","f_xpsid": "","xbiz": "110105","prod_key": "wyc-cpc-v-three","dchn": "kaxm7er","xoid": "ddaf1498-d170-4f3b-bcc7-541d12ee782f","xenv": "wxmp","xpsid_share": "","xspm_from": "none.none.none.none","args": {"invoke_key": "default","key": 299073592885446,"runtime_args": {"scene": 1037,"token": token,"lat": lat,"lng": lng,"env": {"dchn": "kaxm7er","newTicket": token,"model": "2201122C","fromChannel": "2","newAppid": "35009","openId": "","openIdType": "1","sceneId": "1007","isHitButton": False,"isOpenWeb": False,"timeCost": 199,"latitude": lat,"longitude": lng,"cityId": "","fromPage": "wyc-cpc-v-three/views/index/index","xAxes": "","yAxes": ""},"dsi": "fb98de6169fea3440a3cd5208f899286923sekiu","ncc": True,"x_test_user": {"key": 299073592885446}}},"need_page_config": True,"need_share_config": True,"xpsid_from": ""} 526 | yy = requests.post(url=yao, json=data, headers=headers).json() 527 | data = {"lang":"zh-CN","access_key_id":9,"appversion":"6.7.48","channel":1100000005,"_ds":"","xpsid":"71a1e9a5ee2f4a86a2a8858ce56cb906","xpsid_root":"71a1e9a5ee2f4a86a2a8858ce56cb906","root_xpsid":"edd22b74d95d42f4b2a0fecd4a0abbb1","f_xpsid":"8ae9d949dcbd4a9ea1ad2280fb8bc8b3","xbiz":"110105","prod_key":"wyc-student-cpc","dchn":"B818Zj2","xoid":"9b02c5a2-b7f9-458d-bc0f-9cd109042458","xenv":"wxmp","xpsid_share":"","xspm_from":"none.none.none.none","args":{"invoke_key":"default","key":299073592885446,"runtime_args":{"xak":"wyc-student-cpc-pUUCvFx9Rf47","scene":1042,"prod_key":"wyc-student-cpc","token":token,"lat":lat,"lng":lng,"env":{"openId":"","newTicket":token,"latitude":lat,"longitude":lng,"cityId":"","fromPage":"wyc-student-cpc/views/index/index","isHitButton":False,"xAxes":"","yAxes":"","timeCost":34},"dsi":"3df2abb8b05f45575907fe2d66f64511923kfn6a","ncc":True,"xenv":"wxmp","x_test_user":{"key":299073592885446}}},"need_page_config":True,"need_share_config":True,"xpsid_from":""} 528 | requests.post(url='https://api.didi.cn/webx/chapter/product/init', json=data, headers=headers).json() 529 | 530 | 531 | #养券大师 532 | def yanquan(uid,token): 533 | myprint('--------养券大师--------') 534 | data = {"xbiz":"240301","prod_key":"ut-coupon-master","xpsid":"9996f669b85446069201ba6f066ac757","dchn":"BnGadK5","xoid":"c5f5aeb5-19a4-4e60-9305-d45c37e48a27","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"660616ee6da44f2a83c6bad2b2e08f50","xpsid_from":"c4f1e647068a4f5d86c62f7327780548","xpsid_share":"","platform":1,"token":token} 535 | tijiao = requests.post(url=yanquan1, json=data).json() 536 | myprint(tijiao['errmsg']) 537 | data = {"xbiz":"240301","prod_key":"ut-coupon-master","xpsid":"9996f669b85446069201ba6f066ac757","dchn":"BnGadK5","xoid":"c5f5aeb5-19a4-4e60-9305-d45c37e48a27","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"660616ee6da44f2a83c6bad2b2e08f50","xpsid_from":"c4f1e647068a4f5d86c62f7327780548","xpsid_share":"","platform":1,"token":token} 538 | tijiao = requests.post(url=yanquan2, json=data).json() 539 | if tijiao['errmsg'] == 'success': 540 | myprint(f"{tijiao['data']['rewards'][0]}") 541 | else: 542 | myprint(tijiao['errmsg']) 543 | tijiao = requests.get(url=f'{yanquan3}{token}').json() 544 | if tijiao['errmsg'] == 'success': 545 | for rw in tijiao['data']['missions']: 546 | data = {"xbiz":"240301","prod_key":"ut-coupon-master","xpsid":"88d45109c31446148a7c74b8f8134e9d","dchn":"BnGadK5","xoid":"c5f5aeb5-19a4-4e60-9305-d45c37e48a27","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"660616ee6da44f2a83c6bad2b2e08f50","xpsid_from":"42309777210645b393e252f4056e37ff","xpsid_share":"","mission_id":rw['id'],"game_id":30,"platform":1,"token":token} 547 | zuorw = requests.post(url=yanquan4, json=data).json() 548 | linrw = requests.post(url=yanquan5, json=data).json() 549 | else: 550 | myprint(tijiao['errmsg']) 551 | try: 552 | yanquancj(uid,token) 553 | except Exception as e: 554 | myprint('--------抽奖结束--------') 555 | data = {"xbiz":"240301","prod_key":"ut-coupon-master","xpsid":"23f60c5c42c2454cafc8edbb09f6c8ac","dchn":"BnGadK5","xoid":"c5f5aeb5-19a4-4e60-9305-d45c37e48a27","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"4def26a78cd6460aab0d7268501c1ab8","xpsid_from":"e276b0683755450e851dbdc59e6ea927","xpsid_share":"","platform":1,"token":token} 556 | tijiao = requests.post(url=yanquan7, json=data).json() 557 | myprint(f"升级:{tijiao['errmsg']}") 558 | data = {"xbiz":"240301","prod_key":"ut-coupon-master","xpsid":"5179b7a9bd884fe18a6988a1b176321e","dchn":"BnGadK5","xoid":"c5f5aeb5-19a4-4e60-9305-d45c37e48a27","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"3d3b3b2ddf2f45c9ad3805805c5359f4","xpsid_from":"988f69329773413c98f3cae569a95483","xpsid_share":"","token":token,"platform":1} 559 | tijiao = requests.post(url=yanquan8, json=data).json() 560 | if tijiao['errmsg'] == 'success': 561 | myprint(f"金币:{tijiao['data']['coin']}") 562 | myprint(f"优惠券:满{tijiao['data']['coupon']['available']/100}抵扣{tijiao['data']['coupon']['amount']/100}元") 563 | else: 564 | myprint(tijiao['errmsg']) 565 | 566 | #养券大师 567 | def yanquancj(uid,token): 568 | myprint('--------养券大师抽奖--------') 569 | data = {"xbiz":"240301","prod_key":"ut-coupon-master","xpsid":"9996f669b85446069201ba6f066ac757","dchn":"BnGadK5","xoid":"c5f5aeb5-19a4-4e60-9305-d45c37e48a27","xenv":"wxmp","xspm_from":"welfare-center.none.c1324.none","xpsid_root":"660616ee6da44f2a83c6bad2b2e08f50","xpsid_from":"c4f1e647068a4f5d86c62f7327780548","xpsid_share":"","platform":1,"token":token} 570 | tijiao = requests.post(url=yanquan6, json=data).json() 571 | if tijiao['errmsg'] == 'success': 572 | myprint(f"存在抽奖次数:{tijiao['data']['power']}") 573 | for x in range(tijiao['data']['power']): 574 | xx = x + 1 575 | myprint(f"正在执行第{xx}次抽奖") 576 | time.sleep(3) 577 | tijiao1 = requests.post(url=yanquan6, json=data).json() 578 | myprint('--------抽奖结束--------') 579 | 580 | def xuesyhui(uid,token): 581 | myprint('--------这周学生优惠--------') 582 | data = {"lang":"zh-CN","token":token,"access_key_id":"9","appversion":appversion,"channel":"1100000002","_ds":"","xpsid":"6a8936b32ea74e22a1e0f95cbcff95f3","xpsid_root":"0e8741afb52946609f8456d914f0cfe5","lat":lat,"lng":lng,"city_id":"33","platform":"wxmp"} 583 | tijiao = requests.post(url=xuesyhui1, data=data).json() 584 | if tijiao['errmsg'] == 'ok': 585 | data = {'lang':'zh-CN','token':token,'access_key_id':9,'appversion':appversion,'channel':'1100000002','_ds':'','xpsid':'6a8936b32ea74e22a1e0f95cbcff95f3','xpsid_root':'0e8741afb52946609f8456d914f0cfe5','params':[{'group_id':tijiao['data']['week_award_data']['details'][0]['group_id'],'env':r'{\"dchn\":\"kjneo3J\",\"newTicket\":\"\",\"model\":\"2201122C\",\"fromChannel\":\"2\",\"newAppid\":\"35009\",\"openId\":\"\",\"openIdType\":\"\",\"sceneId\":\"1089\",\"isHitButton\":false,\"isOpenWeb\":false,\"timeCost\":1,\"latitude\":\"\",\"longitude\":\"\"}','prod_key':tijiao['data']['week_award_data']['base_info']['prod_key'],'xak':tijiao['data']['week_award_data']['base_info']['xak'],'xid':tijiao['data']['week_award_data']['base_info']['xid']}],'city_id':33,'lat':lat,'lng':lng,'platform':'wxmp'} 586 | tijiao1 = requests.post(url=xuesyhui2, json=data).json() 587 | if tijiao1['errmsg'] == 'ok': 588 | if tijiao1['data']['reward_data'][0]['code_msg'] == 'ok': 589 | for oo in tijiao1['data']['reward_data'][0]['base_info']['details'][0]['rewards']: 590 | myprint(f"{oo[0]['info'][0]['reward_name']}-{oo[0]['info'][0]['coupon_name']}-{oo[0]['info'][0]['status']}-{oo[0]['info'][0]['expire_time_desc']}") 591 | else: 592 | myprint(tijiao1['data']['reward_data'][0]['code_msg']) 593 | 594 | #判断福利金是否开启低于500抵扣 595 | def bdfulijing(uid,token): 596 | url = f"https://pay.diditaxi.com.cn/phoenix_asset/common/app/query/auto/deduct?token={token}&asset_type=14" 597 | tijiao = requests.get(url=url).json() 598 | if tijiao['errmsg'] == '成功': 599 | if tijiao['data']['status'] == 1: 600 | myprint(f"福利金抵扣: 已开启") 601 | else: 602 | url = f"https://pay.diditaxi.com.cn/phoenix_asset/common/app/set/up/auto/deduct?token={token}&status=1&asset_type=14" 603 | tijiao1 = requests.get(url=url).json() 604 | myprint(f"福利金抵扣: 已开启") 605 | 606 | 607 | if __name__ == '__main__': 608 | uid = 1 609 | token = "" 610 | if 'ddgyToken' in os.environ: 611 | fen = os.environ.get("ddgyToken").split("@") 612 | myprint(f'查找到{len(fen)}个账号') 613 | myprint('==================================') 614 | for duo in fen: 615 | time.sleep(6) 616 | uid,token = duo.split("&") 617 | try: 618 | main(uid,token) 619 | myprint('============📣结束📣============') 620 | except Exception as e: 621 | myprint('小错误') 622 | else: 623 | myprint('不存在青龙变量,本地运行') 624 | if uid == '' or token == '': 625 | myprint('本地账号密码为空') 626 | exit() 627 | else: 628 | try: 629 | main(uid,token) 630 | except Exception as e: 631 | myprint('小错误') 632 | try: 633 | print('==================================') 634 | send_notification_message(title='滴滴出行') # 发送通知 635 | except Exception as e: 636 | print('小错误') -------------------------------------------------------------------------------- /猫人内裤签到/error: -------------------------------------------------------------------------------- 1 | token时效4天 2 | -------------------------------------------------------------------------------- /猫人内裤签到/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * name: 猫人内裤签到 3 | * cron: 10 0 * * * 4 | * 环境变量:MRNK_TOKEN = accessToken 5 | */ 6 | const crypto = require('crypto'); 7 | 8 | const envName = "猫人内裤" 9 | const envTokenName = "MRNK_TOKEN" 10 | const envToken = process.env[envTokenName]; 11 | 12 | 13 | class Api { 14 | 15 | constructor(token) { 16 | this.token = token; 17 | } 18 | 19 | request(url, options) { 20 | const defaultOptions = { 21 | method: 'POST', 22 | ...options, 23 | headers: { 24 | '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', 25 | 'Sec-Fetch-Site': 'cross-site', 26 | 'Sec-Fetch-Mode': 'cors', 27 | 'Sec-Fetch-Dest': 'empty', 28 | 'Accept-Language': 'zh-CN,zh;q=0.9', 29 | 'content-type': 'application/json', 30 | 'accessToken': this.token, 31 | 'xweb_xhr': '1', 32 | 'Referer': 'https://servicewechat.com/wxe01416bd2b06871c/279/page-frame.html', 33 | ...(options.headers || {}), 34 | }, 35 | }; 36 | 37 | // 签名值 38 | const params = { 39 | // randomString 6位 40 | nonce: Math.random().toString(36).substring(2, 8), 41 | timestamp: parseInt((new Date).getTime() / 1e3), 42 | } 43 | const hash = crypto.createHash('md5'); 44 | hash.update(params.nonce + params.timestamp + this.token) 45 | params.sign = hash.digest('hex'); 46 | 47 | if (url.includes("?")){ 48 | url = url + '&' + new URLSearchParams(params).toString() 49 | }else{ 50 | url = url + '?' + new URLSearchParams(params).toString() 51 | } 52 | 53 | return fetch(url, defaultOptions) 54 | .then(async res => { 55 | if (res.status !== 200) { 56 | throw new Error(`请求失败:${res.status}\n响应内容:${await res.text()}`); 57 | } 58 | return res; 59 | }) 60 | .then(res => res.json()) 61 | .then(res => { 62 | if (res.code !== 200) { 63 | throw new Error("请求失败:" + res.error.message); 64 | } 65 | return res; 66 | }) 67 | } 68 | 69 | async sign() { 70 | // 获取当前日期 71 | let date = new Date(); 72 | 73 | // 获取年份、月份和日期 74 | let year = date.getFullYear(); 75 | let month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并确保是2位数 76 | let day = String(date.getDate()).padStart(2, '0'); // 确保日期是2位数 77 | // 格式化成 年-月-日 78 | let formattedDate = `${year}-${month}-${day}`; 79 | 80 | await this.request("https://shopapp.miiow.com.cn/buyer/members/sign?time=" + formattedDate, 81 | { 82 | method: 'POST', 83 | body: JSON.stringify({}) 84 | } 85 | ); 86 | } 87 | 88 | } 89 | 90 | async function run(handler){ 91 | // 分割token,使用分割符 @# 92 | const tokens = envToken.split('@'); 93 | 94 | console.log("=====共获取到 " + (tokens.length) + "个账号====="); 95 | 96 | for (let i = 0; i < tokens.length; i++) { 97 | console.log("=====开始执行第 " + (i + 1) + "个账号====="); 98 | const token = tokens[i].trim(); 99 | try { 100 | let message = await handler(token); 101 | console.log("执行成功✅", message); 102 | if (typeof QLAPI !== 'undefined') { 103 | QLAPI.systemNotify({ 104 | "title": `${envName}执行成功`, 105 | "content": `第${i + 1}个账号,${message}` 106 | }) 107 | } 108 | } catch (e) { 109 | console.error("执行失败❌", e) 110 | if (typeof QLAPI !== 'undefined') { 111 | QLAPI.systemNotify({"title": `${envName}执行失败`, "content": e.message}) 112 | } 113 | } 114 | 115 | console.log("=====结束执行第 " + (i + 1) + "个账号====="); 116 | } 117 | } 118 | 119 | async function main() { 120 | if (!envToken) { 121 | console.error(`请设置环境变量${envTokenName}`); 122 | return; 123 | } 124 | 125 | await run(async (token) => { 126 | const api = new Api(token) 127 | await api.sign() 128 | return "签到成功" 129 | }) 130 | } 131 | 132 | 133 | main() 134 | -------------------------------------------------------------------------------- /猫人内裤签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 签到得积分,可以兑换优惠券买内裤 3 | 4 | ## 使用方法 5 | - 打开 “猫人会员商城” 小程序,抓包域名 shopapp.miiow.com.cn,找 请求头 里面有 accessToken 的值 6 | - 设置环境变量,MRNK_TOKEN='上面回去的accessToken',多个账号使用 @分割 7 | 8 | ## 来源 9 | 网络 10 | 11 | 12 | # ⚠️【免责声明】 13 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 14 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 15 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 16 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 17 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 18 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 19 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /臭宝乐园签到/error: -------------------------------------------------------------------------------- 1 | token时效2小时 2 | -------------------------------------------------------------------------------- /臭宝乐园签到/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * name: 臭宝乐园签到 3 | * cron: 10 0 * * * 4 | * 环境变量:CBLY_TOKEN = authorization 5 | */ 6 | const envName = "臭宝乐园" 7 | const envTokenName = "CBLY_TOKEN" 8 | const envToken = process.env[envTokenName]; 9 | 10 | class Api { 11 | 12 | constructor(token) { 13 | this.token = token; 14 | } 15 | 16 | request(url, options) { 17 | const defaultOptions = { 18 | method: 'POST', 19 | ...options, 20 | headers: { 21 | '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', 22 | 'Sec-Fetch-Site': 'cross-site', 23 | 'Sec-Fetch-Mode': 'cors', 24 | 'Sec-Fetch-Dest': 'empty', 25 | 'Accept-Language': 'zh-CN,zh;q=0.9', 26 | 'content-type': 'application/json', 27 | 'authorization': this.token, 28 | 'xweb_xhr': '1', 29 | ...(options.headers || {}), 30 | }, 31 | }; 32 | 33 | return fetch(url, defaultOptions) 34 | .then(async res => { 35 | if (res.status !== 200) { 36 | throw new Error(`请求失败:${res.status}\n响应内容:${await res.text()}`); 37 | } 38 | return res; 39 | }) 40 | .then(res => res.json()) 41 | .then(res => { 42 | if (res.status !== 200) { 43 | throw new Error("请求失败:" + res.msg); 44 | } 45 | return res; 46 | }) 47 | } 48 | 49 | async sign() { 50 | let res = await this.request("https://cb-bags-slb.weinian.com.cn/wnuser/v1/memberUser/daySign", 51 | { 52 | method: 'POST', 53 | body: JSON.stringify({}) 54 | } 55 | ); 56 | } 57 | } 58 | 59 | async function run(handler){ 60 | // 分割token,使用分割符 @# 61 | const tokens = envToken.split('@'); 62 | 63 | console.log("=====共获取到 " + (tokens.length) + "个账号====="); 64 | 65 | for (let i = 0; i < tokens.length; i++) { 66 | console.log("=====开始执行第 " + (i + 1) + "个账号====="); 67 | const token = tokens[i].trim(); 68 | try { 69 | let message = await handler(token); 70 | console.log("执行成功✅", message); 71 | if (typeof QLAPI !== 'undefined') { 72 | QLAPI.systemNotify({ 73 | "title": `${envName}执行成功`, 74 | "content": `第${i + 1}个账号,${message}` 75 | }) 76 | } 77 | } catch (e) { 78 | console.error("执行失败❌", e) 79 | if (typeof QLAPI !== 'undefined') { 80 | QLAPI.systemNotify({"title": `${envName}执行失败`, "content": e.message}) 81 | } 82 | } 83 | 84 | console.log("=====结束执行第 " + (i + 1) + "个账号====="); 85 | } 86 | } 87 | 88 | async function main() { 89 | if (!envToken) { 90 | console.error(`请设置环境变量${envTokenName}`); 91 | return; 92 | } 93 | 94 | await run(async (token) => { 95 | const api = new Api(token) 96 | await api.sign() 97 | return "签到成功" 98 | }) 99 | } 100 | 101 | 102 | main() 103 | -------------------------------------------------------------------------------- /臭宝乐园签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 签到得积分,5币 * 30天 * 12个月 = 1800 = 4/5袋螺蛳粉 / 牙膏 3 | 4 | ## 使用方法 5 | - 打开 “臭宝乐园” 小程序,抓包域名 cb-bags-slb.weinian.com.cn ,找 请求头 里面有 authorization 的值,包含 Bearer开头 6 | - 设置环境变量,CBLY_TOKEN='上面回去的authorization',多个账号使用 @分割 7 | 8 | ## 来源 9 | 网络 10 | 11 | 12 | # ⚠️【免责声明】 13 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 14 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 15 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 16 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 17 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 18 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 19 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /雀巢会员俱乐部签到/main.js: -------------------------------------------------------------------------------- 1 | /** 2 | * name: 雀巢会员俱乐部 3 | * cron: 10 0 * * * 4 | * 环境变量:QCHYJLB_TOKEN = authorization 5 | */ 6 | const envName = "雀巢会员俱乐部" 7 | const envTokenName = "QCHYJLB_TOKEN" 8 | const envToken = process.env[envTokenName]; 9 | 10 | class Api { 11 | 12 | constructor(token) { 13 | this.token = token; 14 | } 15 | 16 | request(url, options) { 17 | const defaultOptions = { 18 | method: 'POST', 19 | ...options, 20 | headers: { 21 | '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', 22 | 'Sec-Fetch-Site': 'cross-site', 23 | 'Sec-Fetch-Mode': 'cors', 24 | 'Sec-Fetch-Dest': 'empty', 25 | 'Accept-Language': 'zh-CN,zh;q=0.9', 26 | 'content-type': 'application/json', 27 | 'authorization': this.token, 28 | 'xweb_xhr': '1', 29 | ...(options.headers || {}), 30 | }, 31 | }; 32 | 33 | return fetch(url, defaultOptions) 34 | .then(async res => { 35 | if (res.status !== 200) { 36 | throw new Error(`请求失败:${res.status}\n响应内容:${await res.text()}`); 37 | } 38 | return res; 39 | }) 40 | .then(res => res.json()) 41 | .then(res => { 42 | if (res.errcode !== 200) { 43 | throw new Error("请求失败:" + res.errmsg); 44 | } 45 | return res.data; 46 | }) 47 | } 48 | 49 | async sign() { 50 | let res = await this.request("https://crm.nestlechinese.com/openapi/activityservice/api/sign2025/sign", 51 | { 52 | method: 'POST', 53 | body: JSON.stringify({ 54 | rule_id: 1 55 | }) 56 | } 57 | ); 58 | return res.sign_points; 59 | } 60 | 61 | async getTaskList(){ 62 | return await this.request("https://crm.nestlechinese.com/openapi/activityservice/api/task/getlist", 63 | { 64 | method: 'POST', 65 | body: JSON.stringify({}) 66 | } 67 | ); 68 | } 69 | 70 | async completeTask(task_guid){ 71 | return await this.request("https://crm.nestlechinese.com/openapi/activityservice/api/task/add", 72 | { 73 | method: 'POST', 74 | body: JSON.stringify({ 75 | task_guid: task_guid 76 | }) 77 | } 78 | ); 79 | } 80 | 81 | async doTaskList(){ 82 | let taskList = await this.getTaskList(); 83 | for (let i = 0; i < taskList.length; i++) { 84 | let task = taskList[i]; 85 | if (task.task_status === 0 && task.task_type === 1) { 86 | console.log("开始执行每日任务", task.task_title, task.task_sub_desc); 87 | await this.completeTask(task.task_guid).catch(e => { 88 | console.error("执行每日任务失败", task.task_title, task.task_sub_desc, e); 89 | }); 90 | } 91 | } 92 | } 93 | } 94 | 95 | async function run(handler){ 96 | // 分割token,使用分割符 @# 97 | const tokens = envToken.split('@'); 98 | 99 | console.log("=====共获取到 " + (tokens.length) + "个账号====="); 100 | 101 | for (let i = 0; i < tokens.length; i++) { 102 | console.log("=====开始执行第 " + (i + 1) + "个账号====="); 103 | const token = tokens[i].trim(); 104 | try { 105 | let message = await handler(token); 106 | console.log("执行成功✅", message); 107 | if (typeof QLAPI !== 'undefined') { 108 | QLAPI.systemNotify({ 109 | "title": `${envName}执行成功`, 110 | "content": `第${i + 1}个账号,${message}` 111 | }) 112 | } 113 | } catch (e) { 114 | console.error("执行失败❌", e) 115 | if (typeof QLAPI !== 'undefined') { 116 | QLAPI.systemNotify({"title": `${envName}执行失败`, "content": e.message}) 117 | } 118 | } 119 | 120 | console.log("=====结束执行第 " + (i + 1) + "个账号====="); 121 | } 122 | } 123 | 124 | async function main() { 125 | if (!envToken) { 126 | console.error(`请设置环境变量${envTokenName}`); 127 | return; 128 | } 129 | 130 | // 分割token,使用分割符 @# 131 | return run(async (token) => { 132 | const api = new Api(token) 133 | 134 | console.log("========开始执行每日任务========"); 135 | 136 | await api.doTaskList(); 137 | 138 | console.log("========开始执行签到任务========"); 139 | 140 | let point = await api.sign() 141 | 142 | return "签到积分:" + point; 143 | }) 144 | } 145 | 146 | 147 | main() 148 | -------------------------------------------------------------------------------- /雀巢会员俱乐部签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 签到得积分, ((2 * 10 * 7)任务币+一个星期签到(2 * 3 + 3 * 5 + 20) * 4个星期) = 724 * 12个月 = 8688,奶粉随便换 3 | 4 | ## 使用方法 5 | - 打开 “雀巢会员俱乐部” 小程序,抓包域名 crm.nestlechinese.com ,找 请求头 里面有 authorization 的值,包含 Bearer开头 6 | - 设置环境变量,QCHYJLB_TOKEN='上面回去的authorization',多个账号使用 @分割 7 | - authorization 有效期一个月 8 | 9 | ## 其他 10 | 测试国外网络不支持使用 11 | 12 | ## 来源 13 | 网络 14 | 15 | 16 | # ⚠️【免责声明】 17 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 18 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 19 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 20 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 21 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 22 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 23 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 -------------------------------------------------------------------------------- /鸿星尔克签到/HXEK.py: -------------------------------------------------------------------------------- 1 | # !/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # ------------------------------- 4 | # cron "5 11 * * *" script-path=xxx.py,tag=匹配cron用 5 | # const $ = new Env('鸿星尔克官方会员中心小程序') 6 | 7 | import os 8 | import random 9 | import time 10 | from datetime import datetime, time as times 11 | import requests 12 | from requests.packages.urllib3.exceptions import InsecureRequestWarning 13 | 14 | # import CHERWIN_TOOLS 15 | # 禁用安全请求警告 16 | requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 17 | # 18 | IS_DEV = False 19 | if os.path.isfile('DEV_ENV.py'): 20 | import DEV_ENV 21 | 22 | IS_DEV = True 23 | if os.path.isfile('notify.py'): 24 | from notify import send 25 | 26 | print("加载通知服务成功!") 27 | else: 28 | print("加载通知服务失败!") 29 | send_msg = '' 30 | one_msg = '' 31 | 32 | 33 | def Log(cont=''): 34 | global send_msg, one_msg 35 | print(cont) 36 | if cont: 37 | one_msg += f'{cont}\n' 38 | send_msg += f'{cont}\n' 39 | 40 | 41 | class RUN: 42 | def __init__(self, info, index): 43 | global one_msg 44 | one_msg = '' 45 | # memberId @ enterpriseId @ unionid @ openid @ wxOpenid 46 | split_info = info.split('@') 47 | len_split_info = len(split_info) 48 | if len_split_info < 2: 49 | print('变量长度不足,请检查变量') 50 | return False 51 | self.memberId = split_info[0] 52 | self.enterpriseId = split_info[1] 53 | # print(self.token) 54 | 55 | last_info = split_info[len_split_info - 1] 56 | self.send_UID = None 57 | if len_split_info > 0 and "UID_" in last_info: 58 | print('检测到设置了UID') 59 | print(last_info) 60 | self.send_UID = last_info 61 | self.index = index + 1 62 | self.s = requests.session() 63 | self.s.verify = False 64 | self.headers = { 65 | 'Host': 'hope.demogic.com', 66 | 'xweb_xhr': '1', 67 | 'channelEntrance': 'wx_app', 68 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/9129', 69 | 'sign': self.enterpriseId, 70 | 'Accept': '*/*', 71 | 'Sec-Fetch-Site': 'cross-site', 72 | 'Sec-Fetch-Mode': 'cors', 73 | 'Sec-Fetch-Dest': 'empty', 74 | 'Referer': 'https://servicewechat.com/wxa1f1fa3785a47c7d/55/page-frame.html', 75 | 'Accept-Language': 'zh-CN,zh;q=0.9', 76 | 'Content-Type': 'application/x-www-form-urlencoded', 77 | } 78 | self.appid = 'wxa1f1fa3785a47c7d' 79 | self.defualt_parmas = { 80 | 'memberId': self.memberId, 81 | 'cliqueId': '-1', 82 | 'cliqueMemberId': '-1', 83 | 'useClique': '0', 84 | 'enterpriseId': self.enterpriseId, 85 | 'appid': self.appid, 86 | 'gicWxaVersion': '3.9.16' 87 | } 88 | self.baseUrl = 'https://hope.demogic.com/gic-wx-app/' 89 | self.use_power_max = False 90 | 91 | def make_request(self, url, method='post', headers={}, data={}, params=None): 92 | if headers == {}: 93 | headers = self.headers 94 | try: 95 | if method.lower() == 'get': 96 | response = self.s.get(url, headers=headers, verify=False, params=params) 97 | elif method.lower() == 'post': 98 | response = self.s.post(url, headers=headers, json=data, params=params, verify=False) 99 | else: 100 | raise ValueError("不支持的请求方法❌: " + method) 101 | return response.json() 102 | except requests.exceptions.RequestException as e: 103 | print("请求异常❌:", e) 104 | except ValueError as e: 105 | print("值错误或不支持的请求方法❌:", e) 106 | except Exception as e: 107 | print("发生了未知错误❌:", e) 108 | 109 | def gen_sign(self): 110 | sign, random_int, timestamp = CHERWIN_TOOLS.HXEK_SIGN(self.memberId,self.appid) 111 | self.defualt_parmas['random'] = random_int 112 | self.defualt_parmas['sign'] = sign 113 | self.defualt_parmas['timestamp'] = timestamp 114 | self.defualt_parmas['transId'] = self.appid+timestamp 115 | 116 | def get_member_grade_privileg(self): 117 | act_name = '获取用户信息' 118 | Log(f'\n====== {act_name} ======') 119 | self.gen_sign() 120 | self.defualt_parmas['launchOptions'] = '{"path":"pages/points-mall/member-task/member-task","query":{},"scene":1256,"referrerInfo":{},"apiCategory":"default"}' 121 | 122 | url = f"{self.baseUrl}get_member_grade_privileg.json" 123 | response = self.make_request(url,'post',params=self.defualt_parmas) 124 | if response.get('errcode', -1) == 0: 125 | data = response.get('response', {}) 126 | member = data.get('member', {}) 127 | if member: 128 | phoneNumber = member.get('phoneNumber', '') 129 | phone = phoneNumber[:4]+'***'+phoneNumber[-4:] 130 | wxOpenid = member.get('openId', '') 131 | unionid = member.get('thirdUnionid', '') 132 | self.defualt_parmas['wxOpenid'] = wxOpenid 133 | self.defualt_parmas['unionid'] = unionid 134 | Log(f'{act_name}成功!✅') 135 | Log(f'> 当前用户:【{phone}】') 136 | return True 137 | elif response.get('errcode', -1) == 900001: 138 | Log(f'> 今天已签到✅') 139 | return False 140 | else: 141 | print(f'{act_name}失败❌:{response}') 142 | return False 143 | 144 | def member_sign(self): 145 | act_name = '签到' 146 | Log(f'\n====== {act_name} ======') 147 | self.gen_sign() 148 | self.defualt_parmas['launchOptions'] = '{"path":"pages/points-mall/member-task/member-task","query":{},"scene":1256,"referrerInfo":{},"apiCategory":"default"}' 149 | 150 | url = f"{self.baseUrl}member_sign.json" 151 | response = self.make_request(url,'post',params=self.defualt_parmas) 152 | if response.get('errcode', -1) == 0: 153 | res = response.get('response', {}) 154 | memberSign = res.get('memberSign', {}) 155 | integralCount = memberSign.get('integralCount', '') 156 | continuousCount = memberSign.get('continuousCount', '') 157 | points = res.get('points', '') 158 | Log(f'{act_name}成功!✅') 159 | Log(f'> 当前积分:【{points}】 连续签到:【{continuousCount}】天') 160 | return True 161 | elif response.get('errcode', -1) == 900001: 162 | Log(f'> 今天已签到✅') 163 | return False 164 | else: 165 | print(f'{act_name}失败❌:{response}') 166 | return False 167 | 168 | def main(self): 169 | Log(f"\n开始执行第{self.index}个账号--------------->>>>>") 170 | if self.get_member_grade_privileg(): 171 | # random_delay() 172 | self.member_sign() 173 | self.sendMsg() 174 | return True 175 | else: 176 | self.sendMsg() 177 | return False 178 | 179 | def sendMsg(self): 180 | if self.send_UID: 181 | push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME) 182 | print(push_res) 183 | 184 | 185 | def random_delay(min_delay=1, max_delay=5): 186 | """ 187 | 在min_delay和max_delay之间产生一个随机的延时时间,然后暂停执行。 188 | 参数: 189 | min_delay (int/float): 最小延时时间(秒) 190 | max_delay (int/float): 最大延时时间(秒) 191 | """ 192 | delay = random.uniform(min_delay, max_delay) 193 | print(f">本次随机延迟: {delay:.2f} 秒.....") 194 | time.sleep(delay) 195 | 196 | 197 | def down_file(filename, file_url): 198 | print(f'开始下载:{filename},下载地址:{file_url}') 199 | try: 200 | response = requests.get(file_url, verify=False, timeout=10) 201 | response.raise_for_status() 202 | with open(filename + '.tmp', 'wb') as f: 203 | f.write(response.content) 204 | print(f'【{filename}】下载完成!') 205 | 206 | # 检查临时文件是否存在 207 | temp_filename = filename + '.tmp' 208 | if os.path.exists(temp_filename): 209 | # 删除原有文件 210 | if os.path.exists(filename): 211 | os.remove(filename) 212 | # 重命名临时文件 213 | os.rename(temp_filename, filename) 214 | print(f'【{filename}】重命名成功!') 215 | return True 216 | else: 217 | print(f'【{filename}】临时文件不存在!') 218 | return False 219 | except Exception as e: 220 | print(f'【{filename}】下载失败:{str(e)}') 221 | return False 222 | 223 | 224 | def import_Tools(): 225 | global CHERWIN_TOOLS, ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode 226 | import CHERWIN_TOOLS 227 | ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME, 228 | local_version) 229 | 230 | 231 | if __name__ == '__main__': 232 | APP_NAME = '鸿星尔克官方会员中心小程序' 233 | ENV_NAME = 'HXEK' 234 | CK_URL = 'hope.demogic.com请求头' 235 | CK_NAME = 'memberId@enterpriseId' 236 | CK_EX = 'ff80808xxxxxxxx@ff8080817xxxxxxx' 237 | print(f''' 238 | ✨✨✨ {APP_NAME}签到✨✨✨ 239 | ✨ 功能: 240 | 积分签到 241 | ✨ 抓包步骤: 242 | 打开{APP_NAME} 243 | 授权登陆 244 | 打开抓包工具 245 | 找{CK_URL}{CK_NAME} 246 | 参数示例:{CK_EX} 247 | ✨ ✨✨wxpusher一对一推送功能, 248 | ✨需要定义变量export WXPUSHER=wxpusher的app_token,不设置则不启用wxpusher一对一推送 249 | ✨需要在{ENV_NAME}变量最后添加@wxpusher的UID 250 | ✨ 设置青龙变量: 251 | export {ENV_NAME}='{CK_NAME}参数值'多账号#或&分割 252 | export SCRIPT_UPDATE = 'False' 关闭脚本自动更新,默认开启 253 | ✨ ✨ 注意:抓完CK没事儿别打开小程序,重新打开小程序请重新抓包 254 | ✨ 推荐cron:5 11 * * * 255 | ✨✨✨ @Author CHERWIN✨✨✨ 256 | ''') 257 | local_script_name = os.path.basename(__file__) 258 | local_version = '2024.06.01' 259 | if IS_DEV: 260 | import_Tools() 261 | else: 262 | if os.path.isfile('CHERWIN_TOOLS.py'): 263 | import_Tools() 264 | else: 265 | if down_file('CHERWIN_TOOLS.py', 'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py'): 266 | print('脚本依赖下载完成请重新运行脚本') 267 | import_Tools() 268 | else: 269 | print( 270 | '脚本依赖下载失败,请到https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py下载最新版本依赖') 271 | exit() 272 | print(TIPS) 273 | token = '' 274 | token = ENV if ENV else token 275 | if not token: 276 | print(f"未填写{ENV_NAME}变量\n青龙可在环境变量设置 {ENV_NAME} 或者在本脚本文件上方将{CK_NAME}填入token =''") 277 | exit() 278 | tokens = CHERWIN_TOOLS.ENV_SPLIT(token) 279 | # print(tokens) 280 | if len(tokens) > 0: 281 | print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<") 282 | access_token = [] 283 | for index, infos in enumerate(tokens): 284 | run_result = RUN(infos, index).main() 285 | if not run_result: continue 286 | # if send: send(f'{APP_NAME}挂机通知', send_msg + TIPS_HTML) 287 | -------------------------------------------------------------------------------- /鸿星尔克签到/readme.md: -------------------------------------------------------------------------------- 1 | ## 功能 2 | 自动签到得积分,积分大概一个月就可以换帽子衣服 3 | 4 | ## 使用方法 5 | ### 抓包教程 6 | - 打开“鸿星尔克官方会员中心小程序” 7 | - 授权登陆 8 | - 打开抓包工具 9 | - 找*hope.demogic.com*域名的请求体或请求头*memberId* 和 *enterpriseId* 10 | 11 | ### 参数示例 12 | 格式为:memberId@enterpriseId 13 | 示例:ff80808xxxxxxxx@ff8080817xxxxxxx 14 | 15 | ### 环境变量 16 | ``` 17 | # 自行替换关键词变量 18 | HXEK=memberId@enterpriseId 19 | # 多个账号 20 | HXEK=memberId@enterpriseId#memberId@enterpriseId 21 | ``` 22 | 23 | ## 来源 24 | https://github.com/CHERWING/CHERWIN_SCRIPTS 25 | 26 | 27 | # ⚠️【免责声明】 28 | 1. 此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 29 | 2. 由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 30 | 3. 请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 31 | 4. 此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 32 | 5. 本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 33 | 6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 34 | 7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 --------------------------------------------------------------------------------