├── .gitignore
├── 75water.js
├── CHERWIN_TOOLS.py
├── Q必达.js
├── aebs.js
├── aima.js
├── bagua.js
├── baixiang.js
├── bnmdhg_wx.js
├── bsd.js
├── bwcj.js
├── cbly.js
├── chinaUnicom.js
├── chinaUnicomYpcj.js
├── chml.py
├── dch.js
├── dq点单.js
├── dydd.py
├── fs.js
├── ftyj.js
├── gjgj.js
├── gjjj.py
├── gljj.js
├── gmjk.js
├── gobing_checkin.py
├── hdl.py
├── hqcsh-get.js
├── hqcsh.js
├── hqcsh.py
├── htmwg.js
├── huanlejia.js
├── hxrk.py
├── hz.js
├── hzh.js
├── jdc.py
├── jjjhyzx.py
├── jryj.js
├── jyj.py
├── kg.py
├── kgzj.py
├── lbdq.py
├── ljgy.js
├── lqkx.py
├── lsxds.py
├── ltyd.py
├── lxapp.js
├── mmx.js
├── mpcbh.js
├── ms.js
├── mswefls.js
├── mxbc.py
├── notify.py
├── nwy.js
├── nx.py
├── pinzan.js
├── pzxq.js
├── qchyjlb.js
├── qjez.js
├── rainyun.py
├── rfwsc.py
├── rqtyg.js
├── sandeli.js
├── sendNotify.js
├── sfsy.py
├── syns.js
├── tbhyzx.py
├── this.js
├── tyklxq.py
├── utils.js
├── wangchao.js
├── wdzhsy.js
├── wyshyj.js
├── xdf.py
├── xhgj.js
├── xhxy.py
├── xpnc.js
├── xsy.js
├── ybs.js
├── ydyp.py
├── yht.js
├── yl.py
├── yybpc.js
├── zippo.js
└── zwxq.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # Editor directories and files
2 | .idea
3 |
4 | # Package Manager
5 | node_modules
6 | .pnpm-debug.log*
7 | package.json
8 |
9 | # System
10 | .DS_Store
11 |
12 | # Bundle
13 | dist
14 | coverage
15 |
16 | # local env files
17 | *.local
18 | .eslintcache
19 | cypress/screenshots/*
20 | cypress/videos/*
21 | tmp
22 |
--------------------------------------------------------------------------------
/75water.js:
--------------------------------------------------------------------------------
1 | // cron: 35 7,18 * * *
2 | // 抓data中sid YZxxx 和 url中的access_token 用&拼起来 多账号换行
3 | // export water75="YZxxx&770f5xxxx
4 | // 770f5xxxx"
5 | const {
6 | getCurrDay,checkTime,Env,random
7 | } = require('./utils.js')
8 | const {sendNotify} = require('./sendNotify.js')
9 | const $ = new Env("7.5水签到");
10 | const axios = require('axios')
11 | const userInfoList = $.getEnvKey('water75').split('\n')
12 | if(!userInfoList.length||userInfoList[0]===''){
13 | throw new Error('未找到ck')
14 | }
15 | console.log(`获取到${userInfoList.length}个ck`);
16 |
17 | const baseUrl = 'https://h5.youzan.com'
18 | const headers = {
19 | 'Host': 'h5.youzan.com',
20 | 'Connection': 'keep-alive',
21 | 'xweb_xhr': 1,
22 | 'Extra-Data': '',
23 | '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',
24 | 'Content-Type': 'application/json',
25 | 'Accept': '*/*',
26 | 'Sec-Fetch-Site': 'cross-site',
27 | 'Sec-Fetch-Mode': 'cors',
28 | 'Sec-Fetch-Dest': 'empty',
29 | 'Referer': 'https://servicewechat.com/wx5508c9ab0d2118ff/62/page-frame.html',
30 | 'Accept-Encoding': 'gzip, deflate, br',
31 | 'Accept-Language': 'zh-CN,zh;q=0.9',
32 |
33 | }
34 | const url = {
35 | 'checkin':'/wscump/checkin/checkinV2.json?checkinId=3997371&app_id=wx5508c9ab0d2118ff&kdt_id=105036832&access_token=',
36 | 'getCountDay':'/wscump/checkin/get_activity_by_yzuid_v2.json?checkinId=3997371&app_id=wx5508c9ab0d2118ff&kdt_id=105036832&access_token=',
37 | 'userInfo':'/wscaccount/api/authorize/data.json?app_id=wxf739eb6ad6a644da&kdt_id=146384563&appId=wxf739eb6ad6a644da&access_token='
38 | }
39 | const api = {
40 | checkin: ({data,token}) => {
41 | return axios({
42 | url: baseUrl+url.checkin+token,
43 | method: 'get',
44 | headers:{
45 | ...headers,
46 | "Extra-Data":JSON.stringify(data)
47 | },
48 | })
49 | },
50 | userInfo: ({data,token}) => {
51 | return axios({
52 | url: baseUrl+url.userInfo+token,
53 | method: 'get',
54 | headers:{
55 | ...headers,
56 | "Extra-Data":JSON.stringify(data)
57 | },
58 | })
59 | },
60 | getCountDay: ({data,token}) => {
61 | return axios({
62 | url: baseUrl+url.getCountDay+token,
63 | method: 'get',
64 | headers:{
65 | ...headers,
66 | "Extra-Data":JSON.stringify(data)
67 | },
68 | })
69 | },
70 | }
71 | const processTokens = async () => {
72 | let index = 0
73 | const randomTime = random(1, 300)
74 | console.log('随机延迟:',randomTime + '秒');
75 | await $.wait(randomTime*1000)
76 | for (const token of userInfoList) {
77 | try {
78 | $.log('')
79 | index++
80 | const userData = token.split('&')
81 | const headerData = {"is_weapp":1,"sid":userData[0],"version":"2.175.7","client":"weapp","bizEnv":"wsc","uuid":"dPN7c9aDRQbsqcZ1717150035269","ftime":new Date().getTime()}
82 | const headerParams = {
83 | data:headerData,
84 | token:userData[1]
85 | }
86 | const data = await api.userInfo(headerParams)
87 | const {mobile} = data?.data?.data?.userInfo
88 | if(!mobile){
89 | $.log(`账号【${index}】登录失效`)
90 | $.log('')
91 | continue;
92 | }
93 | $.log(`账号【${index}】 当前用户:${mobile}`);
94 | await $.wait(2000)
95 | const {data:{msg}} = await api.checkin(headerParams)
96 | $.log(`账号【${index}】 签到信息:${msg}`);
97 | await $.wait(2000)
98 | const {data:{data:{continuesDay}}} = await api.getCountDay(headerParams)
99 | $.log(`账号【${index}】 连续签到天数:${continuesDay}`);
100 | await $.wait(3500)
101 | } catch (error) {
102 | $.logErr(error.toString());
103 | }
104 | }
105 | $.log('')
106 | await sendNotify('7.5水签到', $.logs.join('
'))
107 | $.done()
108 | };
109 |
110 | processTokens()
--------------------------------------------------------------------------------
/aebs.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: smallfawn
4 | @Date: 2024.06.11 12:44
5 | @Description: 瑷尔博士官方云商城小程序
6 | ------------------------------------------
7 | 变量名airboshi
8 | 变量值 https://xapi.weimob.com/api3/ 域名下的Headers请求头的X-WX-Token 多账号&或换行或新增同名变量
9 | [Script]
10 | http-response
11 |
12 | [MITM]
13 | hostname =
14 |
15 | ⚠️【免责声明】
16 | ------------------------------------------
17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
24 | */
25 |
26 | const $ = new Env("瑷尔博士官方云商城");
27 | let ckName = `airboshi`;
28 | let userCookie = checkEnv(
29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
30 | );
31 | const notify = $.isNode() ? require("./sendNotify") : "";
32 |
33 | !(async () => {
34 | console.log(
35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
36 | new Date().getTime() +
37 | new Date().getTimezoneOffset() * 60 * 1000 +
38 | 8 * 60 * 60 * 1000
39 | ).toLocaleString()} \n==================================================`
40 | );
41 | //console.log(userCookie)
42 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
43 | let index = 1;
44 | let strSplitor = "#";
45 |
46 | for (let user of userCookie) {
47 | $.log(`\n🚀 user:【${index}】 start work\n`);
48 | index++
49 | $.token = user
50 | $.ckStatus = true;
51 | await signIn()
52 | }
53 |
54 | await $.sendMsg($.logs.join("\n"));
55 | })()
56 | .catch((e) => console.log(e))
57 | .finally(() => $.done());
58 | async function signIn() {
59 | const config = {
60 | method: 'post',
61 | url: 'https://xapi.weimob.com/api3/onecrm/mactivity/sign/misc/sign/activity/c/signMainInfo',
62 | headers: {
63 | "Accept": "*/*",
64 | "Accept-Encoding": "gzip, deflate, br",
65 | "Accept-Language": "zh-CN,zh;q=0.9",
66 | "Connection": "keep-alive",
67 | "Content-Type": "application/json",
68 | "Host": "xapi.weimob.com",
69 | "Referer": "https://servicewechat.com/wx0399cf391f15b422/46/page-frame.html",
70 | "Sec-Fetch-Dest": "empty",
71 | "Sec-Fetch-Mode": "cors",
72 | "Sec-Fetch-Site": "cross-site",
73 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555",
74 | "X-WX-Token": $.token,
75 | "xweb_xhr": "1"
76 | },
77 | data: JSON.stringify({
78 | "appid": "wx0399cf391f15b422",
79 | "basicInfo": {
80 | "vid": 6015569623153,
81 | "vidType": 2,
82 | "bosId": 4021407433153,
83 | "productId": 146,
84 | "productInstanceId": 6351100153,
85 | "productVersionId": "14026",
86 | "merchantId": 2000150059153,
87 | "tcode": "weimob",
88 | "cid": 376411153
89 | },
90 | "extendInfo": {
91 | "wxTemplateId": 7579,
92 | "analysis": [],
93 | "bosTemplateId": 1000001485,
94 | "childTemplateIds": [
95 | {
96 | "customId": 90004,
97 | "version": "crm@0.1.17"
98 | },
99 | {
100 | "customId": 90002,
101 | "version": "ec@43.9"
102 | },
103 | {
104 | "customId": 90006,
105 | "version": "hudong@0.0.205"
106 | },
107 | {
108 | "customId": 90008,
109 | "version": "cms@0.0.429"
110 | }
111 | ],
112 | "quickdeliver": {
113 | "enable": false
114 | },
115 | "youshu": {
116 | "enable": false
117 | },
118 | "source": 1,
119 | "channelsource": 5,
120 | "refer": "onecrm-signgift",
121 | //"mpScene": 1256
122 | },
123 | "queryParameter": null,
124 | "i18n": {
125 | "language": "zh",
126 | "timezone": "8"
127 | },
128 | "pid": "",
129 | "storeId": "",
130 | "customInfo": {
131 | "source": 0,
132 | //"wid": 11167663828
133 | }
134 | })
135 | };
136 | let { data: result } = await Request(config)
137 | if (result?.errcode == "0") {
138 | $.log(`签到成功`);
139 | } else {
140 | $.log(`签到失败`)
141 | $.log(JSON.stringify(result))
142 | }
143 |
144 | }
145 |
146 |
147 | function checkEnv(userCookie) {
148 | const envSplitor = ["&", "\n"];
149 | //console.log(userCookie);
150 | let userList = userCookie
151 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
152 | .filter((n) => n);
153 | console.log(`共找到${userList.length}个账号`);
154 | return userList;
155 | }
156 | // prettier-ignore
157 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
158 |
159 | async function Request(options) {
160 | if ($.isNode()) {
161 | const axios = require("axios");
162 | Request = async (options) => {
163 | try {
164 | return await axios.request(options);
165 | } catch (error) {
166 | return error && error.error ? error.error : "请求失败";
167 | }
168 | };
169 | }
170 | if ($.isQuanX()) {
171 | Request = async (options) => {
172 | try {
173 | return await $task.fetch(options);
174 | } catch (error) {
175 | return error && error.error ? error.error : "请求失败";
176 | }
177 | };
178 | }
179 | return await Request(options);
180 | }
--------------------------------------------------------------------------------
/bagua.js:
--------------------------------------------------------------------------------
1 | // cron: 40 8,17 * * *
2 | // 抓header中的token 多账号换行
3 | // export bagua="1ef1e1c6-xxe"
4 | const {
5 | getCurrDay,checkTime,Env,random
6 | } = require('./utils.js')
7 | const {sendNotify} = require('./sendNotify.js')
8 | const $ = new Env("叭卦商城优选签到");
9 | const axios = require('axios')
10 | const userInfoList = $.getEnvKey('bagua').split('\n')
11 | if(!userInfoList.length||userInfoList[0]===''){
12 | throw new Error('未找到ck')
13 | }
14 | console.log(`获取到${userInfoList.length}个ck`);
15 |
16 | const baseUrl = 'https://shop.bg19.cn/api/wanlshop'
17 | const headers = {
18 | 'Host': 'shop.bg19.cn',
19 | 'Connection': 'keep-alive',
20 | 'xweb_xhr': 1,
21 | 'Accept-Language': 'zh-CN,zh;q=0.9',
22 | 'App-Client': 'mp-wanlshop',
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(0x63090c11)XWEB/13283',
24 | 'token': '1ef1e1c6-ece0-4abe-a625-64eab88cfebe',
25 | 'Content-Type': 'pplication/json;charset=UTF-8',
26 | 'Accept': '*/*',
27 | 'Sec-Fetch-Site': 'cross-site',
28 | 'Sec-Fetch-Mode': 'cors',
29 | 'Sec-Fetch-Dest': 'empty',
30 | 'Referer': 'https://servicewechat.com/wxce969b8fdc6de2aa/266/page-frame.html',
31 | 'Accept-Encoding':' gzip, deflate, br',
32 | }
33 | const url = {
34 | 'signIn':'/Punch/click',
35 | 'userInfo':'/user/refresh ',
36 | }
37 | const api = {
38 | signIn: (token) => {
39 | headers.token = token
40 | return axios({
41 | url: baseUrl+url.signIn,
42 | method: 'get',
43 | headers,
44 | })
45 | },
46 | userInfo: (token) => {
47 | headers.token = token
48 | return axios({
49 | url: baseUrl+url.userInfo,
50 | method: 'post',
51 | headers
52 | })
53 | },
54 | }
55 | const processTokens = async () => {
56 | let index = 0 //用来给账号标记序号, 从1开始
57 | const randomTime = random(1, 300)
58 | console.log('随机延迟:',randomTime + '秒');
59 | await $.wait(randomTime*1000)
60 | for (const token of userInfoList) {
61 | try {
62 | $.log('')
63 | index++
64 | const data = await api.userInfo(token)
65 | const mobile = data?.data?.data?.userinfo?.mobile
66 | if(!mobile){
67 | $.log(`账号【${index}】登录失效`)
68 | $.log('')
69 | continue;
70 | }
71 | $.log(`账号【${index}】 当前用户:${mobile}`);
72 | await $.wait(2000)
73 | const {data:{data:{msg}}} = await api.signIn(token)
74 | $.log(`账号【${index}】 签到信息:${msg}`);
75 | await $.wait(2000)
76 | const infoData = await api.userInfo(token)
77 | const currentScore = infoData?.data?.data?.userinfo?.score
78 | $.log(`账号【${index}】 当前积分:${currentScore}`);
79 | await $.wait(3500)
80 | } catch (error) {
81 | $.logErr(error.toString());
82 | }
83 | }
84 | $.log('')
85 | $.logs = $.logs.join('
')
86 | };
87 |
88 | processTokens().finally(async() => {
89 | await sendNotify('叭卦商城优选签到',$.logs)
90 | $.done()
91 | });
--------------------------------------------------------------------------------
/baixiang.js:
--------------------------------------------------------------------------------
1 | // cron: 40 7,18 * * *
2 | // 抓header中Authorization 多账号换行
3 | const {
4 | getCurrDay,checkTime,Env,random
5 | } = require('./utils.js')
6 | const {sendNotify} = require('./sendNotify.js')
7 | const $ = new Env("白象签到");
8 | const axios = require('axios')
9 | let index = 0
10 | const userInfoList = $.getEnvKey('baixiang').split('\n')
11 | if(!userInfoList.length||userInfoList[0]===''){
12 | // throw new Error('未找到ck')
13 | }
14 | console.log(`获取到${userInfoList.length}个ck`);
15 |
16 | const headers = {
17 | "Host": "dy.baixiangfood.com",
18 | "Connection": "keep-alive",
19 | // "Content-Length": "16",
20 | "xweb_xhr": "1",
21 | "Authorization": "x",
22 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c11)XWEB/11275",
23 | "Content-Type": "application/json",
24 | "Accept": "*/*",
25 | "Sec-Fetch-Site": "cross-site",
26 | "Sec-Fetch-Mode": "cors",
27 | "Sec-Fetch-Dest": "empty",
28 | "Referer": "https://servicewechat.com/wxeaf5d66c48160b2d/18/page-frame.html",
29 | "Accept-Encoding": "gzip, deflate, br",
30 | "Accept-Language": "zh-CN,zh;q=0.9"
31 |
32 | }
33 | const api = {
34 | sign: ({token,userId}) => {
35 | return axios({
36 | url: 'https://dy.baixiangfood.com/api/app/signLog/sign',
37 | method: 'post',
38 | headers:{
39 | ...headers,
40 | "Authorization": token,
41 | },
42 | data:{userId}
43 | })
44 | },
45 | getSignStatus: ({token,userId}) => {
46 | return axios({
47 | url:'https://dy.baixiangfood.com/api/app/signLog/getSignStatus ',
48 | method: 'post',
49 | headers:{
50 | ...headers,
51 | "Authorization": token,
52 | },
53 | data:{userId}
54 | })
55 | },
56 | getSignList: ({token,userId}) => {
57 | return axios({
58 | url: 'https://dy.baixiangfood.com/api/app/signLog/getSignlist ',
59 | method: 'post',
60 | headers:{
61 | ...headers,
62 | "Authorization": token,
63 | },
64 | data:{userId}
65 | })
66 | },
67 | getUserInfo: (token) => {
68 | return axios({
69 | url: 'https://dy.baixiangfood.com/api/app/user/getUserInfo ',
70 | method: 'get',
71 | headers:{
72 | ...headers,
73 | "Authorization": token,
74 | },
75 | })
76 | }
77 | }
78 |
79 | const getUserInfo = async (params) => {
80 | const {data:{data:{id,phone,integral}}} = await api.getUserInfo(params)
81 | if(!id){
82 | $.log(`账号【${index}】登录失效`)
83 | $.log('')
84 | return null
85 | }
86 | $.log(`账号【${index}】 当前用户:【${phone}】`);
87 | $.log(`账号【${index}】 当前积分:【${integral}】`);
88 | return id
89 | }
90 | const getSignStatus = async (params) => {
91 | const {data:{data:{signStatus},count}} = await api.getSignStatus(params)
92 | !signStatus&&$.log(`账号【${index}】 今日已签到`);
93 | $.log(`账号【${index}】 已连续签到:【${count}】天`);
94 | return signStatus
95 | }
96 | const userSign = async (params) => {
97 | const {data:{msg,count,code}} = await api.sign(params)
98 | if(code===200){
99 | $.log(`账号【${index}】 签到信息:${msg}!,获得${count}积分`);
100 | }else{
101 | $.log(`账号【${index}】 签到信息:${msg}`);
102 | }
103 | }
104 |
105 | const processTokens = async () => {
106 | const randomTime = random(1, 300)
107 | console.log('随机延迟:',randomTime + '秒');
108 | await $.wait(randomTime*1000)
109 | for (const token of userInfoList) {
110 | try {
111 | $.log('')
112 | index++
113 | const id = await getUserInfo(token)
114 | await $.wait(3500)
115 | if(!id){
116 | continue;
117 | }
118 | //检查签到状态
119 | const signStatus = await getSignStatus({token,userId:id})
120 | await $.wait(3500)
121 | if(signStatus){
122 | //签到
123 | await userSign({token,userId:id})
124 | }
125 | await $.wait(3500)
126 | } catch (error) {
127 | $.logErr(error.toString());
128 | }
129 | }
130 | $.log('')
131 | await sendNotify('白象签到', $.logs.join('
'))
132 | $.done()
133 | };
134 |
135 | processTokens()
--------------------------------------------------------------------------------
/bsd.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: smallfawn
4 | @Date: 2024.06.09 10.04
5 | @Description: 波司登小程序 每日签到
6 | ------------------------------------------
7 | 变量名bosideng
8 | 变量值 抓https://gwuop.bsdits.cn/points-mall/ 请求头Headers中x-access-token的值和
9 | https://gbpapihost.bsdits.cn/v3/projects/bfe7825ce8dd5cec/collect POST请求中请求体的gioId或deviceId或userId
10 |
11 | 两个值拼接# 例如89f...........#o15uuuuu_mf-SSS
12 | 多账号&或换行或新建同名变量
13 | 如果找不到第二个值 那么请进入签到页面找到https://gwuop.bsdits.cn/points-mall/front/member/ 开头的 /activities/1/records结尾的 中间的就是第二个值
14 | [Script]
15 | http-response
16 |
17 | [MITM]
18 | hostname =
19 |
20 | ⚠️【免责声明】
21 | ------------------------------------------
22 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
23 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
24 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
25 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
26 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
27 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
28 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
29 | */
30 |
31 | const $ = new Env("波司登小程序");
32 | let ckName = `bosideng`;
33 | let userCookie = checkEnv(
34 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
35 | );
36 | const notify = $.isNode() ? require("./sendNotify") : "";
37 |
38 | !(async () => {
39 | console.log(
40 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
41 | new Date().getTime() +
42 | new Date().getTimezoneOffset() * 60 * 1000 +
43 | 8 * 60 * 60 * 1000
44 | ).toLocaleString()} \n==================================================`
45 | );
46 | //console.log(userCookie)
47 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
48 | let index = 1;
49 | let strSplitor = "#";
50 |
51 | for (let user of userCookie) {
52 | $.log(`\n🚀 user:【${index}】 start work\n`);
53 | index++
54 | $.token = user.split(strSplitor)[0]
55 | $.union_id = user.split(strSplitor)[1]
56 | $.ckStatus = true;
57 | await records()
58 | }
59 |
60 | await $.sendMsg($.logs.join("\n"));
61 | })()
62 | .catch((e) => console.log(e))
63 | .finally(() => $.done());
64 | function getTime() {
65 | // 创建Date对象
66 | const now = new Date();
67 | // 获取年、月、日、时、分、秒,并格式化为两位数
68 | const year = now.getFullYear();
69 | const month = String(now.getMonth() + 1).padStart(2, '0'); // getMonth返回的是0-11,所以需要+1
70 | const day = String(now.getDate()).padStart(2, '0');
71 | const hours = String(now.getHours()).padStart(2, '0');
72 | const minutes = String(now.getMinutes()).padStart(2, '0');
73 | const seconds = String(now.getSeconds()).padStart(2, '0');
74 | const timestampStr = `${year}${month}${day}${hours}${minutes}${seconds}`;
75 | return timestampStr
76 | // 调用函数并打印结果
77 | }
78 | function MD5(data) {
79 | let crypto = require('crypto')
80 | return crypto.createHash('md5').update(data).digest('hex')
81 | }
82 | async function records() {
83 | let time = getTime()
84 | let nonce = $.uuid()
85 | let text = `${$.union_id}${$.token}${time}${nonce}`
86 | let config = {
87 | method: 'GET',
88 | url: `https://gwuop.bsdits.cn/points-mall/front/member/${$.union_id}/activities/1/records`,
89 | headers: {
90 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
91 | 'Accept-Encoding': 'gzip,compress,br,deflate',
92 | 'charset': 'utf-8',
93 | 'x-nonce': nonce,
94 | 'x-datadog-sampling-priority': '1',
95 | 'x-timestamp': time,
96 | 'x-datadog-origin': 'rum',
97 | 'bgno': 'BOSIDENG',
98 | 'x-signature': MD5(text).toUpperCase(),
99 | 'content-type': 'application/json',
100 | 'x-login-type': 'MiniProgram',
101 | 'x-access-token': $.token,
102 | 'Referer': 'https://servicewechat.com/wx3f8f90e766e5c545/355/page-frame.html'
103 | }
104 | };
105 |
106 | let { data: result } = await Request(config)
107 | if (result.code == 200) {
108 | if (result.result.isSigned !== 1) {
109 | $.log(`未签到 ===> 签到ing`)
110 | await signIn()
111 | } else {
112 | $.log(`已签到 ===> 什么都不做`)
113 | }
114 | $.log(`🎉 签到信息查询成功,当前签到${result.result.signedDay}天 本次签到获得积分[${result.result.records[0].rewardPoints}]`)
115 | } else {
116 | $.log(`❌ 签到信息查询失败,原因:${result.message}`)
117 | }
118 | }
119 | async function signIn() {
120 | let data = JSON.stringify({});
121 | let time = getTime()
122 | let nonce = $.uuid()
123 | let text = `${$.union_id}${$.token}${time}${nonce}`
124 | let config = {
125 | method: 'POST',
126 | url: 'https://gwuop.bsdits.cn/points-mall/front/points/',
127 | headers: {
128 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
129 | 'Accept-Encoding': 'gzip,compress,br,deflate',
130 | 'charset': 'utf-8',
131 | 'x-nonce': nonce,
132 | 'x-datadog-sampling-priority': '1',
133 | 'x-timestamp': time,
134 | 'x-datadog-origin': 'rum',
135 | 'bgno': 'BOSIDENG',
136 | 'x-signature': MD5(text).toUpperCase(),
137 | 'content-type': 'application/json',
138 | 'x-login-type': 'MiniProgram',
139 | 'x-access-token': $.token,
140 | 'Referer': 'https://servicewechat.com/wx3f8f90e766e5c545/355/page-frame.html'
141 | },
142 | data: data
143 | };
144 | let { data: result } = await Request(config)
145 | if (result.code == 200) {
146 | $.log(result)
147 | $.log(`🎉 签到成功`)
148 | } else {
149 | $.log(`❌ 签到失败,原因:${result.message}`)
150 | }
151 | }
152 |
153 |
154 | function checkEnv(userCookie) {
155 | const envSplitor = ["&", "\n"];
156 | console.log(userCookie);
157 | let userList = userCookie
158 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
159 | .filter((n) => n);
160 | console.log(`共找到${userList.length}个账号`);
161 | return userList;
162 | }
163 | // prettier-ignore
164 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
165 |
166 | async function Request(options) {
167 | if ($.isNode()) {
168 | const axios = require("axios");
169 | Request = async (options) => {
170 | try {
171 | return await axios.request(options);
172 | } catch (error) {
173 | return error && error.error ? error.error : "请求失败";
174 | }
175 | };
176 | }
177 | if ($.isQuanX()) {
178 | Request = async (options) => {
179 | try {
180 | return await $task.fetch(options);
181 | } catch (error) {
182 | return error && error.error ? error.error : "请求失败";
183 | }
184 | };
185 | }
186 | return await Request(options);
187 | }
--------------------------------------------------------------------------------
/cbly.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: smallfawn
4 | @Date: 2024.06.09 12.51
5 | @Description: 臭宝乐园小程序 签到换螺蛳粉
6 | ------------------------------------------
7 | 变量名choubao
8 | 变量值 https://cbxcx.weinian.com.cn/wnuser 请求头Headers中authorization的值 多账号&或换行或新建同名变量
9 | [Script]
10 | http-response
11 |
12 | [MITM]
13 | hostname =
14 |
15 | ⚠️【免责声明】
16 | ------------------------------------------
17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
24 | */
25 |
26 | const $ = new Env("臭宝乐园");
27 | let ckName = `choubao`;
28 | let userCookie = checkEnv(
29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
30 | );
31 | const notify = $.isNode() ? require("./sendNotify") : "";
32 |
33 | !(async () => {
34 | console.log(
35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
36 | new Date().getTime() +
37 | new Date().getTimezoneOffset() * 60 * 1000 +
38 | 8 * 60 * 60 * 1000
39 | ).toLocaleString()} \n==================================================`
40 | );
41 | //console.log(userCookie)
42 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
43 | let index = 1;
44 | let strSplitor = "#";
45 |
46 | for (let user of userCookie) {
47 | $.log(`\n🚀 user:【${index}】 start work\n`);
48 | index++
49 | $.token = user
50 | $.ckFlag = true;
51 | await getUserInfo()
52 | if ($.ckFlag) {
53 | await signInCheck()
54 | await $.wait(3000)
55 | }
56 |
57 | }
58 |
59 | await $.sendMsg($.logs.join("\n"));
60 | })()
61 | .catch((e) => console.log(e))
62 | .finally(() => $.done());
63 |
64 | async function signInCheck() {
65 | let config = {
66 | method: 'POST',
67 | url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/checkSignNum',
68 | headers: {
69 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
70 | 'Accept-Encoding': 'gzip,compress,br,deflate',
71 | 'authorization': $.token,
72 | 'charset': 'utf-8',
73 | 'content-type': 'application/json',
74 | 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html'
75 | }
76 | };
77 | let { data: result } = await Request(config)
78 | if (result?.status == 200) {
79 | await signIn()
80 | }else{
81 | $.log(`获取签到状态[${result.msg}]`)
82 | }
83 | }
84 | async function signIn() {
85 | let config = {
86 | method: 'POST',
87 | url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/daySign',
88 | headers: {
89 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
90 | 'Accept-Encoding': 'gzip,compress,br,deflate',
91 | 'authorization': $.token,
92 | 'charset': 'utf-8',
93 | 'content-type': 'application/json',
94 | 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html'
95 | }
96 | };
97 | let { data: result } = await Request(config)
98 | if (result?.status == 200) {
99 | $.log(`签到成功`)
100 | } else {
101 | $.log(`签到失败【${result.msg}】`)
102 | }
103 | }
104 | async function getUserInfo() {
105 | let config = {
106 | method: 'POST',
107 | url: 'https://cbxcx.weinian.com.cn/wnuser/v1/memberUser/getMemberUser',
108 | headers: {
109 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
110 | 'Accept-Encoding': 'gzip,compress,br,deflate',
111 | 'authorization': $.token,
112 | 'charset': 'utf-8',
113 | 'content-type': 'application/json',
114 | 'Referer': 'https://servicewechat.com/wx2206cca563f6f937/82/page-frame.html'
115 | }
116 | };
117 | let { data: result } = await Request(config)
118 | if (result?.status == 200) {
119 | $.log(`[${result.data.nickName}] 嗦粉币[${result.data.points}]`)
120 | } else {
121 | $.log(`获取用户信息失败【${result.msg}】`)
122 | $.ckFlag = false
123 | }
124 | }
125 |
126 | function checkEnv(userCookie) {
127 | const envSplitor = ["&", "\n"];
128 | //console.log(userCookie);
129 | let userList = userCookie
130 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
131 | .filter((n) => n);
132 | console.log(`共找到${userList.length}个账号`);
133 | return userList;
134 | }
135 | // prettier-ignore
136 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
137 |
138 | async function Request(options) {
139 | if ($.isNode()) {
140 | const axios = require("axios");
141 | Request = async (options) => {
142 | try {
143 | return await axios.request(options);
144 | } catch (error) {
145 | return error && error.error ? error.error : "请求失败";
146 | }
147 | };
148 | }
149 | if ($.isQuanX()) {
150 | Request = async (options) => {
151 | try {
152 | return await $task.fetch(options);
153 | } catch (error) {
154 | return error && error.error ? error.error : "请求失败";
155 | }
156 | };
157 | }
158 | return await Request(options);
159 | }
--------------------------------------------------------------------------------
/chml.py:
--------------------------------------------------------------------------------
1 | #环境变量 chmlck 取url请求头中的token
2 | #变量格式 token#备注,多账号换行
3 | #搜微信小程序长虹美菱
4 | #有问题联系3288588344
5 | #频道:https://pd.qq.com/s/672fku8ge
6 |
7 | # cron: 0 7,21 * * *
8 | # const $ = new Env("长虹美菱");
9 |
10 |
11 |
12 |
13 |
14 |
15 | import os
16 | import requests
17 |
18 |
19 | accounts = os.getenv("chmlck", "").splitlines()
20 | print("☞☞☞ 长虹美菱每日签到 ☜☜☜\n")
21 |
22 | if not accounts:
23 | print("未找到任何账号信息。")
24 | else:
25 | for account in accounts:
26 | if not account.strip():
27 | continue
28 | try:
29 | token, note = account.split("#")
30 | except ValueError:
31 | print(f"格式错误: {account}")
32 | continue
33 |
34 | url = "https://hongke.changhong.com/gw/applet/aggr/signin"
35 | params = {'aggrId': "608"}
36 | headers = {
37 | 'User-Agent': "Mozilla/5.0 (Linux; Android 10; Mobile Safari/537.36)",
38 | 'Accept-Encoding': "gzip, deflate",
39 | 'Content-Type': "application/json",
40 | 'Token': token.strip()
41 | }
42 |
43 | try:
44 | response = requests.post(url, params=params, headers=headers)
45 | if response.status_code == 200:
46 | print(f"{note.strip()}:签到成功")
47 | elif response.status_code == 400:
48 | print(f"{note.strip()}:请勿重复签到")
49 | else:
50 | print(f"{note.strip()}:响应状态码 {response.status_code} - {response.text}")
51 | except requests.RequestException as e:
52 | print(f"{note.strip()}:请求失败 - {e}")
--------------------------------------------------------------------------------
/dq点单.js:
--------------------------------------------------------------------------------
1 | /*
2 | 微信小程序DQ点单安卓版
3 | 抓包wechat.dairyqueen.com.cn域名下的cookie
4 | 变量名=dqdd
5 | 多账号用&分开或者添加多个变量名
6 | 有问题联系3288588344
7 | 频道:https://pd.qq.com/s/672fku8ge
8 |
9 | 长期套餐大额流量电话卡办理地址:https://hk.yunhaoka.cn/#/pages/micro_store/index?agent_id=669709
10 |
11 | */
12 |
13 |
14 | const axios = require('axios');
15 | const dqdd = process.env.dqdd.split('\n');
16 |
17 | const url = 'https://wechat.dairyqueen.com.cn/memSignIn/signIn';
18 |
19 | async function fetchSignInfo(cookie, accountIndex) {
20 | const headers = {
21 | 'Host': 'wechat.dairyqueen.com.cn',
22 | 'Connection': 'keep-alive',
23 | 'Content-Length': '0',
24 | 'charset': 'utf-8',
25 | 'cookie': cookie,
26 | 'channel': '202',
27 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Build/QKQ1.190828.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.122 Mobile Safari/537.36 XWEB/1260059 MMWEBSDK/20240501 MMWEBID/3628 MicroMessenger/8.0.50.2701(0x28003252) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
28 | 'content-type': 'application/json',
29 | 'Accept-Encoding': 'gzip,compress,br,deflate',
30 | 'tenant': '1',
31 | 'Referer': 'https://servicewechat.com/wx22e5ce7c766b4b78/149/page-frame.html'
32 | };
33 |
34 | try {
35 | const response = await axios.post(url, {}, { headers: headers });
36 | if (response.data.code === 200 && response.data.message === 'success') {
37 | console.log(`账号${accountIndex}签到成功`);
38 | return { success: true, message: `账号${accountIndex}签到成功` };
39 | } else {
40 | console.log(`账号${accountIndex}签到失败`);
41 | return { success: false, message: `账号${accountIndex},${response.data.message}` };
42 | }
43 | } catch (error) {
44 | console.error(error);
45 | return { success: false, message: error.message };
46 | }
47 | }
48 |
49 | dqdd.forEach((dqdd, index) => {
50 | fetchSignInfo(dqdd, index + 1).then(result => {
51 | console.log(result);
52 | });
53 | });
--------------------------------------------------------------------------------
/dydd.py:
--------------------------------------------------------------------------------
1 | #环境变量 dydd
2 | #有问题联系3288588344
3 | #频道:https://pd.qq.com/s/672fku8ge
4 | import os
5 | import requests
6 | import time
7 | import hashlib
8 | # cron: 15 8,17 * * *
9 | # const $ = new Env("第一电动");
10 | # 获取青龙面板环境变量 dydd
11 | dydd = os.environ.get('dydd', '')
12 |
13 | # 按换行符分割账号,并过滤空行
14 | accounts = [line.strip() for line in dydd.strip().split('\n') if line.strip()]
15 |
16 | url = "https://app2.d1ev.com/api/user/add-integral"
17 |
18 | # 公共参数
19 | params_base = {
20 | 'app_id': "d1ev_app",
21 | 'appName': "第一电动",
22 | 'os': "android",
23 | 'osVer': "9",
24 | 'vName': "2.5.6",
25 | 'vCode': "20506"
26 | }
27 |
28 | headers = {
29 | 'User-Agent': "Dalvik/2.1.0 (Linux; U; Android 9; PCRT00 Build/PQ3A.190605.06201646)",
30 | 'Connection': "Keep-Alive",
31 | 'Accept-Encoding': "gzip",
32 | 'TE': "gzip, deflate; q=0.5"
33 | }
34 |
35 | # 定义任务列表,每个任务包括任务类型和执行次数
36 | tasks = [
37 | {'type': 11, 'name': '签到', 'count': 1},
38 | {'type': 3, 'name': '分享', 'count': 3},
39 | {'type': 5, 'name': '点赞', 'count': 5},
40 | {'type': 2, 'name': '阅读', 'count': 1}
41 | ]
42 |
43 | for account in accounts:
44 | # 分割账号为 uid 和 token
45 | parts = account.split('#')
46 | if len(parts) != 2:
47 | print(f"跳过无效格式账号: {account}")
48 | continue
49 |
50 | uid, token = parts
51 |
52 | # 生成当前时间戳
53 | current_timestamp = str(int(time.time()))
54 |
55 | for task in tasks:
56 | task_type = task['type']
57 | task_name = task['name']
58 | task_count = task['count']
59 |
60 | for _ in range(task_count):
61 | # 构造签名字符串
62 | sign_str = f"OMKCy2UxZwn8e4Ak{params_base['appName']}{params_base['app_id']}{params_base['os']}{params_base['osVer']}{current_timestamp}{token}{task_type}{uid}{params_base['vCode']}{params_base['vName']}"
63 |
64 | # 计算 MD5 签名
65 | sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest()
66 |
67 | # 定义带有动态值的参数
68 | params = {
69 | 'timestamp': current_timestamp,
70 | 'token': token,
71 | 'uid': uid,
72 | 'type': task_type,
73 | 'sign': sign.upper(),
74 | **params_base
75 | }
76 |
77 | try:
78 | # 发送 GET 请求
79 | response = requests.get(url, params=params, headers=headers)
80 | response.raise_for_status() # 如果请求失败,则抛出异常
81 |
82 | # 打印任务执行结果
83 | print(f"账号: {uid}, 任务: {task_name}, 响应: {response.text}")
84 | except requests.exceptions.RequestException as e:
85 | print(f"账号: {uid}, 任务: {task_name}, 请求失败: {e}")
86 |
87 | # 任务间隔5秒
88 | time.sleep(5)
89 |
90 | # 任务类型间隔10秒
91 | time.sleep(10)
92 |
--------------------------------------------------------------------------------
/gjgj.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: smallfawn
4 | @Date: 2024.06.09 12.40
5 | @Description: 古井贡酒会员中心小程序
6 | ------------------------------------------
7 | 变量名 gujing
8 | 值 https://scrm.gujing.com/gujing_scrm/ 请求头Headers中的Access-Token的值 多账号&或换行或新建同名变量
9 |
10 | [Script]
11 | http-response
12 |
13 | [MITM]
14 | hostname =
15 |
16 | ⚠️【免责声明】
17 | ------------------------------------------
18 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
19 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
20 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
21 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
22 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
23 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
24 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
25 | */
26 |
27 | const $ = new Env("古井贡酒会员中心小程序");
28 | let ckName = `gujing`;
29 | let userCookie = checkEnv(
30 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
31 | );
32 | const notify = $.isNode() ? require("./sendNotify") : "";
33 |
34 | !(async () => {
35 | console.log(
36 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
37 | new Date().getTime() +
38 | new Date().getTimezoneOffset() * 60 * 1000 +
39 | 8 * 60 * 60 * 1000
40 | ).toLocaleString()} \n==================================================`
41 | );
42 | //console.log(userCookie)
43 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
44 | let index = 1;
45 | let strSplitor = "#";
46 |
47 | for (let user of userCookie) {
48 | $.log(`\n🚀 user:【${index}】 start work\n`);
49 | index++
50 | $.token = user
51 | $.ckStatus = true;
52 | await search()
53 | }
54 |
55 | await $.sendMsg($.logs.join("\n"));
56 | })()
57 | .catch((e) => console.log(e))
58 | .finally(() => $.done());
59 | async function search() {
60 | let data = JSON.stringify({
61 | "activityId": "110001000",
62 | "preview": false
63 | });
64 |
65 | let config = {
66 | method: 'POST',
67 | url: 'https://scrm.gujing.com/gujing_scrm/wxclient/mkt/activities/sign:search',
68 | headers: {
69 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxba9855bdb1a45c8e',
70 | 'Accept': 'application/json, text/plain, */*',
71 | 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"',
72 | 'Content-Type': 'application/json;charset=UTF-8',
73 | 'sec-ch-ua-mobile': '?1',
74 | 'Access-Token': $.token,
75 | 'sec-ch-ua-platform': '"Android"',
76 | 'Origin': 'https://scrm.gujing.com',
77 | 'X-Requested-With': 'com.tencent.mm',
78 | 'Sec-Fetch-Site': 'same-origin',
79 | 'Sec-Fetch-Mode': 'cors',
80 | 'Sec-Fetch-Dest': 'empty',
81 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
82 |
83 | },
84 | data: data
85 | };
86 | let { data: result } = await Request(config)
87 | if (result?.code == 200) {
88 | if (result.content.signed !== 1) {
89 | $.log(`未签到 ===> 签到ing`)
90 | await signIn()
91 | } else {
92 | $.log(`已签到 ===> 什么都不做`)
93 | }
94 | } else {
95 | $.log(`签到查询失败 [${JSON.stringify(result)}]`)
96 | }
97 | }
98 | async function signIn() {
99 | let data = JSON.stringify({
100 | "activityId": "110001000",
101 | "preview": false
102 | });
103 |
104 | let config = {
105 | method: 'POST',
106 | url: 'https://scrm.gujing.com/gujing_scrm/wxclient/mkt/activities/sign:search',
107 | headers: {
108 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxba9855bdb1a45c8e',
109 | 'Accept': 'application/json, text/plain, */*',
110 | 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"',
111 | 'Content-Type': 'application/json;charset=UTF-8',
112 | 'sec-ch-ua-mobile': '?1',
113 | 'Access-Token': $.token,
114 | 'sec-ch-ua-platform': '"Android"',
115 | 'Origin': 'https://scrm.gujing.com',
116 | 'X-Requested-With': 'com.tencent.mm',
117 | 'Sec-Fetch-Site': 'same-origin',
118 | 'Sec-Fetch-Mode': 'cors',
119 | 'Sec-Fetch-Dest': 'empty',
120 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
121 | },
122 | data: data
123 | };
124 | let { data: result } = await Request(config)
125 | if (result?.code == 200) {
126 | $.log(`签到成功 获得积分[${result.content.point}]`)
127 | } else {
128 | $.log(`签到失败 [${result.chnDesc}]`)
129 | }
130 | }
131 |
132 | function checkEnv(userCookie) {
133 | const envSplitor = ["&", "\n"];
134 | //console.log(userCookie);
135 | let userList = userCookie
136 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
137 | .filter((n) => n);
138 | console.log(`共找到${userList.length}个账号`);
139 | return userList;
140 | }
141 | // prettier-ignore
142 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
143 |
144 | async function Request(options) {
145 | if ($.isNode()) {
146 | const axios = require("axios");
147 | Request = async (options) => {
148 | try {
149 | return await axios.request(options);
150 | } catch (error) {
151 | return error && error.error ? error.error : "请求失败";
152 | }
153 | };
154 | }
155 | if ($.isQuanX()) {
156 | Request = async (options) => {
157 | try {
158 | return await $task.fetch(options);
159 | } catch (error) {
160 | return error && error.error ? error.error : "请求失败";
161 | }
162 | };
163 | }
164 | return await Request(options);
165 | }
--------------------------------------------------------------------------------
/gobing_checkin.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/env python
2 | # -*-coding:utf-8 -*-
3 | # const $ = new Env("gobing签到");
4 | # cron: 35 7,18 * * *
5 | import requests
6 | import json
7 | import os
8 | import time
9 |
10 |
11 | '''
12 | 青龙 定义
13 | gobing_ck = [{
14 | "account": "账号",
15 | "password": "密码"
16 | },{
17 | "account": "账号",
18 | "password": "密码"
19 | }]
20 | '''
21 |
22 |
23 | headers = {
24 | 'Content-Type': 'application/json',
25 | 'Host': 'api.gobing.cn',
26 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 11; M2102K1C Build/SKQ1.220306.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/102.0.5060.71 Mobile Safari/534.36 SearchCraft/3.9.2 (Baidu; P1 12) XiaoMi/MiuiBrowser/16.58.59 swan-mibrowser',
27 | }
28 |
29 | def get_token(ck):
30 | url = 'https://api.gobing.cn/v1/user/login'
31 | try:
32 | response = requests.post(url, headers=headers, data=json.dumps(ck))
33 | response_data = response.json()
34 | token = response_data['data']['token']
35 | if not token:
36 | print("未能获取到有效的 token")
37 | return
38 | headers['token'] = token
39 | sign_in()
40 | time.sleep(1)
41 | set_like_favorite()
42 | time.sleep(1)
43 | get_info()
44 | except Exception as e:
45 | print(f"Error: {e}")
46 | return None
47 |
48 | def sign_in():
49 | url = 'https://api.gobing.cn/v1/signin/signin'
50 | try:
51 | response = requests.post(url, headers=headers)
52 | response_data = response.json()
53 | print(response_data['msg'])
54 | except Exception as e:
55 | print(f"Error: {e}")
56 | return
57 |
58 | def get_info():
59 | url= 'https://api.gobing.cn/v1/user/getUserinfo'
60 | try:
61 | response = requests.get(url, headers=headers)
62 | response_data = response.json()
63 | coin = response_data['data']['info']['coin']
64 | exp = response_data['data']['info']['exp']
65 | print(f'当前经验:{exp},Go币:{coin}')
66 | except Exception as e:
67 | print(f"Error: {e}")
68 | return
69 | def set_like_favorite():
70 | print('正在执行喜欢和收藏:')
71 | tasklist=[5, 4, 3, 35, 31, 29, 24, 26, 21, 34, 23, 33, 27, 25, 22, 30, 28, 36, 32, 39]
72 | for num in tasklist:
73 | print(f"正在执行【{num}】喜欢与收藏")
74 | url = f"https://www.gobing.cn/disassemble/detail/{num}"
75 | response = requests.get(url, headers=headers)
76 | url_1 = "https://api.gobing.cn/v1/disassemble/like"
77 | url_2='https://api.gobing.cn/v1/disassemble/favorite'
78 | data = {
79 | "ids":str(num)
80 | }
81 | response = requests.post(url_1, headers=headers, json=data)
82 | response = requests.post(url_2, headers=headers, data=data)
83 | time.sleep(5)
84 |
85 |
86 | ckList = os.getenv("gobing_ck")
87 | ckList = json.loads(ckList)
88 | print(f"共找到{len(ckList)}个账号")
89 | print('*' * 50)
90 | for i in ckList:
91 | print('*' * 30)
92 | print(f'开始执行{i["account"]}')
93 | get_token(i)
94 | time.sleep(10)
--------------------------------------------------------------------------------
/hqcsh-get.js:
--------------------------------------------------------------------------------
1 | // cron: 40 59 17 * * *
2 | const axios = require('axios')
3 | const fetch = require('node-fetch');
4 | const https = require('https');
5 | const url = require('url');
6 | const {sendNotify} = require('./sendNotify.js')
7 | const {
8 | sleep,getCurrDay,checkTime,Env
9 | } = require('./utils.js')
10 | const $ = new Env('好奇车抢红包')
11 | const userInfoList = $.getEnvKey('hqcshck').split('\n')
12 | if(!userInfoList.length||userInfoList[0]===''){
13 | throw new Error('未找到ck')
14 | }
15 | console.log(`获取到${userInfoList.length}个ck`);
16 | let getTaskListStr = ''
17 | const header = {
18 | 'Host': 'channel.cheryfs.cn',
19 | 'Connection': 'keep-alive',
20 | 'geolocation': '',
21 | 'wxappid': '619669369294712832',
22 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; Mi14 Pro Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160065 MMWEBSDK/20230701 MMWEBID/8701 MicroMessenger/8.0.40.2420(0x28002858) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx1ddeb67115f30d1a',
23 | 'tenantId': '619669306447261696',
24 | 'activityId': '621950054462152705',
25 | 'requestUrl': 'https://channel.cheryfs.cn/archer/act/619669306447261696/619669369294712832/activity/pointsmall-detail/621950054462152705/npSrn1cIT5AkSaSz?pageId=page1607309582231&num=1&cardId=850530474589614080&anchorId=&anchorAnimateType=',
26 | 'Accept': 'application/json, text/plain, */*',
27 | 'channelCode': '',
28 | 'timestamp': '1733390591069',
29 | 'assemblyName': '%E7%A7%AF%E5%88%86%E5%95%86%E5%9F%8E%E5%85%91%E6%8D%A22',
30 | 'sign': '4a743f750023cfa3a0348368e512ace9',
31 | 'accountId': '',
32 | 'Sec-Fetch-Site': 'same-origin',
33 | 'Sec-Fetch-Mode': 'cors',
34 | 'Sec-Fetch-Dest': 'empty',
35 | 'Referer': 'https://channel.cheryfs.cn/archer/act/619669306447261696/619669369294712832/activity/pointsmall-detail/621950054462152705/npSrn1cIT5AkSaSz?pageId=page1607309582231&num=1&cardId=850530474589614080&anchorId=&anchorAnimateType=',
36 | 'Accept-Encoding': 'gzip, deflate, br',
37 | 'Accept-Language': 'zh-CN,zh;q=0.9',
38 | 'Cookie': 'uid-619669306447261696-619669369294712832=e096cb713417e83295bd965dc4e493feadf9f0cca066368bb53d2b111b1fa8e2'
39 | }
40 | const api = {
41 |
42 | receiveActiveTask: (ck,taskId) => {
43 | return new Promise(async res=>{
44 | const response = await axios({
45 | url: `https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=${taskId}&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=888&exchangeNeedMoney=0&cardGoodsItemIds=`,
46 | method: 'get',
47 | headers:{
48 | ...header,
49 | 'accountId':ck
50 | },
51 | })
52 | console.log("")
53 | res(JSON.stringify(response.data))
54 | })
55 | },
56 | receiveActiveTaskFetch: (ck,taskId) => {
57 | return new Promise(async res=>{
58 | const response = await fetch(
59 | `https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=${taskId}&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=888&exchangeNeedMoney=0&cardGoodsItemIds=`,
60 | {
61 | method: "GET",
62 | headers: {
63 | ...header,
64 | 'accountId':ck
65 | },
66 | }
67 | )
68 | const data = await response.json()
69 | console.log('task fetch',JSON.stringify(data));
70 | console.log("")
71 | res(JSON.stringify(data))
72 | })
73 | },
74 | receiveActiveTaskGot: (ck,taskId) => {
75 | return new Promise(async res=>{
76 | const gots = (await import('got'))?.default
77 | const response = await gots(
78 | `https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=${taskId}&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=888&exchangeNeedMoney=0&cardGoodsItemIds=`,
79 | {
80 | method: "GET",
81 | headers: {
82 | ...header,
83 | 'accountId':ck
84 | },
85 | }
86 | )
87 | console.log('task got',response.body);
88 | console.log("")
89 | res(response.body)
90 | })
91 | },
92 | // receiveActiveTaskHttp: (ck,taskId) => {
93 | // // 假设这是你要请求的URL
94 | // const urlString = `https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=${taskId}&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=888&exchangeNeedMoney=0&cardGoodsItemIds=`
95 | // return httpInstance({
96 | // parsedUrl:url.parse(urlString),
97 | // headers: {
98 | // ...header,
99 | // 'accountId':ck
100 | // },
101 | // })
102 | // }
103 | }
104 |
105 |
106 | const getReceiveActiveTask = async({ck,taskId})=>{
107 | try{
108 |
109 | console.log(`请求时间:`,getCurrDay());
110 | return api.receiveActiveTask(ck,taskId)
111 | // api.receiveActiveTaskGot(ck,taskId)
112 | // return api.receiveActiveTaskFetch(ck,taskId)
113 | // return api.receiveActiveTaskHttp(ck,taskId)
114 | }catch(e){
115 | console.log('任务领取失败',e.toString()||e);
116 | return getReceiveActiveTask({ck,taskId})
117 | }
118 | }
119 |
120 |
121 | const q1 = '792556957722198016' // 1800积分 京东E卡18 元①
122 | const q2 = '850529542367801344' // 174积分 奇瑞微信红包1元
123 | const q3 = '850530051048796161' // 522积分 奇瑞微信红包3元
124 | const q4 = '850530474589614080' // 870积分 奇瑞微信红包5元
125 | async function concurrentPromises(promiseFunction,args, count,timeout = 0) {
126 | for (let i = 0; i < count; i++) {
127 | if(timeout){
128 | await sleep(timeout)
129 | }
130 | promiseFunction(args).then(res=>{
131 | console.log(res)
132 | getTaskListStr+=('
'+res)
133 | }).catch(e=>{
134 | console.error('任务并发错误:',e.toString());
135 | promiseFunction(args).then(res=>{
136 | getTaskListStr+=('
'+res)
137 | }).catch(e=>{
138 | console.error('任务二次并发错误:', e.toString());
139 | })
140 | })
141 | }
142 |
143 | }
144 | const processTokens = async () => {
145 | for (const user of userInfoList) {
146 | checkTime({
147 | seconds:45,
148 | milliseconds:0
149 | }).then(res=>{
150 | concurrentPromises(getReceiveActiveTask,{ck:user,taskId:q4},170,100)
151 | })
152 | }
153 | };
154 | (async()=>{
155 | await processTokens()
156 | await sleep(1000*60*2)
157 | sendNotify('好奇车领取结果',getTaskListStr)
158 | })()
--------------------------------------------------------------------------------
/hqcsh.py:
--------------------------------------------------------------------------------
1 | """
2 |
3 | time:2023.4.26
4 | cron: 0 9,18 * * *
5 | new Env('好奇车生活签到');
6 | 微信小程序-好奇车生活-好物兑换
7 | 抓包域名: https://channel.cheryfs.cn/
8 | 抓包请求头里面: accountId 的值
9 | 环境变量名称:hqcshck = accountId 的值
10 | 多账号新建变量或者用 换行 分开
11 |
12 | """
13 |
14 | import time
15 | import requests
16 | from os import environ, path
17 |
18 | def get_environ(key, default="", output=True):
19 | def no_read():
20 | if output:
21 | print(f"未填写环境变量 {key} 请添加")
22 | exit(0)
23 | return default
24 |
25 | return environ.get(key) if environ.get(key) else no_read()
26 |
27 |
28 | class Hqcsh():
29 | def __init__(self, ck):
30 | self.msg = ''
31 | self.ck = ck
32 | self.ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF XWEB/6763'
33 | self.tid = '619669306447261696'
34 |
35 | def sign(self):
36 | time.sleep(0.5)
37 | sign_url = "https://channel.cheryfs.cn/archer/activity-api/signinact/signin"
38 | jf_url = 'https://channel.cheryfs.cn/archer/activity-api/common/accountPointLeft?pointId=620415610219683840'
39 | q_url = 'https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCard?pointsMallCardId=' + qiang + '&exchangeCount=1&mallOrderInputVoStr=%7B%22person%22:%22%22,%22phone%22:%22%22,%22province%22:%22%22,%22city%22:%22%22,%22area%22:%22%22,%22address%22:%22%22,%22remark%22:%22%22%7D&channel=1&exchangeType=0&exchangeNeedPoints=188&exchangeNeedMoney=0&cardGoodsItemIds='
40 | sign_headers = {
41 | 'User-Agent': self.ua,
42 | 'tenantId': self.tid,
43 | 'activityId': '620810406813786113',
44 | 'accountId': self.ck,
45 | }
46 |
47 | jf_headers = {
48 | 'User-Agent': self.ua,
49 | 'tenantId': self.tid,
50 | 'activityId': '621911913692942337',
51 | 'accountId': self.ck,
52 | }
53 | q_headers = {
54 | 'User-Agent': self.ua,
55 | 'tenantId': self.tid,
56 | 'activityId': '621950054462152705',
57 | 'accountId': self.ck,
58 | }
59 | try:
60 | sign_rsp = requests.get(sign_url, headers=sign_headers)
61 | time.sleep(0.5)
62 | jf_rsp = requests.get(jf_url, headers=jf_headers)
63 | time.sleep(0.5)
64 | q_rsp = requests.get(q_url, headers=q_headers)
65 |
66 | if sign_rsp.json()['success'] == True:
67 | if sign_rsp.json()['result']['success'] == True:
68 | if q_rsp.json()['success'] == False:
69 | xx = f"[登录]:账号{a}登录成功\n[签到]:签到成功\n[积分]:{jf_rsp.json()['result']}\n[抢包]:当前不在抢包时间段,请在18-22点运行\n\n"
70 | print(xx)
71 | self.msg += xx
72 | elif q_rsp.json()['result']['success'] == True:
73 | time.sleep(0.5)
74 | qr_url = 'https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCardResult?resultKey=' + \
75 | q_rsp.json()['result']['id']
76 | qr_rsp = requests.get(qr_url, headers=q_headers)
77 | if qr_rsp.json()['result']['errMsg'] == '成功':
78 | xx = f"[登录]:账号{a}登录成功\n[签到]:签到成功\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{qr_rsp.json()['result']['errMsg']},前往个人中心-我的礼包查看!\n\n"
79 | print(xx)
80 | self.msg += xx
81 | else:
82 | xx = f"[登录]:账号{a}登录成功\n[签到]:签到成功\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{qr_rsp.json()['result']['errMsg']}\n\n"
83 | print(xx)
84 | self.msg += xx
85 | elif q_rsp.json()['result']['success'] == False:
86 | xx = f"[登录]:账号{a}登录成功\n[签到]:签到成功\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{q_rsp.json()['result']['errMsg']}\n\n"
87 | print(xx)
88 | self.msg += xx
89 | elif sign_rsp.json()['result']['success'] == False:
90 | if q_rsp.json()['success'] == False:
91 | xx = f"[登录]:账号{a}登录成功\n[签到]:{sign_rsp.json()['result']['message']}\n[积分]:{jf_rsp.json()['result']}\n[抢包]:当前不在抢包时间段,请在18-22点运行\n\n"
92 | print(xx)
93 | self.msg += xx
94 | elif q_rsp.json()['result']['success'] == True:
95 | time.sleep(0.5)
96 | qr_url = 'https://channel.cheryfs.cn/archer/activity-api/pointsmall/exchangeCardResult?resultKey=' + \
97 | q_rsp.json()['result']['id']
98 | qr_rsp = requests.get(qr_url, headers=q_headers)
99 | if qr_rsp.json()['result']['errMsg'] == '成功':
100 | xx = f"[登录]:账号{a}登录成功\n[签到]:{sign_rsp.json()['result']['message']}\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{qr_rsp.json()['result']['errMsg']},前往个人中心-我的礼包查看!\n\n"
101 | print(xx)
102 | self.msg += xx
103 | else:
104 | xx = f"[登录]:账号{a}登录成功\n[签到]:{sign_rsp.json()['result']['message']}\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{qr_rsp.json()['result']['errMsg']}\n\n"
105 | print(xx)
106 | self.msg += xx
107 | elif q_rsp.json()['result']['success'] == False:
108 | xx = f"[登录]:账号{a}登录成功\n[签到]:{sign_rsp.json()['result']['message']}\n[积分]:{jf_rsp.json()['result']}\n[抢包]:{q_rsp.json()['result']['errMsg']}\n\n"
109 | print(xx)
110 | self.msg += xx
111 | elif sign_rsp.json()['success'] == False:
112 | xx = f"[登录]:账号{a}登录失败,请稍后重试或者ck可能失效,当前ck:{self.ck}\n\n"
113 | print(xx)
114 | self.msg += xx
115 | else:
116 | xx = f"[登录]:账号{a}登录失败,请稍后重试或者ck可能失效,当前ck:{self.ck}\n\n"
117 | print(xx)
118 | self.msg += xx
119 | return self.msg
120 | return self.msg
121 | except Exception as e:
122 | xx = f"[请求异常]:稍后再试\n{e}\n\n"
123 | print(xx)
124 | self.msg += xx
125 | return self.msg
126 |
127 | def get_sign_msg(self):
128 | return self.sign()
129 |
130 |
131 | if __name__ == '__main__':
132 | q1 = '792556957722198016' # 1800积分 京东E卡18 元①
133 | q2 = '850529542367801344' # 174积分 奇瑞微信红包1元
134 | q3 = '850530051048796161' # 522积分 奇瑞微信红包3元
135 | q4 = '850530474589614080' # 870积分 奇瑞微信红包5元
136 | qiang = q4
137 | print('\n默认设置自动抢188积分1.08元的包\n需要设置到脚本底部修改 qiang = xxx\nxxx为q1-q4对应的包\n注:抢包没有做循环,只提交一次可能会失败,可以在18点之后定时重复运行几次\n')
138 | token = get_environ("hqcshck")
139 | msg = ''
140 | cks = token.split("\n")
141 | print("检测到{}个ck记录\n开始Hqcsh签到\n".format(len(cks)))
142 | a = 0
143 | for ck in cks:
144 | a += 1
145 | run = Hqcsh(ck)
146 | msg += run.get_sign_msg()
147 |
--------------------------------------------------------------------------------
/huanlejia.js:
--------------------------------------------------------------------------------
1 | // cron: 16 7,18 * * *
2 | // 抓data中sid YZxxx 和 url中的access_token 用&拼起来 多账号换行
3 | // export huanlejia="YZxxx&770f5xxxx
4 | // 770f5xxxx"
5 | const {
6 | getCurrDay,checkTime,Env,random
7 | } = require('./utils.js')
8 | const {sendNotify} = require('./sendNotify.js')
9 | const $ = new Env("欢乐家签到");
10 | const axios = require('axios')
11 | const userInfoList = $.getEnvKey('huanlejia').split('\n')
12 | if(!userInfoList.length||userInfoList[0]===''){
13 | throw new Error('未找到ck')
14 | }
15 | console.log(`获取到${userInfoList.length}个ck`);
16 |
17 | const baseUrl = 'https://h5.youzan.com'
18 | const headers = {
19 | 'Host': 'h5.youzan.com',
20 | 'Connection': 'keep-alive',
21 | 'xweb_xhr': 1,
22 | 'Extra-Data': '',
23 | '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',
24 | 'Content-Type': 'application/json',
25 | 'Accept': '*/*',
26 | 'Sec-Fetch-Site': 'cross-site',
27 | 'Sec-Fetch-Mode': 'cors',
28 | 'Sec-Fetch-Dest': 'empty',
29 | 'Referer': 'https://servicewechat.com/wx5508c9ab0d2118ff/62/page-frame.html',
30 | 'Accept-Encoding': 'gzip, deflate, br',
31 | 'Accept-Language': 'zh-CN,zh;q=0.9',
32 |
33 | }
34 | const url = {
35 | 'checkin':'/wscump/checkin/checkinV2.json?checkinId=4435617&app_id=wxf739eb6ad6a644da&kdt_id=146384563&access_token=',
36 | 'getCountDay':'/wscump/checkin/get_activity_by_yzuid_v2.json?checkinId=4435617&app_id=wxf739eb6ad6a644da&kdt_id=146384563&access_token=',
37 | 'userInfo':'/wscaccount/api/authorize/data.json?app_id=wxf739eb6ad6a644da&kdt_id=146384563&appId=wxf739eb6ad6a644da&access_token='
38 | }
39 | const api = {
40 | checkin: ({data,token}) => {
41 | return axios({
42 | url: baseUrl+url.checkin+token,
43 | method: 'get',
44 | headers:{
45 | ...headers,
46 | "Extra-Data":JSON.stringify(data)
47 | },
48 | })
49 | },
50 | userInfo: ({data,token}) => {
51 | return axios({
52 | url: baseUrl+url.userInfo+token,
53 | method: 'get',
54 | headers:{
55 | ...headers,
56 | "Extra-Data":JSON.stringify(data)
57 | },
58 | })
59 | },
60 | getCountDay: ({data,token}) => {
61 | return axios({
62 | url: baseUrl+url.getCountDay+token,
63 | method: 'get',
64 | headers:{
65 | ...headers,
66 | "Extra-Data":JSON.stringify(data)
67 | },
68 | })
69 | },
70 | }
71 |
72 | const processTokens = async () => {
73 | let index = 0
74 | const randomTime = random(1, 300)
75 | console.log('随机延迟:',randomTime + '秒');
76 | await $.wait(randomTime*1000)
77 | for (const token of userInfoList) {
78 | try {
79 | $.log('')
80 | index++
81 | const userData = token.split('&')
82 | const headerData = {"sid":userData[0],"version":"2.173.6","clientType":"weapp-miniprogram","client":"weapp","bizEnv":"","uuid":"8yOO5yc0SSVXaG31717484999225","ftime":new Date().getTime()}
83 | const headerParams = {
84 | data:headerData,
85 | token:userData[1]
86 | }
87 | const data = await api.userInfo(headerParams)
88 | const {mobile} = data?.data?.data?.userInfo
89 | if(!mobile){
90 | $.log(`账号【${index}】登录失效`)
91 | $.log('')
92 | continue;
93 | }
94 | $.log(`账号【${index}】 当前用户:${mobile}`);
95 | await $.wait(2000)
96 | const {data:{msg}} = await api.checkin(headerParams)
97 | $.log(`账号【${index}】 签到信息:${msg}`);
98 | await $.wait(2000)
99 | const {data:{data:{continuesDay}}} = await api.getCountDay(headerParams)
100 | $.log(`账号【${index}】 连续签到天数:${continuesDay}`);
101 | await $.wait(3500)
102 | } catch (error) {
103 | $.logErr(error.toString());
104 | }
105 | }
106 | $.log('')
107 | await sendNotify('欢乐家签到', $.logs.join('
'))
108 | $.done()
109 | };
110 |
111 | processTokens()
--------------------------------------------------------------------------------
/hxrk.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/python3
2 | # -- coding: utf-8 --
3 | # -------------------------------
4 | # cron "25 8,17 * * *" 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 = 'hxrk'
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)
--------------------------------------------------------------------------------
/hz.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: sm
4 | @Date: 2024.06.08 13.38
5 | @Description: 媓钻 小程序 赛龙舟活动 每天抽奖2-3次
6 | ------------------------------------------
7 | 变量名huangzuan_WX
8 | 变量值https://api.hzyxhfp.com/api/ 请求头Headers中authorization的值 去掉Bearer 多账号&或换行或新建同名变量
9 | [Script]
10 | http-response
11 |
12 | [MITM]
13 | hostname =
14 |
15 | ⚠️【免责声明】
16 | ------------------------------------------
17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
24 | */
25 |
26 | const $ = new Env("媓钻小程序");
27 | let ckName = `huangzuan_WX`;
28 | let userCookie = checkEnv(
29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
30 | );
31 | const notify = $.isNode() ? require("./sendNotify") : "";
32 |
33 | !(async () => {
34 | console.log(
35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
36 | new Date().getTime() +
37 | new Date().getTimezoneOffset() * 60 * 1000 +
38 | 8 * 60 * 60 * 1000
39 | ).toLocaleString()} \n==================================================`
40 | );
41 | //console.log(userCookie)
42 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
43 | let index = 0;
44 | //let strSplitor = "#";
45 |
46 | for (let user of userCookie) {
47 | $.log(`\n🚀 user:【${index || ++index}】 start work\n`);
48 | $.token = user
49 | $.ckStatus = false;
50 | await signIn()
51 | for (let i = 0; i < 2; i++) {
52 | await play()
53 | await $.wait(5000)
54 |
55 | if ($.ckStatus) {
56 | await lottery()
57 |
58 | }
59 | }
60 |
61 | }
62 |
63 | await $.sendMsg($.logs.join("\n"));
64 | })()
65 | .catch((e) => console.log(e))
66 | .finally(() => $.done());
67 | //取150-200随机数
68 | function getRandomInt(min, max) {
69 | min = Math.ceil(min);
70 | max = Math.floor(max);
71 | return Math.floor(Math.random() * (max - min)) + min; //不含最大值,含最小值
72 | }
73 | async function signIn() {
74 |
75 | let data = JSON.stringify({});
76 |
77 | let config = {
78 | method: 'POST',
79 | url: 'https://api.hzyxhfp.com/api/signInLog/addSignIn',
80 | headers: {
81 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
82 | 'Accept-Encoding': 'gzip,compress,br,deflate',
83 | 'app': 'wx3df7476c42cace5d',
84 | 'authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaS5oenl4aGZwLmNvbS9hcGkveWZtR2V0QXV0aFVzZXIiLCJpYXQiOjE3MTc4MjQ4NzMsImV4cCI6MjMxNzgyNDgxMywibmJmIjoxNzE3ODI0ODczLCJqdGkiOiJxdWRGcUlLaHRxWUd3Y0dIIiwic3ViIjozMDIwMTk5LCJwcnYiOiJjNzdlYWJjNmQyOWRiY2UwYjU1ZTk4YmRlYzM5MWI1NDlhNWVmMWYwIn0.0akWVLgE0Bd8_a-EOIQiC8dB_xiiOc2Y40xIVQnBRkU',
85 | 'charset': 'utf-8',
86 | 'content-type': 'application/json;charset=UTF-8',
87 | 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html'
88 | },
89 | data: data
90 | };
91 | let { data: result } = await Request(config)
92 | result?.code == 0 ? ($.log(`签到成功 已签到[${result.data.cont_days}]天`)) : ($.log(`签到失败`), console.log(JSON.stringify(result)))
93 |
94 | }
95 | async function play() {
96 | let data = JSON.stringify({
97 | "id": "1",
98 | "score": getRandomInt(150, 200)
99 | });
100 |
101 | let config = {
102 | method: 'POST',
103 | url: 'https://api.hzyxhfp.com/api/dragonActivity/addDragonScore',
104 | headers: {
105 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
106 | 'Accept-Encoding': 'gzip,compress,br,deflate',
107 | 'app': 'wx3df7476c42cace5d',
108 | 'authorization': 'Bearer ' + $.token,
109 | 'charset': 'utf-8',
110 | 'content-type': 'application/json;charset=UTF-8',
111 | 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html'
112 | },
113 | data: data
114 | };
115 | let { data: result } = await Request(config)
116 | result?.code == 0 ? ($.log(`游戏成功`), $.ckStatus = true) : ($.log(`游戏失败`), console.log(JSON.stringify(result)))
117 | }
118 | async function lottery() {
119 | let data = JSON.stringify({
120 | "id": "1"
121 | });
122 |
123 | let config = {
124 | method: 'POST',
125 | url: 'https://api.hzyxhfp.com/api/dragonActivity/getDragonPrizeResult',
126 | headers: {
127 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
128 | 'Accept-Encoding': 'gzip,compress,br,deflate',
129 | 'app': 'wx3df7476c42cace5d',
130 | 'authorization': 'Bearer ' + $.token,
131 | 'charset': 'utf-8',
132 | 'content-type': 'application/json;charset=UTF-8',
133 | 'Referer': 'https://servicewechat.com/wx3df7476c42cace5d/370/page-frame.html'
134 | },
135 | data: data
136 | };
137 | let { data: result } = await Request(config)
138 | result?.code == 0 ? $.log(`抽奖[${result.data.title}]`) : ($.log(`抽奖失败`), console.log(JSON.stringify(result)))
139 | }
140 |
141 | function checkEnv(userCookie) {
142 | const envSplitor = ["&", "\n"];
143 | console.log(userCookie);
144 | let userList = userCookie
145 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
146 | .filter((n) => n);
147 | console.log(`共找到${userList.length}个账号`);
148 | return userList;
149 | }
150 | // prettier-ignore
151 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
152 |
153 | async function Request(options) {
154 | if ($.isNode()) {
155 | const axios = require("axios");
156 | Request = async (options) => {
157 | try {
158 | return await axios.request(options);
159 | } catch (error) {
160 | throw error && error.error ? error.error : "请求失败";
161 | }
162 | };
163 | }
164 | if ($.isQuanX()) {
165 | Request = async (options) => {
166 | try {
167 | return await $task.fetch(options);
168 | } catch (error) {
169 | throw error && error.error ? error.error : "请求失败";
170 | }
171 | };
172 | }
173 | return await Request(options);
174 | }
--------------------------------------------------------------------------------
/jdc.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3
2 | # -- coding: utf-8 --
3 | # @Time : 2023/6/30 10:23
4 | # -------------------------------
5 | # const $ = new Env("京东代挂网签到");
6 | import json,requests,os,time,copy,random
7 | from datetime import datetime, timedelta
8 |
9 | random_number = random.randint(1, 6*60*60)
10 | # 获取当前时间
11 | current_time = datetime.now()
12 | # 使用 timedelta 对象来增加秒数
13 | new_time = current_time + timedelta(seconds=random_number)
14 | # 格式化新时间
15 | formatted_new_time = new_time.strftime("%Y-%m-%d %H:%M:%S")
16 |
17 |
18 | userList = [
19 | {"username":"xxx","password":"xxx"}
20 | ]
21 | # 初始化重连次数字典
22 | reconnect_counts = {}
23 |
24 | # 根据用户列表初始化重连次数字典
25 | for user in userList:
26 | username = user["username"]
27 | reconnect_counts[username] = {
28 | "login_count": 0,
29 | "signin_count": 0,
30 | "query_count": 0
31 | }
32 |
33 | reqHeaders = {
34 | "Accept":"*/*",
35 | "Accept-Encoding":"gzip, deflate",
36 | "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8",
37 | "Content-Length":'41',
38 | "Content-Type":"application/json;charset=UTF-8",
39 | "Host":"dl2.jdmk.xyz:1170",
40 | "Origin":"http://dl2.jdmk.xyz:1170",
41 | "Proxy-Connection":"keep-alive",
42 | "Referer":"http://dl2.jdmk.xyz:1170/",
43 | "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
44 | "X-Requested-With":"XMLHttpRequest"
45 | }
46 |
47 | #签到
48 | def signin(username):
49 | global reqHeaders
50 | session =requests.session ()
51 | try:
52 | response =session.get(f'http://dl2.jdmk.xyz:1170/user/signin/{username}',headers = reqHeaders,timeout=3)
53 | if(json.loads(response.text)['code'])==0:
54 | print(f"签到成功 获得 {json.loads(response.text)['data']} 个积分")
55 | query(username)
56 | else:
57 | if(json.loads(response.text)['code'])==-1:
58 | print(json.loads(response.text)['msg'])
59 | else:
60 | print(f"签到失败,响应信息:{response.text}")
61 | except Exception as e:
62 | print(f"签到失败,响应信息:{response.text}")
63 | print('正在重新签到...')
64 | if(reconnect_counts[username]["signin_count"] < 3):
65 | signin(username)
66 | reconnect_counts[username]["signin_count"] += 1
67 |
68 | #查询总积分
69 | def query(username):
70 | global reqHeaders
71 | session =requests.session ()
72 | try:
73 | response =session .get (f'http://dl2.jdmk.xyz:1170/user/getUserInfo?username={username}',headers = reqHeaders,timeout=3)
74 | if(json.loads(response.text)['code']==0):
75 | print(f"当前总积分 {json.loads(response.text)['data']['score']}")
76 | else:
77 | print(f"查询积分失败,响应信息:{response.text}")
78 | except Exception as e:
79 | print(f"查询积分失败,响应信息:{response.text}")
80 | print('正在重新查询...')
81 | if(reconnect_counts[username]["query_count"] < 3):
82 | query(username)
83 | reconnect_counts[username]["query_count"] += 1
84 |
85 | def login_sign (item):
86 | global reqHeaders
87 | username = item.get('username')
88 | print(f'{username}: 开始任务:')
89 | session =requests.session ()
90 | # 登录
91 | response =session.post ('http://dl2.jdmk.xyz:1170/user/login',headers = reqHeaders,data = json.dumps (item,separators=(',', ':')),timeout=3)
92 | try:
93 | if json.loads(response.text)['code']== 0 :
94 | print ("登录成功")
95 | cookie =response.cookies.get_dict ()
96 | reqHeaders.update({'Cookie':'satoken='+cookie['satoken']})
97 | signin(username)
98 | else :
99 | print (f"登录失败,响应信息:{response.text}")
100 | except Exception as e:
101 | print (f"登录失败,响应信息:{response.text}")
102 | print('正在重新登录...')
103 | if(reconnect_counts[username]["login_count"] < 3):
104 | login_sign(item)
105 | reconnect_counts[username]["login_count"] += 1
106 | if __name__ =='__main__':
107 | print (f"延时{random_number}秒后开始任务,预计{formatted_new_time} 开始")
108 | time.sleep(random_number)
109 | for item in userList:
110 | login_sign (item)
111 | time.sleep(random.randint(60, 60*2)) # 0到59之间的随机秒)
--------------------------------------------------------------------------------
/jryj.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: smallfawn
4 | @Date: 2024.06.10 21:00
5 | @Description: 每日一句 小程序 一天大概2毛满3提
6 | 有问题联系3288588344
7 | 频道:https://pd.qq.com/s/672fku8ge
8 | ------------------------------------------
9 | 变量名:juzi
10 | 变量值 https://api.juzi.co/ 接口域名的请求头Headers中token的值 多账号&或换行或新建同名变量
11 | [Script]
12 | http-response
13 |
14 | [MITM]
15 | hostname =
16 |
17 | ⚠️【免责声明】
18 | ------------------------------------------
19 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
20 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
21 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
22 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
23 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
24 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
25 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
26 | */
27 |
28 | const $ = new Env("每日一句小程序");
29 | let ckName = `juzi`;
30 | let userCookie = checkEnv(
31 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
32 | );
33 | const notify = $.isNode() ? require("./sendNotify") : "";
34 |
35 | !(async () => {
36 | console.log(
37 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
38 | new Date().getTime() +
39 | new Date().getTimezoneOffset() * 60 * 1000 +
40 | 8 * 60 * 60 * 1000
41 | ).toLocaleString()} \n==================================================`
42 | );
43 | //console.log(userCookie)
44 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
45 | let index = 1;
46 | let strSplitor = "#";
47 |
48 | for (let user of userCookie) {
49 | $.log(`\n🚀 user:【${index}】 start work\n`);
50 | index++
51 | $.token = user
52 | $.ckStatus = true;
53 | $.juzi = null
54 | $.sid = null
55 | await getJuzi();
56 | if ($.juzi) {
57 | $.log(`🎉 获取成功:${$.juzi}`);
58 | await postJuzi();
59 | } else {
60 | }
61 | await getNewJuzi()
62 | if ($.sid) {
63 | await likeJuzi()
64 | } else {
65 | }
66 | }
67 |
68 | await $.sendMsg($.logs.join("\n"));
69 | })()
70 | .catch((e) => console.log(e))
71 | .finally(() => $.done());
72 |
73 | async function getJuzi() {
74 | let config = {
75 | url: `https://v1.hitokoto.cn`,
76 | method: "GET"
77 | }
78 | let { data: result } = await Request(config);
79 | if (result) {
80 | $.juzi = result.hitokoto + "~~~" + result.from_who;
81 | }
82 | }
83 | async function postJuzi() {
84 |
85 | let config = {
86 | url: `https://api.juzi.co/sentence/execWrite`,
87 | method: "POST",
88 | headers: {
89 | "accept": "*/*",
90 | "accept-language": "zh-CN,zh;q=0.9",
91 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
92 | "sec-fetch-dest": "empty",
93 | "sec-fetch-mode": "cors",
94 | "sec-fetch-site": "cross-site",
95 | "token": $.token,
96 | "xweb_xhr": "1",
97 | "Referer": "https://servicewechat.com/wx3e3540cb2012ea1f/26/page-frame.html",
98 | "Referrer-Policy": "unsafe-url"
99 | },
100 | data: qs({
101 | "juzi": encodeURIComponent($.juzi),
102 | "original": "false",
103 | "writer": "",
104 | "source": "",
105 | "tagsValue": "",
106 | "tagslength": "0",
107 | "tags": ""
108 | })
109 |
110 | }
111 |
112 |
113 | let { data: result } = await Request(config);
114 | if (result.code = 200) {
115 | $.log(`发布句子成功`)
116 | console.log(result)
117 | } else {
118 | $.log(`发布句子失败 [${result.msg}]`)
119 | }
120 | }
121 |
122 | async function likeJuzi() {
123 | let config = {
124 | url: `https://api.juzi.co/sentence/slike`,
125 | method: "POST",
126 | headers: {
127 | "accept": "*/*",
128 | "accept-language": "zh-CN,zh;q=0.9",
129 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
130 | "sec-fetch-dest": "empty",
131 | "sec-fetch-mode": "cors",
132 | "sec-fetch-site": "cross-site",
133 | "token": $.token,
134 | "xweb_xhr": "1",
135 | "Referer": "https://servicewechat.com/wx3e3540cb2012ea1f/26/page-frame.html",
136 | "Referrer-Policy": "unsafe-url"
137 | },
138 | data: qs({ sid: $.sid })
139 | }
140 | let { data: result } = await Request(config);
141 | if (result.code = 200) {
142 | $.log(`点赞句子成功`)
143 | } else {
144 | $.log(`点赞句子失败 [${result.msg}]`)
145 | }
146 | }
147 | async function getNewJuzi() {
148 | let config = {
149 | url: `https://api.juzi.co/index/tab`,
150 | method: "GET",
151 | headers: {
152 | "accept": "*/*",
153 | "accept-language": "zh-CN,zh;q=0.9",
154 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
155 | "sec-fetch-dest": "empty",
156 | "sec-fetch-mode": "cors",
157 | "sec-fetch-site": "cross-site",
158 | "token": $.token,
159 | "xweb_xhr": "1",
160 | "Referer": "https://servicewechat.com/wx3e3540cb2012ea1f/26/page-frame.html",
161 | "Referrer-Policy": "unsafe-url"
162 | },
163 | }
164 | let { data: result } = await Request(config);
165 | if (result.code = 200) {
166 | let num = Math.floor(Math.random() * 9)
167 | $.sid = result.data.recommend[num].id
168 | } else {
169 | $.log(`获取待点赞句子失败 [${result.msg}]`)
170 | }
171 | }
172 | function qs(obj) {
173 | let str = "";
174 | for (let key in obj) {
175 | str += `${key}=${obj[key]}&`
176 | }
177 | return str.substring(0, str.length - 1)
178 | }
179 |
180 | function checkEnv(userCookie) {
181 | const envSplitor = ["&", "\n"];
182 | //console.log(userCookie);
183 | let userList = userCookie
184 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
185 | .filter((n) => n);
186 | console.log(`共找到${userList.length}个账号`);
187 | return userList;
188 | }
189 | // prettier-ignore
190 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
191 |
192 | async function Request(options) {
193 | if ($.isNode()) {
194 | const axios = require("axios");
195 | Request = async (options) => {
196 | try {
197 | return await axios.request(options);
198 | } catch (error) {
199 | return error && error.error ? error.error : "请求失败";
200 | }
201 | };
202 | }
203 | if ($.isQuanX()) {
204 | Request = async (options) => {
205 | try {
206 | return await $task.fetch(options);
207 | } catch (error) {
208 | return error && error.error ? error.error : "请求失败";
209 | }
210 | };
211 | }
212 | return await Request(options);
213 | }
214 |
215 |
--------------------------------------------------------------------------------
/kg.py:
--------------------------------------------------------------------------------
1 | """
2 | 酷瓜
3 | 每天0.1毛抓refreshToken,openid,appid就可以了(首次登陆才有这个包没抓到重新进入去抓)
4 | 分隔符#多账户换行
5 |
6 |
7 | # cron: 0 7,21 * * *
8 | # const $ = new Env("酷瓜");
9 | 有问题联系3288588344
10 | 频道:https://pd.qq.com/s/672fku8ge
11 |
12 |
13 | """
14 | import os
15 | import requests
16 | import time
17 | import random
18 | response = requests.get("https://raw.githubusercontent.com/3288588344/toulu/main/tl.txt")
19 | response.encoding = 'utf-8'
20 | txt = response.text
21 | print(txt)
22 |
23 | def refresh_token(refreshToken):
24 | url = "https://www.kugua.com/wxapp/refreshToken"
25 | headers = {
26 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
27 | "Content-Type": "application/json"
28 | }
29 | data = {
30 | "refresh_token": refreshToken
31 | }
32 | response = requests.post(url, headers=headers, json=data)
33 | json_response = response.json()
34 | if json_response.get('status') == "0000":
35 | token = json_response["data"]["token"]
36 | codemsg = json_response["codemsg"]
37 | print(f"token刷新结果{codemsg},开始执行提现任务")
38 | return token
39 | else:
40 | print("刷新失败检查refresh_token是否过期")
41 | return None
42 |
43 | def sign(token, appid, openid):
44 | url = "https://www.kugua.com/wxapp/inflatedv3/popUpRedEnvelopes"
45 | headers = {
46 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
47 | "Content-Type": "application/json"
48 | }
49 | data = {
50 | "token": token,
51 | "type": 1,
52 | "invite_id": "",
53 | "code_ticket": "",
54 | "count": "",
55 | "appid": appid,
56 | "openid": openid
57 | }
58 | response = requests.post(url, headers=headers, json=data)
59 | json_response = response.json()
60 | if json_response.get('status') == "0000":
61 | codemsg = json_response["codemsg"]
62 | print(f"签到结果{codemsg}")
63 | else:
64 | codemsg = json_response["codemsg"]
65 | print(f"签到失败{codemsg}")
66 |
67 | def tx(token, openid, appid):
68 | url = "https://www.kugua.com/wxapp/withdrawal/withdrawal"
69 | headers = {
70 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; RMX3562 Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220099 MMWEBSDK/20240404 MMWEBID/2307 MicroMessenger/8.0.49.2600(0x28003133) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android",
71 | "Content-Type": "application/json"
72 | }
73 | data = {
74 | "token": token,
75 | "withdrawalId": 8,
76 | "appid": appid,
77 | "openid": openid
78 | }
79 | response = requests.post(url, headers=headers, json=data)
80 | json_response = response.json()
81 | if json_response.get('status') == "0000":
82 | amount = json_response["data"]["amount"]
83 | codemsg = json_response["codemsg"]
84 | print(f"提现结果{codemsg},提现后余额还剩{amount}")
85 | else:
86 | codemsg = json_response["codemsg"]
87 | print(f"提现失败{codemsg}")
88 |
89 | if __name__ == "__main__":
90 | mkkg = os.environ.get('mkkg')
91 | if not mkkg:
92 | print("请设置环境变量mkkg")
93 | else:
94 | kghw_list = mkkg.split('\n')
95 | for num, kghw_item in enumerate(kghw_list, start=1):
96 | appid, openid, refreshToken = kghw_item.split('#')
97 | print(f"=====开始执行第{num}个账号任务=====")
98 | print("---------开始执行账号刷新---------")
99 | refreshed_token = refresh_token(refreshToken)
100 | if refreshed_token:
101 | print("---------开始执行账号签到---------")
102 | sign(refreshed_token, appid, openid)
103 | time.sleep(random.randint(10, 30))
104 | print("---------开始执行账号提现---------")
105 | tx(refreshed_token, openid, appid)
106 | time.sleep(random.randint(10, 30))
107 | print("---------账号任务执行完毕---------")
--------------------------------------------------------------------------------
/ljgy.js:
--------------------------------------------------------------------------------
1 | // cron: 15 8,17 * * *
2 | // const $ = new Env("丽璟国韵");
3 | // 填写账号&密码 多账号换行
4 | // export ljgy="130xxxxxx&xxxxx
5 | // 130xxxxxx&xxxxx"
6 | const {
7 | getCurrDay,checkTime,Env,random
8 | } = require('./utils.js')
9 | const {sendNotify} = require('./sendNotify.js')
10 | const $ = new Env("丽璟国韵");
11 | const axios = require('axios')
12 | const userInfoList = $.getEnvKey('ljgy').split('\n')
13 | if(!userInfoList.length||userInfoList[0]===''){
14 | throw new Error('未找到ck')
15 | }
16 | console.log(`获取到${userInfoList.length}个账号`);
17 | const baseUrl = 'http://wep.qzlcis.com/api'
18 | const headers = {
19 | 'Host': 'wep.qzlcis.com',
20 | 'Connection': 'keep-alive',
21 | 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.48(0x18003030) NetType/4G Language/zh_CN',
22 | 'Content-Type': 'application/json',
23 | 'Accept': 'application/json;charset=utf-8',
24 | 'Sec-Fetch-Site': 'cross-site',
25 | 'Sec-Fetch-Mode': 'cors',
26 | 'Sec-Fetch-Dest': 'empty',
27 | 'Referer': 'http://wep.qzlcis.com/',
28 | 'Accept-Encoding': 'gzip, deflate',
29 | 'Accept-Language': 'zh-CN,zh;q=0.9',
30 |
31 | }
32 | const url = {
33 | 'login':'/index/login',
34 | 'sign':'/user/sign',
35 | 'sign_reward':'/user/sign_reward',
36 | 'clock':'/user/clock',
37 | 'clock_reward':'/user/clock_reward',
38 | 'info':'/user/info',
39 |
40 | }
41 | const api = {
42 | login: (data) => {
43 | return axios({
44 | url: baseUrl+url.login,
45 | method: 'post',
46 | headers,
47 | data
48 | })
49 | },
50 | sign: (data) => {
51 | return axios({
52 | url: baseUrl+url.sign,
53 | method: 'post',
54 | headers,
55 | data
56 | })
57 | },
58 | sign_reward: (data) => {
59 | return axios({
60 | url: baseUrl+url.sign_reward,
61 | method: 'post',
62 | headers,
63 | data
64 | })
65 | },
66 | clock: (data) => {
67 | return axios({
68 | url: baseUrl+url.clock,
69 | method: 'post',
70 | headers,
71 | data
72 | })
73 | },
74 | clock_reward: (data) => {
75 | return axios({
76 | url: baseUrl+url.clock_reward,
77 | method: 'post',
78 | headers,
79 | data
80 | })
81 | },
82 | info: (data) => {
83 | return axios({
84 | url: baseUrl+url.info,
85 | method: 'post',
86 | headers,
87 | data
88 | })
89 | },
90 | }
91 | const processTokens = async () => {
92 | let index = 0
93 | const randomTime = random(1, 300)
94 | console.log('随机延迟:',randomTime + '秒');
95 | await $.wait(randomTime*1000)
96 | for (const token of userInfoList) {
97 | try {
98 | $.log('')
99 | index++
100 | const userInfo = token.split('&')
101 | const username = userInfo[0]
102 | const password = userInfo[1]
103 | $.log(`账号【${index}】 当前用户:${username}`);
104 | const {data:{code,info,data:tokenData}} = await api.login({username,password})
105 | if(code!==1){
106 | $.log(`账号【${index}】 登录失败:${info}`)
107 | await $.wait(2000)
108 | continue;
109 | }
110 | $.log(`账号【${index}】 登录成功!`)
111 | await $.wait(2000)
112 | const {data:{info:signInfo,data:signData}} = await api.sign(tokenData)
113 | await $.wait(1500)
114 | const {data:{data:{signin_days}}} = await api.sign_reward(tokenData)
115 | await $.wait(2500)
116 | const {data:{data:{money}}} = await api.info(tokenData)
117 | $.log(`账号【${index}】 红包签到信息:${signInfo}`);
118 | $.log(`账号【${index}】 红包签到天数:${signin_days}`);
119 | $.log(`账号【${index}】 红包累计金额:${money}`);
120 | await $.wait(1000*15)
121 | const {data:{info:clockInfo}} = await api.clock(tokenData)
122 | $.log(`账号【${index}】 实物签到信息:${clockInfo}`);
123 | await $.wait(3500)
124 | const {data:{data:clockData}} = await api.clock_reward(tokenData)
125 | $.log(`账号【${index}】 累计打卡天数:${clockData?.clock_day}`);
126 | $.log(`账号【${index}】 下个奖品:${clockData?.next_reward?.name}`);
127 | $.log(`账号【${index}】 下个奖品所需天数:${clockData?.next_reward?.days}`);
128 | $.log('');
129 | await $.wait(1000*30)
130 | } catch (error) {
131 | $.logErr(error.toString());
132 | }
133 | }
134 | $.log('')
135 | await sendNotify('丽璟国韵', $.logs.join('
'))
136 | $.done()
137 | };
138 |
139 | processTokens()
--------------------------------------------------------------------------------
/lqkx.py:
--------------------------------------------------------------------------------
1 | # --------------------------------注释区--------------------------------
2 | # 入口:微信扫码:https://gitee.com/HuaJiB/yuanshen34/raw/master/lqpf.jpg
3 | # 变量:yuanshen_lqpf
4 | # 多号分割方式 [ @ 或 换行 或 新建同名变量 ]
5 | # 抓取shop.linqishop.com下任意请求头的token的值填入
6 | # corn: 每日21点运行即可
7 | # cron: 0 7,21 * * *
8 | # const $ = new Env("临期快消");
9 | # 一日出三单 一天3r 1r起提现 无自动提现
10 | # --------------------------------一般不动区--------------------------------
11 | # _ooOoo_
12 | # o8888888o
13 | # 88" . "88
14 | # (| -_- |)
15 | # O\ = /O
16 | # ____/`---'\____
17 | # . ' \\| |// `.
18 | # / \\||| : |||// \
19 | # / _||||| -:- |||||- \
20 | # | | \\\ - /// | |
21 | # | \_| ''\---/'' | |
22 | # \ .-\__ `-` ___/-. /
23 | # ___`. .' /--.--\ `. . __
24 | # ."" '< `.___\_<|>_/___.' >'"".
25 | # | | : `- \`.;`\ _ /`;.`/ - ` : | |
26 | # \ \ `-. \_ __\ /__ _/ .-` / /
27 | # ======`-.____`-.___\_____/___.-`____.-'======
28 | # `=---='
29 | #
30 | # .............................................
31 | # 佛祖保佑 永无BUG
32 | # 佛祖镇楼 BUG辟邪
33 | #佛曰:
34 | # 写字楼里写字间,写字间里程序员;
35 | # 程序人员写程序,又拿程序换酒钱。
36 | # 酒醒只在网上坐,酒醉还来网下眠;
37 | # 酒醉酒醒日复日,网上网下年复年。
38 | # 但愿老死电脑间,不愿鞠躬老板前;
39 | # 奔驰宝马贵者趣,公交自行程序员。
40 | # 别人笑我忒疯癫,我笑自己命太贱;
41 | # 不见满街漂亮妹,哪个归得程序员?
42 | #
43 | # --------------------------------代码区--------------------------------
44 | import bz2, base64
45 | exec(bz2.decompress(base64.b64decode('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')))
--------------------------------------------------------------------------------
/mmx.js:
--------------------------------------------------------------------------------
1 | // cron: 15 8,17 * * *
2 | // 抓 header中的Extra-Data中的sid 多账号换行
3 | // export mmx="YZxxxx
4 | // YZxxxx"
5 | const {
6 | getCurrDay,checkTime,Env,random
7 | } = require('./utils.js')
8 | const {sendNotify} = require('./sendNotify.js')
9 | const $ = new Env("猛犸象签到");
10 | const axios = require('axios')
11 | const userInfoList = $.getEnvKey('mmx').split('\n')
12 | if(!userInfoList.length||userInfoList[0]===''){
13 | throw new Error('未找到ck')
14 | }
15 | console.log(`获取到${userInfoList.length}个ck`);
16 |
17 |
18 | const baseUrl = 'https://h5.youzan.com'
19 | const headers = {
20 | 'Host': 'h5.youzan.com',
21 | 'Connection': 'keep-alive',
22 | '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',
23 | 'Content-Type': 'application/json',
24 | 'Accept': '*/*',
25 | 'x-yz-action-id': 'wsc-h5-shop-0a37294e-1719804171907-683589',
26 | 'Sec-Fetch-Site': 'cross-site',
27 | 'Sec-Fetch-Mode': 'cors',
28 | 'Sec-Fetch-Dest': 'empty',
29 | 'Accept-Encoding': 'gzip, deflate, br',
30 | 'Accept-Language': 'zh-CN,zh;q=0.9',
31 |
32 | }
33 | const url = {
34 | 'checkin':'/wscump/checkin/checkinV2.json?checkinId=4296415&kdt_id=146288343',
35 | 'getCountDay':'/wscump/checkin/get_activity_by_yzuid_v2.json?checkinId=4296415&kdt_id=146288343',
36 | 'userInfo':'/wscaccount/api/authorize/data.json?kdt_id=146288343 ',
37 | 'point':'/wscuser/membercenter/stats.json?kdt_id=146288343'
38 | }
39 | const api = {
40 | checkin: ({data,token}) => {
41 | return axios({
42 | url: baseUrl+url.checkin,
43 | method: 'get',
44 | headers:{
45 | ...headers,
46 | "Cookie":`KDTWEAPPSESSIONID=${token}`
47 | },
48 | })
49 | },
50 | userInfo: ({data,token}) => {
51 | return axios({
52 | url: baseUrl+url.userInfo,
53 | method: 'get',
54 | headers:{
55 | ...headers,
56 | "Cookie":`KDTWEAPPSESSIONID=${token}`
57 | },
58 | })
59 | },
60 | getCountDay: ({data,token}) => {
61 | return axios({
62 | url: baseUrl+url.getCountDay,
63 | method: 'get',
64 | headers:{
65 | ...headers,
66 | "Cookie":`KDTWEAPPSESSIONID=${token}`
67 | },
68 | })
69 | },
70 | point: ({data,token}) => {
71 | return axios({
72 | url: baseUrl+url.point,
73 | method: 'get',
74 | headers:{
75 | ...headers,
76 | "Cookie":`KDTWEAPPSESSIONID=${token}`
77 | },
78 | })
79 | },
80 | }
81 | const processTokens = async () => {
82 | let index = 0
83 | const randomTime = random(1, 300)
84 | console.log('随机延迟:',randomTime);
85 | await $.wait(randomTime*1000)
86 | for (const token of userInfoList) {
87 | try {
88 | $.log('')
89 | index++
90 | const data = await api.userInfo({token})
91 | const {mobile} = data?.data?.data?.userInfo
92 | if(!mobile){
93 | $.log(`账号【${index}】 登录失效`)
94 | $.log('')
95 | continue;
96 | }
97 | $.log(`账号【${index}】 当前用户:${mobile}`,);
98 | try{
99 | const {data:{msg}} = await api.checkin({token})
100 | $.log(`账号【${index}】 签到信息:${msg}`,);
101 | }catch(e){
102 | $.logErr(`账号【${index}】 签到失败:${e.toString()}`,)
103 | }
104 | await $.wait(2000)
105 | try{
106 | const {data:{data:{continuesDay}}} = await api.getCountDay({token})
107 | $.log(`账号【${index}】 连续签到天数:${continuesDay}`,);
108 | }catch(e){
109 | $.logErr(`账号【${index}】 获取签到天数失败:${e.toString()}`,)
110 | }
111 | await $.wait(2000)
112 | const dataPoint = await api.point({token})
113 | const points = dataPoint?.data?.data?.stats?.points||`未获取到积分`
114 | $.log(`账号【${index}】 当前积分:${points}`,);
115 | await $.wait(3500)
116 | $.log('');
117 | } catch (error) {
118 | $.logErr(error.toString());
119 | }
120 | }
121 | $.log('')
122 | await sendNotify('猛犸象签到', $.logs.join('
'))
123 | $.done()
124 | };
125 |
126 | processTokens()
--------------------------------------------------------------------------------
/pinzan.js:
--------------------------------------------------------------------------------
1 | /*
2 | name:品赞领免费ip
3 | author:食翔狂魔
4 | version:1.0
5 | date:2024-11-12
6 | cron: 0 10 ? * MON
7 | pzhttp: 账户#密码 多账号换行
8 | */
9 | const fs = require('fs');
10 | const file = '.pinzan_count';
11 | let count = fs.existsSync(file) ? parseInt(fs.readFileSync(file, 'utf8')) || 0 : 0;
12 | fs.writeFileSync(file, String(count + 1));
13 |
14 | const pzhttp = process.env['pinzan'] || "";
15 | const axios = require("axios")
16 | let d = {
17 | table: ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"],
18 | UTF16ToUTF8: function(e) {
19 | for (var t = [], n = e.length, i = 0; i < n; i++) {
20 | var r, o, s = e.charCodeAt(i);
21 | 0 < s && s <= 127 ? t.push(e.charAt(i)) : 128 <= s && s <= 2047 ? (r = 192 | s >> 6 & 31,
22 | o = 128 | 63 & s,
23 | t.push(String.fromCharCode(r), String.fromCharCode(o))) : 2048 <= s && s <= 65535 && (r = 224 | s >> 12 & 15,
24 | o = 128 | s >> 6 & 63,
25 | s = 128 | 63 & s,
26 | t.push(String.fromCharCode(r), String.fromCharCode(o), String.fromCharCode(s)))
27 | }
28 | return t.join("")
29 | },
30 | UTF8ToUTF16: function(e) {
31 | for (var t = [], n = e.length, i = 0, i = 0; i < n; i++) {
32 | var r, o, s = e.charCodeAt(i);
33 | 0 == (s >> 7 & 255) ? t.push(e.charAt(i)) : 6 == (s >> 5 & 255) ? (o = (31 & s) << 6 | 63 & (r = e.charCodeAt(++i)),
34 | t.push(Sting.fromCharCode(o))) : 14 == (s >> 4 & 255) && (o = (255 & (s << 4 | (r = e.charCodeAt(++i)) >> 2 & 15)) << 8 | ((3 & r) << 6 | 63 & e.charCodeAt(++i)),
35 | t.push(String.fromCharCode(o)))
36 | }
37 | return t.join("")
38 | },
39 | encode: function(e) {
40 | if (!e)
41 | return "";
42 | for (var t = this.UTF16ToUTF8(e), n = 0, i = t.length, r = []; n < i; ) {
43 | var o = 255 & t.charCodeAt(n++);
44 | if (r.push(this.table[o >> 2]),
45 | n == i) {
46 | r.push(this.table[(3 & o) << 4]),
47 | r.push("==");
48 | break
49 | }
50 | var s = t.charCodeAt(n++);
51 | if (n == i) {
52 | r.push(this.table[(3 & o) << 4 | s >> 4 & 15]),
53 | r.push(this.table[(15 & s) << 2]),
54 | r.push("=");
55 | break
56 | }
57 | var a = t.charCodeAt(n++);
58 | r.push(this.table[(3 & o) << 4 | s >> 4 & 15]),
59 | r.push(this.table[(15 & s) << 2 | (192 & a) >> 6]),
60 | r.push(this.table[63 & a])
61 | }
62 | return r.join("")
63 | },
64 | decode: function(e) {
65 | if (!e)
66 | return "";
67 | for (var t = e.length, n = 0, i = []; n < t; )
68 | code1 = this.table.indexOf(e.charAt(n++)),
69 | code2 = this.table.indexOf(e.charAt(n++)),
70 | code3 = this.table.indexOf(e.charAt(n++)),
71 | code4 = this.table.indexOf(e.charAt(n++)),
72 | c1 = code1 << 2 | code2 >> 4,
73 | i.push(String.fromCharCode(c1)),
74 | -1 != code3 && (c2 = (15 & code2) << 4 | code3 >> 2,
75 | i.push(String.fromCharCode(c2))),
76 | -1 != code4 && (c3 = (3 & code3) << 6 | code4,
77 | i.push(String.fromCharCode(c3)));
78 | return this.UTF8ToUTF16(i.join(""))
79 | }
80 | };
81 |
82 | async function login(pzUser){
83 | let arr = pzUser.split("#");
84 | try{
85 | for (var e = d.encode("".concat(arr[0], "QWERIPZAN1290QWER").concat(arr[1])), t = "", o = 0; o < 80; o++){
86 | t += Math.random().toString(16).slice(2);
87 | }
88 |
89 | e = "".concat(t.slice(0, 100)).concat(e.slice(0, 8)).concat(t.slice(100, 200)).concat(e.slice(8, 20)).concat(t.slice(200, 300)).concat(e.slice(20)).concat(t.slice(300, 400));
90 | let res = await axios({
91 | url: "https://service.ipzan.com/users-login",
92 | method: "POST",
93 | headers: {
94 | "Content-Type": "application/json"
95 | },
96 | data: {
97 | account: e,
98 | source:"ipzan-home-one"
99 | },
100 | });
101 | return res.data.data.token;
102 | }catch(e){
103 | console.log(e);
104 | }
105 | }
106 |
107 | async function sign(token){
108 | try{
109 | let res = await axios({
110 | url: "https://service.ipzan.com/home/userWallet-receive",
111 | method: "GET",
112 | headers: {
113 | "Content-Type": "application/json",
114 | "authorization": `Bearer ${token}`
115 | }
116 | });
117 | console.log(res.data);
118 |
119 | }catch(e){
120 | console.log(e);
121 | }
122 | }
123 |
124 | async function main(pzUser){
125 | let token = await login(pzUser);
126 | if(token){
127 | await sign(token);
128 | }
129 | await new Promise(resolve => setTimeout(resolve, 10*1000));
130 | }
131 |
132 |
133 | !(async function(){
134 | console.log(`第${count+1}次执行,延时:${count*5}分钟`)
135 | await new Promise(r => setTimeout(r, count * 300000));
136 | if(!pzhttp){
137 | console.log("pzhttp未设置");
138 | return;
139 | }
140 | const pzArr = pzhttp.split("\n");
141 | for(let i = 0; i < pzArr.length; i++){
142 | await main(pzArr[i]);
143 | }
144 | })()
--------------------------------------------------------------------------------
/pzxq.js:
--------------------------------------------------------------------------------
1 | // cron: 16 7,18 * * *
2 | // const $ = new Env("瓶子星球签到");
3 | // 抓header 中的Authorization 多账号换行
4 | // export pzxq="Authorization
5 | // Authorization"
6 | const {
7 | getCurrDay,checkTime,Env,random
8 | } = require('./utils.js')
9 | const {sendNotify} = require('./sendNotify.js')
10 | const $ = new Env("瓶子星球签到");
11 | const axios = require('axios')
12 | const userInfoList = $.getEnvKey('pzxq').split('\n')
13 | if(!userInfoList.length||userInfoList[0]===''){
14 | throw new Error('未找到ck')
15 | }
16 | console.log(`获取到${userInfoList.length}个ck`);
17 |
18 |
19 | const baseUrl = 'https://exapi.jxbscbd.com'
20 | const url = {
21 | userCheckIn:'/gateway/pointsMall/task/userCheckIn',
22 | getUserPoints:'/gateway/pointsMall/user/getUserPoints?userNumber=6645c779a794800029436ab8',
23 | getUserInfo:'/gateway/pointsMall/user/getUserForQuestionnaire'
24 | }
25 | const headers = {
26 | 'Content-Type': 'application/json',
27 | 'Authorization': '',
28 | 'Host': 'exapi.jxbscbd.com',
29 | 'Referer': 'https://servicewechat.com/wx5d8100503eb3ecc3/776/page-frame.html',
30 | '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/9115'
31 | }
32 | const api = {
33 | userCheckIn: (token,data) => {
34 | return axios({
35 | url: baseUrl+url.userCheckIn,
36 | method: 'post',
37 | headers: {...headers, 'Authorization': token},
38 | data: data,
39 | })
40 |
41 | },
42 | getUserPoints: (token) => {
43 | return axios({
44 | url: baseUrl+url.getUserPoints,
45 | method: 'get',
46 | headers: {...headers, 'Authorization': token}
47 | })
48 | },
49 | getUserInfo: (token) => {
50 | return axios({
51 | url: baseUrl+url.getUserInfo,
52 | method: 'get',
53 | headers: {...headers, 'Authorization': token}
54 | })
55 | },
56 | }
57 |
58 | const processTokens = async () => {
59 | let index = 0
60 | const randomTime = random(1, 300)
61 | console.log('随机延迟:',randomTime + '秒');
62 | await $.wait(randomTime*1000)
63 | for (const token of userInfoList) {
64 | try {
65 | $.log('')
66 | index++
67 | const {data: {data: {id, userNumber, telephoneNumber}}} = await api.getUserInfo(token);
68 | const checkInParams = {
69 | userId: id,
70 | userNumber,
71 | telephoneNumber
72 | };
73 | $.log(`账号【${index}】 查询信息成功:${telephoneNumber}`, );
74 |
75 | await $.wait(1500);
76 |
77 | const {data: {msg}} = await api.userCheckIn(token, checkInParams);
78 | $.log(`账号【${index}】 签到信息:${msg}`, );
79 |
80 | await $.wait(1500);
81 |
82 | const {data: {data: {accumulatePoints, availablePoints}}} = await api.getUserPoints(token);
83 | $.log(`账号【${index}】 累计积分:${accumulatePoints}`, );
84 | $.log(`账号【${index}】 可用积分:${availablePoints}`, );
85 | $.log('');
86 |
87 | await $.wait(3500);
88 | } catch (error) {
89 | $.logErr(error.toString());
90 | }
91 | }
92 | $.log('')
93 | await sendNotify('瓶子星球签到', $.logs.join('
'))
94 | $.done()
95 | };
96 | processTokens()
--------------------------------------------------------------------------------
/qjez.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: sm
4 | @Date: 2024.06.07 19:15
5 | @Description: 微信小程序虔金E站 每日签到
6 | ------------------------------------------
7 | 变量名qianjin
8 | 变量值https://www.xrservice.cn/请求头Headers中Homing-Auth的值 去掉Bearer 多账号&或换行
9 | [Script]
10 | http-response
11 |
12 | [MITM]
13 | hostname =
14 |
15 | ⚠️【免责声明】
16 | ------------------------------------------
17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
24 | */
25 |
26 | const $ = new Env("微信小程序虔金E站");
27 | let ckName = `qianjin`;
28 | let userCookie = checkEnv(
29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
30 | );
31 | const notify = $.isNode() ? require("./sendNotify") : "";
32 |
33 | !(async () => {
34 | console.log(
35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
36 | new Date().getTime() +
37 | new Date().getTimezoneOffset() * 60 * 1000 +
38 | 8 * 60 * 60 * 1000
39 | ).toLocaleString()} \n==================================================`
40 | );
41 | //console.log(userCookie)
42 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
43 | let index = 0;
44 | //let strSplitor = "#";
45 |
46 | for (let user of userCookie) {
47 | $.log(`\n🚀 user:【${index || ++index}】 start work\n`);
48 | $.ck = user
49 | //$.ckStatus = false;
50 | await signIn()
51 | }
52 |
53 | await $.sendMsg($.logs.join("\n"));
54 | })()
55 | .catch((e) => console.log(e))
56 | .finally(() => $.done());
57 | async function signIn() {
58 | let config = {
59 | method: 'POST',
60 | url: 'https://www.xrservice.cn/rayo-gz-fes-back/blade-signin/signin-user/submit',
61 | headers: {
62 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx7bda09dcc9affced',
63 | 'Accept': 'application/json, text/plain, */*',
64 | 'Content-Type': 'application/json',
65 | 'sec-ch-ua': '"Chromium";v="122", "Not(A:Brand";v="24", "Android WebView";v="122"',
66 | 'Homing-Auth': 'Bearer '+$.ck,
67 | 'sec-ch-ua-mobile': '?1',
68 | //'Authorization': 'Basic aG9taW5nLXd4bHA6UEhPU2J6SEVoRWhkRW4xYWlDSmhnYmJadVQ=',
69 | 'sec-ch-ua-platform': '"Android"',
70 | 'Origin': 'https://www.xrservice.cn',
71 | 'X-Requested-With': 'com.tencent.mm',
72 | 'Sec-Fetch-Site': 'same-origin',
73 | 'Sec-Fetch-Mode': 'cors',
74 | 'Sec-Fetch-Dest': 'empty',
75 | 'Referer': 'https://www.xrservice.cn/rayo-gz-fes-h5/',
76 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7'
77 | },
78 | data: JSON.stringify({})
79 | };
80 | let { data: result } = await Request(config);
81 | result?.code == 200 ? $.log(`签到成功`) : $.log(`签到失败`); console.log(JSON.stringify(result));
82 | }
83 |
84 |
85 | function checkEnv(userCookie) {
86 | const envSplitor = ["&", "\n"];
87 | //console.log(userCookie);
88 | let userList = userCookie
89 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
90 | .filter((n) => n);
91 | console.log(`共找到${userList.length}个账号`);
92 | return userList;
93 | }
94 | // prettier-ignore
95 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
96 |
97 | async function Request(options) {
98 | if ($.isNode()) {
99 | const axios = require("axios");
100 | Request = async (options) => {
101 | try {
102 | return await axios.request(options);
103 | } catch (error) {
104 | throw error && error.error ? error.error : "请求失败";
105 | }
106 | };
107 | }
108 | if ($.isQuanX()) {
109 | Request = async (options) => {
110 | try {
111 | return await $task.fetch(options);
112 | } catch (error) {
113 | throw error && error.error ? error.error : "请求失败";
114 | }
115 | };
116 | }
117 | return await Request(options);
118 | }
--------------------------------------------------------------------------------
/rainyun.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 |
4 | """
5 | 雨云自动签到脚本V2.0
6 | 注册地址:https://www.rainyun.com
7 | 用途:自动签到赚积分,积分可提现,也可在商城购买虚拟主机或云服务等
8 | 环境变量:共有两个环境变量
9 |
10 | yyqd 账户与密码用&隔开,多账户用#隔开
11 | VERIFY_TOKEN 写滑块的token
12 | 定时:建议每天执行一次
13 | """
14 |
15 | import requests
16 | import json
17 | import os
18 | from typing import Tuple, Optional, Dict
19 | from dataclasses import dataclass
20 |
21 | try:
22 | from notify import send
23 | except ImportError:
24 | print("通知服务加载失败,请检查notify.py是否存在")
25 | exit(1)
26 |
27 |
28 | @dataclass
29 | class UserInfo:
30 | name: str
31 | email: str
32 | points: int
33 | last_ip: str
34 | last_login_area: str
35 |
36 |
37 | class RainyunAPI:
38 | BASE_URL = "https://api.v2.rainyun.com"
39 | VERIFY_URL = "http://119.96.239.11:8888/api/getcode"
40 |
41 | def __init__(self):
42 | self.session = requests.Session()
43 | self.csrf_token = None
44 |
45 | def get_slide_verify(self) -> Tuple[str, str]:
46 | verify_token = os.getenv("VERIFY_TOKEN")
47 | if not verify_token:
48 | print("错误:未设置VERIFY_TOKEN环境变量")
49 | return "", ""
50 |
51 | headers = {"Content-Type": "application/json"}
52 | data = {
53 | "timeout": "60",
54 | "type": "tencent-turing",
55 | "appid": "2039519451",
56 | "token": verify_token,
57 | "developeraccount": "qqaoxin",
58 | "referer": "https://dl.reg.163.com/"
59 | }
60 |
61 | try:
62 | response = self.session.post(self.VERIFY_URL, headers=headers, json=data)
63 | response.raise_for_status()
64 | result = response.json()
65 |
66 | if result.get("status") == 200 and result.get("success"):
67 | verify_data = json.loads(result["data"]["code"])
68 | return verify_data.get("ticket", ""), verify_data.get("randstr", "")
69 |
70 | print(f"验证码服务返回错误: {result.get('msg')}")
71 | return "", ""
72 |
73 | except Exception as e:
74 | print(f"验证码请求异常: {str(e)}")
75 | return "", ""
76 |
77 | def login(self, username: str, password: str) -> bool:
78 | login_data = json.dumps({
79 | "field": username,
80 | "password": password
81 | })
82 | headers = {"Content-Type": "application/json"}
83 |
84 | try:
85 | response = self.session.post(
86 | f"{self.BASE_URL}/user/login",
87 | headers=headers,
88 | data=login_data
89 | )
90 | response.raise_for_status()
91 |
92 | self.csrf_token = response.cookies.get_dict().get('X-CSRF-Token')
93 | return bool(self.csrf_token)
94 |
95 | except Exception as e:
96 | print(f"登录失败: {str(e)}")
97 | return False
98 |
99 | def get_user_info(self) -> Optional[UserInfo]:
100 | if not self.csrf_token:
101 | return None
102 |
103 | headers = {
104 | "Content-Type": "application/json",
105 | 'x-csrf-token': self.csrf_token
106 | }
107 |
108 | try:
109 | response = self.session.get(
110 | f"{self.BASE_URL}/user/?no_cache=false",
111 | headers=headers
112 | )
113 | response.raise_for_status()
114 |
115 | data = response.json()['data']
116 | return UserInfo(
117 | name=data['Name'],
118 | email=data['Email'],
119 | points=data['Points'],
120 | last_ip=data['LastIP'],
121 | last_login_area=data['LastLoginArea']
122 | )
123 |
124 | except Exception as e:
125 | print(f"获取用户信息失败: {str(e)}")
126 | return None
127 |
128 | def sign_in(self, ticket: str, randstr: str) -> Tuple[bool, str]:
129 | if not self.csrf_token:
130 | return False, "签到失败:未获取到csrf_token"
131 |
132 | signin_data = json.dumps({
133 | "task_name": "每日签到",
134 | "verifyCode": "",
135 | "vticket": ticket,
136 | "vrandstr": randstr
137 | })
138 | headers = {
139 | 'x-csrf-token': self.csrf_token
140 | }
141 |
142 | try:
143 | response = self.session.post(
144 | f"{self.BASE_URL}/user/reward/tasks",
145 | headers=headers,
146 | data=signin_data
147 | )
148 |
149 | try:
150 | result = response.json()
151 | except:
152 | return False, f"签到失败:HTTP {response.status_code}, 响应内容: {response.text}"
153 |
154 | if result.get("code") == 200:
155 | return True, "签到成功"
156 | else:
157 | return False, f"签到失败:{result.get('message', '未知错误')} (code: {result.get('code')})"
158 |
159 | except Exception as e:
160 | return False, f"签到异常:{str(e)}"
161 |
162 |
163 | def process_account(credentials: str) -> str:
164 | try:
165 | username, password = credentials.split('&')
166 | except ValueError:
167 | return "\n账户格式错误,请使用&分隔用户名和密码"
168 |
169 | api = RainyunAPI()
170 |
171 | if not api.login(username, password):
172 | return f'\n【用户名】{username}\n【签到状态】登录失败'
173 |
174 | ticket, randstr = api.get_slide_verify()
175 | if not ticket or not randstr:
176 | return f'\n【用户名】{username}\n【签到状态】滑块验证失败'
177 |
178 | user_info = api.get_user_info()
179 | if not user_info:
180 | return f'\n【用户名】{username}\n【签到状态】获取用户信息失败'
181 |
182 | success, sign_message = api.sign_in(ticket, randstr)
183 |
184 | return (f'\n【用户名】{username}\n'
185 | f'【电子邮件】{user_info.email}\n'
186 | f'【签到状态】{sign_message}\n'
187 | f'【剩余积分】{user_info.points}\n'
188 | f'【最后登录ip】{user_info.last_ip}\n'
189 | f'【最后登录地址】{user_info.last_login_area}')
190 |
191 |
192 | def main():
193 | credentials = os.getenv("yyqd")
194 | if not credentials:
195 | print("错误:未设置yyqd环境变量")
196 | return
197 |
198 | verify_token = os.getenv("VERIFY_TOKEN")
199 | if not verify_token:
200 | print("错误:未设置VERIFY_TOKEN环境变量")
201 | return
202 |
203 | results = []
204 | for account in credentials.split('#'):
205 | result = process_account(account)
206 | results.append(result)
207 |
208 | combined_message = "-"*45 + "\n".join(results)
209 | print("###雨云签到###\n\n", combined_message)
210 |
211 | send("雨云签到", combined_message)
212 |
213 |
214 | if __name__ == '__main__':
215 | main()
--------------------------------------------------------------------------------
/sandeli.js:
--------------------------------------------------------------------------------
1 | // cron: 40 8,17 * * *
2 | // 商品id列表 1-大麦茶 2-桂花乌龙 3-茉莉乌龙
3 | // 抓header中的Authorization 去掉bearer 多账号换行 如需抢购 追加 &商品id&addressId addressId是添加地址接口会返回 例如大麦茶就是 &1&addressId
4 | // export sandeli="8e09bfc0xxx
5 | // 770f5xxxx"
6 | const {
7 | getCurrDay,checkTime,Env,random
8 | } = require('./utils.js')
9 | const {sendNotify} = require('./sendNotify.js')
10 | const $ = new Env("三得利签到");
11 | const axios = require('axios')
12 | const userInfoList = $.getEnvKey('sandeli').split('\n')
13 | const isGetGoods = process.env['sandeli_get'] || false
14 | const requestCount = 125
15 | const getGoodsSuccessList = ['抢券成功账号列表']
16 | const goodsList = [
17 | {
18 | id:1,
19 | name:'三得利 大麦茶15瓶',
20 | activeId:'516',
21 | goodsId:'7305855462092832768',
22 |
23 | },
24 | {
25 | id:2,
26 | name:'三得利 植物茶黑豆茶15瓶',
27 | goodsId:'7316120183365910528',
28 | activeId:'522',
29 | },
30 | {
31 | id:3,
32 | name:'三得利 茉莉乌龙15瓶(新包装)',
33 | activeId:'456',
34 | goodsId:'7272962282673364992',
35 | }
36 | ]
37 | if(!userInfoList.length||userInfoList[0]===''){
38 | throw new Error('未找到ck')
39 | }
40 | console.log(`获取到${userInfoList.length}个ck`);
41 |
42 | const baseUrl = 'https://xiaodian.miyatech.com/api'
43 | const headers = {
44 | 'Host': 'xiaodian.miyatech.com',
45 | 'Connection': 'keep-alive',
46 | 'X-VERSION': '2.1.3',
47 | 'Authorization': '',
48 | 'HH-VERSION': '0.2.8',
49 | 'componentSend': 1,
50 | 'HH-FROM': '20230130307725',
51 | 'HH-APP': 'wxb33ed03c6c715482',
52 | 'appPublishType': 1,
53 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090b13)XWEB/11065',
54 | 'Content-Type': 'application/json;charset=UTF-8',
55 | 'xweb_xhr': 1,
56 | 'HH-CI': 'saas-wechat-app',
57 | 'Accept': '*/*',
58 | 'Sec-Fetch-Site': 'cross-site',
59 | 'Sec-Fetch-Mode': 'cors',
60 | 'Sec-Fetch-Dest': 'empty',
61 | 'Referer': 'https://servicewechat.com/wxb33ed03c6c715482/28/page-frame.html',
62 | 'Accept-Encoding': 'gzip, deflate, br',
63 | 'Accept-Language': 'zh-CN,zh;q=0.9'
64 | }
65 | const url = {
66 | 'signIn':'/coupon/auth/signIn',
67 | 'userInfo':'/user/member/info ',
68 | 'goods':'/order/center/order/submit'
69 | }
70 | const api = {
71 | signIn: (token) => {
72 | headers.Authorization = 'bearer '+token
73 | return axios({
74 | url: baseUrl+url.signIn,
75 | method: 'post',
76 | headers,
77 | data:{"miniappId":159}
78 | })
79 | },
80 | userInfo: (token) => {
81 | headers.Authorization = 'bearer '+token
82 | return axios({
83 | url: baseUrl+url.userInfo,
84 | method: 'post',
85 | headers,
86 | data:{}
87 | })
88 | },
89 | getGoods: (cks) => {
90 | const token = cks.split('&')[0]
91 | const id = cks.split('&')[1]
92 | const activeId = goodsList.find(goods=>goods.id==id).activeId
93 | const goodsId = goodsList.find(goods=>goods.id==id).goodsId
94 | const addressId = cks.split('&')[2]
95 | headers.Authorization = 'bearer '+token
96 | return axios({
97 | url: baseUrl+url.goods,
98 | method: 'post',
99 | headers,
100 | data:{"businessType":"POINTS_MALL","pointMallSubmitRequest":{"exchangeActivityId":activeId,"productBizNo":goodsId,"discountType":"GOODS","addressId":Number(addressId)}}
101 | })
102 | },
103 | }
104 | const getGoods = async (cks) => {
105 | try {
106 | const id = cks.split('&')[1]
107 | const mobile = cks.split('&')[3]
108 | const goodsName = goodsList.find(goods=>goods.id==id).name
109 | $.log(`🕊账号[${mobile}] 开始抢券-${getCurrDay()}...`);
110 |
111 | let { data: result} = await api.getGoods(cks)
112 | if (result?.code == 200) {
113 | $.log(`🕊账号[${mobile}] - ${goodsName} - ${getCurrDay()} 抢券成功!返回参数[${JSON.stringify(result.data)}]🎉`);
114 | getGoodsSuccessList.push(`🕊账号[${mobile}] - ${goodsName} - ${getCurrDay()} 抢券成功!`)
115 | }else {
116 | $.log(`🕊账号[${mobile}] - ${goodsName} - ${getCurrDay()} 抢券失败:${result.msg}🚫`)
117 | }
118 |
119 | } catch (e) {
120 | console.log(e);
121 | }
122 | }
123 | const processTokens = async () => {
124 | let index = 0 //用来给账号标记序号, 从1开始
125 | const date = new Date()
126 | const hour = date.getHours()
127 | if(isGetGoods&&hour===9){
128 | $.log(`当前为抢券时段,开始执行抢券任务`);
129 | //前期准备工作
130 | for (let i = userInfoList.length - 1; i >= 0; i--) {
131 | const token = userInfoList[i].split('&')[0]
132 | const goodsId = userInfoList[i].split('&')[1]
133 | const addressId = userInfoList[i].split('&')[2]
134 | if(!goodsId||!addressId){
135 | $.log(`账号【${i}】没有设置抢购参数,跳过当前账号`);
136 | userInfoList.splice(i, 1);
137 | continue;
138 | }
139 | //查询用户信息
140 | const infoData = await api.userInfo(token)
141 | const currentScore = infoData?.data?.data?.currentScore||0
142 | const mobile = infoData?.data?.data?.phone
143 | if(!mobile){
144 | $.log(`账号【${i}】登录失效,跳过当前账号`)
145 | userInfoList.splice(i, 1);
146 | continue;
147 | }
148 | if(Number(currentScore)<1800){
149 | $.log(`账号【${mobile}】当前积分${currentScore}小于1800,跳过当前账号`);
150 | userInfoList.splice(i, 1);
151 | continue;
152 | }
153 |
154 | userInfoList[i]+=`&${mobile}`
155 | await $.wait(2500)
156 | }
157 | if(!userInfoList.length){
158 | $.log('没有符合条件的账号,结束抢购任务');
159 | return
160 | }
161 | $.log(`筛选出${userInfoList.length}个账号:`);
162 | $.log(userInfoList.map(user=>user.split('&')[3]).join('\n'));
163 | const count = Math.floor(requestCount/userInfoList.length)
164 | $.log(`抢购循环次数为${count}`)
165 | //当前模式为抢购模式
166 | await checkTime({
167 | hours:9,
168 | minutes:59,
169 | seconds:59,
170 | milliseconds:0
171 | })
172 |
173 | for(let i=0;i')
184 | console.log(getGoodsSuccessList.join('\n'))
185 | return
186 | }
187 | const randomTime = random(1, 300)
188 | console.log('随机延迟:',randomTime + '秒');
189 | await $.wait(randomTime*1000)
190 | for (const tokens of userInfoList) {
191 | try {
192 | const token = tokens.split('&')[0]
193 | $.log('')
194 | index++
195 | const data = await api.userInfo(token)
196 | const mobile = data?.data?.data?.phone
197 | if(!mobile){
198 | $.log(`账号【${index}】登录失效`)
199 | $.log('')
200 | continue;
201 | }
202 | $.log(`账号【${index}】 当前用户:${mobile}`);
203 | await $.wait(2000)
204 | const {data:{msg}} = await api.signIn(token)
205 | $.log(`账号【${index}】 签到信息:${msg}`);
206 | await $.wait(2000)
207 | const infoData = await api.userInfo(token)
208 | const currentScore = infoData?.data?.data?.currentScore
209 | $.log(`账号【${index}】 当前积分:${currentScore}`);
210 | await $.wait(3500)
211 | } catch (error) {
212 | $.logErr(error.toString());
213 | }
214 | }
215 | $.log('')
216 | $.logs = $.logs.join('
')
217 | };
218 |
219 | processTokens().finally(async() => {
220 | await sendNotify('三得利任务',$.logs)
221 | $.done()
222 | });
--------------------------------------------------------------------------------
/syns.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: smallfawn 860562056
4 | @Date: 2024.06.10 14.14
5 | @Description: 所有女生小程序
6 | ------------------------------------------
7 | 变量名wawo
8 | 变量值 https://7.wawo.cc/api/ 域名Headers请求头里面的authorization 去掉bearer 多账号&或换行或新建同名变量
9 | [Script]
10 | http-response
11 |
12 | [MITM]
13 | hostname =
14 |
15 | ⚠️【免责声明】
16 | ------------------------------------------
17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
24 | */
25 |
26 | const $ = new Env("所有女生会员中心");
27 | let ckName = `wawo`;
28 | let userCookie = checkEnv(
29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
30 | );
31 | const notify = $.isNode() ? require("./sendNotify") : "";
32 |
33 | !(async () => {
34 | console.log(
35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
36 | new Date().getTime() +
37 | new Date().getTimezoneOffset() * 60 * 1000 +
38 | 8 * 60 * 60 * 1000
39 | ).toLocaleString()} \n==================================================`
40 | );
41 | //console.log(userCookie)
42 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
43 | let index = 1;
44 | let strSplitor = "#";
45 |
46 | for (let user of userCookie) {
47 | $.log(`\n🚀 user:【${index}】 start work\n`);
48 | index++
49 | $.token = user
50 | $.ckStatus = true;
51 | await getPoints()
52 | await signInInfo()
53 | }
54 |
55 | await $.sendMsg($.logs.join("\n"));
56 | })()
57 | .catch((e) => console.log(e))
58 | .finally(() => $.done());
59 | async function getPoints() {
60 | const config =
61 | {
62 | url: 'https://7.wawo.cc/api/score/wx/score/queryAmount',
63 | headers: {
64 | "content-type": "application/json",
65 | 'accept': '*/*',
66 | 'accept-language': 'zh-CN,zh;q=0.9',
67 | 'authorization': 'bearer ' + $.token,
68 | 'content-type': 'application/json',
69 | 'sec-fetch-dest': 'empty',
70 | 'sec-fetch-mode': 'cors',
71 | 'sec-fetch-site': 'cross-site',
72 | 'xweb_xhr': '1',
73 | "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`,
74 | "user-agent": `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555`
75 |
76 | }
77 | }
78 | let { data: result } = await Request(config)
79 |
80 | if (result?.code == "000") {
81 | $.log(`账号当前积分[${result.data}]`)
82 | } else {
83 | $.log(`账号积分查询失败[${result.message}]`)
84 | }
85 | }
86 | async function signInInfo() {
87 | const config =
88 | {
89 | url: 'https://7.wawo.cc/api/activity/wx/task/sign/signMsg',
90 | method: "POST",
91 | headers: {
92 | "content-type": "application/json",
93 | 'accept': '*/*',
94 | 'accept-language': 'zh-CN,zh;q=0.9',
95 | 'authorization': 'bearer ' + $.token,
96 | 'content-type': 'application/json',
97 | 'sec-fetch-dest': 'empty',
98 | 'sec-fetch-mode': 'cors',
99 | 'sec-fetch-site': 'cross-site',
100 | 'xweb_xhr': '1',
101 | "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`,
102 | "user-agent": `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555`
103 |
104 | },
105 | data: JSON.stringify({
106 | "cardNo": "411886986591633408"
107 | })
108 | }
109 | let { data: result } = await Request(config)
110 |
111 | if (result?.code == "000") {
112 | if (result.data.signed !== 1) {
113 | $.log(`未签到 ===> 签到ing`)
114 | await signIn()
115 | } else {
116 | $.log(`已签到 ===> 跳过签到`)
117 | }
118 | } else {
119 | $.log(`获取签到信息失败[${result.message}]`)
120 | }
121 | }
122 | async function signIn() {
123 | const config =
124 | {
125 | url: 'https://7.wawo.cc/api/activity/wx/task/sign/signIn',
126 | method: "POST",
127 | headers: {
128 | "content-type": "application/json",
129 | 'accept': '*/*',
130 | 'accept-language': 'zh-CN,zh;q=0.9',
131 | 'authorization': 'bearer ' + $.token,
132 | 'content-type': 'application/json',
133 | 'sec-fetch-dest': 'empty',
134 | 'sec-fetch-mode': 'cors',
135 | 'sec-fetch-site': 'cross-site',
136 | 'xweb_xhr': '1',
137 | "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`,
138 | "user-agent": `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555`
139 |
140 | },
141 | data: JSON.stringify({})
142 | }
143 | let { data: result } = await Request(config)
144 |
145 | if (result?.code == "000") {
146 | $.log(`签到成功`)
147 | } else {
148 | $.log(`签到失败[${result.message}]`)
149 | }
150 | }
151 |
152 | async function done(taskId) {
153 | const config =
154 | {
155 | url: 'https://7.wawo.cc/api/operate/wx/rewards/task/done?taskId=' + taskId,
156 | method: "POST",
157 |
158 | headers: {
159 | "content-type": "application/json",
160 | 'accept': '*/*',
161 | 'accept-language': 'zh-CN,zh;q=0.9',
162 | 'authorization': 'bearer ' + $.token,
163 | 'content-type': 'application/json',
164 | 'sec-fetch-dest': 'empty',
165 | 'sec-fetch-mode': 'cors',
166 | 'sec-fetch-site': 'cross-site',
167 | 'xweb_xhr': '1',
168 | "referer": `https://servicewechat.com/wx7d1403fe84339669/1038/page-frame.html`,
169 | "user-agent": `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309092b) XWEB/8555`
170 |
171 | },
172 | data: JSON.stringify({ "taskId": taskId })
173 | }
174 | let { data: result } = await Request(config)
175 |
176 | if (result?.code == "000") {
177 | $.log(`任务成功`)
178 | } else {
179 | $.log(`任务失败[${result.message}]`)
180 | }
181 | }
182 |
183 |
184 | function checkEnv(userCookie) {
185 | const envSplitor = ["&", "\n"];
186 | //console.log(userCookie);
187 | let userList = userCookie
188 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
189 | .filter((n) => n);
190 | console.log(`共找到${userList.length}个账号`);
191 | return userList;
192 | }
193 | // prettier-ignore
194 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
195 |
196 | async function Request(options) {
197 | if ($.isNode()) {
198 | const axios = require("axios");
199 | Request = async (options) => {
200 | try {
201 | return await axios.request(options);
202 | } catch (error) {
203 | return error && error.error ? error.error : "请求失败";
204 | }
205 | };
206 | }
207 | if ($.isQuanX()) {
208 | Request = async (options) => {
209 | try {
210 | return await $task.fetch(options);
211 | } catch (error) {
212 | return error && error.error ? error.error : "请求失败";
213 | }
214 | };
215 | }
216 | return await Request(options);
217 | }
--------------------------------------------------------------------------------
/tbhyzx.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/python3
2 | # -- coding: utf-8 --
3 | # -------------------------------
4 | # ✨ 推荐cron:23 8,17 * * *
5 | # ✨✨✨ @Author CHERWIN✨✨✨
6 | # -------------------------------
7 | # cron "23 8,17 * * *" script-path=xxx.py,tag=匹配cron用
8 | # const $ = new Env('特步会员中心小程序签到')
9 | import json
10 | import os
11 | from datetime import datetime, date
12 | import requests
13 | from requests.packages.urllib3.exceptions import InsecureRequestWarning
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 | IS_DEV = True
22 | if os.path.isfile('notify.py'):
23 | from notify import send
24 | print("加载通知服务成功!")
25 | else:
26 | print("加载通知服务失败!")
27 | send_msg = ''
28 | one_msg=''
29 | def Log(cont=''):
30 | global send_msg,one_msg
31 | print(cont)
32 | if cont:
33 | one_msg += f'{cont}\n'
34 | send_msg += f'{cont}\n'
35 |
36 | class RUN:
37 | def __init__(self,info,index):
38 | global one_msg
39 | one_msg = ''
40 | split_info = info.split('@')
41 | self.token = json.loads(split_info[0])
42 | # print(self.token)
43 | len_split_info = len(split_info)
44 | last_info = split_info[len_split_info - 1]
45 | self.send_UID = None
46 | if len_split_info > 0 and "UID_" in last_info:
47 | print('检测到设置了UID')
48 | print(last_info)
49 | self.send_UID = last_info
50 | self.index = index + 1
51 |
52 | self.headers = {
53 | "Host": "wxa-tp.ezrpro.com",
54 | "ezr-source": "weapp",
55 | "limittype": "0",
56 | "ezr-sp": "2",
57 | "uber-trace-id": "9e04a05a0c7e5df3:9e04a05a0c7e5df3:0:1",
58 | "ezr-brand-id": "254",
59 | "needloading": "[object Boolean]",
60 | "ezr-client-name": "EZR.FE.MultiMall.Mini",
61 | "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/8555",
62 | "content-type": "application/json",
63 | "xweb_xhr": "1",
64 | "accept": "*/*",
65 | "sec-fetch-site": "cross-site",
66 | "sec-fetch-mode": "cors",
67 | "sec-fetch-dest": "empty",
68 | "referer": "https://servicewechat.com/wx12e1cb3b09a0e6f0/121/page-frame.html",
69 | "accept-language": "zh-CN,zh;q=0.9"
70 | }
71 | #
72 | # print(self.headers)
73 | for key, value in self.token.items():
74 | self.headers[key] = value
75 | self.baseUrl = 'https://wxa-tp.ezrpro.com/myvip/'
76 |
77 |
78 | def GetVipCardInfoByVipId(self):
79 | Log('>>>>>>用户信息')
80 | url = "https://wxa-tp.ezrpro.com/myvip/FamilyCard/GetVipCardInfoByVipId"
81 |
82 | response = s.get(url, headers=self.headers)
83 | response = response.json()
84 | # print(response.text)
85 | if response.get('Success',False):
86 | data = response.get('Result', {})
87 | VipInfo=data.get('VipInfo', {})
88 | # 手机号
89 | MobileNo=VipInfo.get('MobileNo','')
90 | NickName=VipInfo.get('NickName','')
91 | BonusTotal=VipInfo.get('BonusTotal','')
92 | mobile=MobileNo[:3] + "*" * 4 + MobileNo[7:]
93 | Log(f'>>当前用户:【{NickName}】 手机号:【{mobile}】')
94 | Log(f'>>当前积分:【{BonusTotal}】')
95 | return True
96 | else:
97 | Log('可能token失效了')
98 | return False
99 |
100 |
101 | def GetSignInDtlInfo(self):
102 | Log('>>>>>>获取签到信息')
103 | url = "https://wxa-tp.ezrpro.com/myvip/Vip/SignIn/GetSignInDtlInfo"
104 | response = s.get(url, headers=self.headers)
105 | response = response.json()
106 | # print(response.text)
107 | if response.get('Success',False):
108 | data = response.get('Result', {})
109 | VipSignInDtl=data.get('VipSignInDtl', {})
110 | SignedDays=VipSignInDtl.get('SignedDays', '')
111 | IsSigInToday=VipSignInDtl.get('IsSigInToday', False)
112 | SignInCfg = data.get('SignInCfg', {})
113 | ActId = SignInCfg.get('ActId', '')
114 | if IsSigInToday:
115 | Log(f'>>今日已签到,累计签到:【{SignedDays}】天')
116 | else:
117 | Log('开始签到')
118 | self.SignIn(ActId)
119 | return True
120 | else:
121 | Log('可能token失效了')
122 | return False
123 |
124 | def SignIn(self, ActId):
125 | Log('====== 开始签到 ======')
126 | url = f"{self.baseUrl}Vip/SignIn/SignIn"
127 | data = {
128 | "ActId": ActId,
129 | "ActRemindStatus": True
130 | }
131 | response = s.post(url, headers=self.headers,json=data)
132 | response = response.json()
133 | # print(response)
134 | if response.get('Success', False):
135 | data = response.get('Result', {})
136 | BonusValue = data.get('BonusValue', '')
137 | Log(f'签到成功,获得:【{BonusValue}】积分')
138 | return True
139 | else:
140 | ErrMsg = response.get('ErrMsg', '')
141 | Log(f'签到失败:{ErrMsg}')
142 | return False
143 |
144 |
145 | def BonusClassify(self):
146 | Log('>>>>>>获取积分信息')
147 | url = "https://wxa-tp.ezrpro.com/myvip/Vip/Bonus/GetMyBonusLogs?pageSize=10&pageIndex=1&BonusClassify=0"
148 | response = s.get(url, headers=self.headers)
149 | response = response.json()
150 | # print(response)
151 | if response.get('Success',False):
152 | data = response.get('Result', {})
153 | BonusTotal=data.get('BonusTotal', '')
154 | Log(f'当前积分:【{BonusTotal}】')
155 | return True
156 | else:
157 | Log('可能token失效了')
158 | return False
159 |
160 | def main(self):
161 | Log(f"\n开始执行第{self.index}个账号--------------->>>>>")
162 | # if self.WxAppOnLoginNew():
163 | if self.GetVipCardInfoByVipId():
164 | # self.GetVipCardInfoByVipId()
165 | self.GetSignInDtlInfo()
166 | self.BonusClassify()
167 | self.sendMsg()
168 | return True
169 | else:
170 | self.sendMsg()
171 | return False
172 |
173 | def sendMsg(self):
174 | if self.send_UID:
175 | push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME)
176 | print(push_res)
177 |
178 |
179 | def down_file(filename, file_url):
180 | print(f'开始下载:{filename},下载地址:{file_url}')
181 | try:
182 | response = requests.get(file_url, verify=False, timeout=10)
183 | response.raise_for_status()
184 | with open(filename + '.tmp', 'wb') as f:
185 | f.write(response.content)
186 | print(f'【{filename}】下载完成!')
187 |
188 | # 检查临时文件是否存在
189 | temp_filename = filename + '.tmp'
190 | if os.path.exists(temp_filename):
191 | # 删除原有文件
192 | if os.path.exists(filename):
193 | os.remove(filename)
194 | # 重命名临时文件
195 | os.rename(temp_filename, filename)
196 | print(f'【{filename}】重命名成功!')
197 | return True
198 | else:
199 | print(f'【{filename}】临时文件不存在!')
200 | return False
201 | except Exception as e:
202 | print(f'【{filename}】下载失败:{str(e)}')
203 | return False
204 |
205 | def import_Tools():
206 | global CHERWIN_TOOLS,ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode
207 | import CHERWIN_TOOLS
208 | ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME,local_version)
209 |
210 | if __name__ == '__main__':
211 | APP_NAME = '特步会员中心小程序'
212 | ENV_NAME = 'tbhyzx'
213 | CK_URL = 'https://wxa-tp.ezrpro.com/myvip/Base/User/WxAppOnLoginNew'
214 | CK_NAME = '响应body里的Fields全部内容'
215 | CK_EX = '{"ezr-cop-id":"888","ezr-vuid":"888888","ezr-userid":"aaaaaaa","ezr-sv":"1","ezr-st":"8888","ezr-ss":"bbbbb"}'
216 | print(f'''
217 | ✨✨✨ {APP_NAME}签到✨✨✨
218 | ✨ 功能:
219 | 积分签到
220 | ✨ 抓包步骤:
221 | 打开{APP_NAME}
222 | 授权登陆
223 | 打开抓包工具
224 | 找{CK_URL}{CK_NAME}
225 | 参数示例:{CK_EX}
226 | ✨ ✨✨wxpusher一对一推送功能,
227 | ✨需要定义变量export WXPUSHER=wxpusher的app_token,不设置则不启用wxpusher一对一推送
228 | ✨需要在{ENV_NAME}变量最后添加@wxpusher的UID
229 | ✨ 设置青龙变量:
230 | export {ENV_NAME}='{CK_NAME}参数值'多账号#或&分割
231 | export SCRIPT_UPDATE = 'False' 关闭脚本自动更新,默认开启
232 | ✨ ✨ 注意:抓完CK没事儿别打开小程序,重新打开小程序请重新抓包
233 | ✨ 推荐cron:0 6 * * *
234 | ✨✨✨ @Author CHERWIN✨✨✨
235 | ''')
236 | local_script_name = os.path.basename(__file__)
237 | local_version = '2024.06.02'
238 | if IS_DEV:
239 | import_Tools()
240 | else:
241 | if os.path.isfile('CHERWIN_TOOLS.py'):
242 | import_Tools()
243 | else:
244 | if down_file('CHERWIN_TOOLS.py', 'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py'):
245 | print('脚本依赖下载完成请重新运行脚本')
246 | import_Tools()
247 | else:
248 | print('脚本依赖下载失败,请到https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py下载最新版本依赖')
249 | exit()
250 | print(TIPS)
251 | token = ''
252 | token = ENV if ENV else token
253 | if not token:
254 | print(f"未填写{ENV_NAME}变量\n青龙可在环境变量设置 {ENV_NAME} 或者在本脚本文件上方将{CK_NAME}填入token =''")
255 | exit()
256 | tokens = CHERWIN_TOOLS.ENV_SPLIT(token)
257 | # print(tokens)
258 | if len(tokens) > 0:
259 | print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<")
260 | access_token = []
261 | for index, infos in enumerate(tokens):
262 | s = requests.session()
263 | s.verify = False
264 | run_result = RUN(infos, index).main()
265 | if not run_result: continue
266 | if send: send(f'{APP_NAME}挂机通知', send_msg + TIPS_HTML)
--------------------------------------------------------------------------------
/this.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: smallfawn 860562056
4 | @Date: 2024.06.09 13.27
5 | @Description: this官方商城小程序 签到
6 | ------------------------------------------
7 | 变量名this
8 | 变量值https://xcx.this.cn/api/ 域名下请求头Headers中authori-zation的值 去掉Bearer 多账号&或换行或新建同名变量
9 | [Script]
10 | http-response
11 |
12 | [MITM]
13 | hostname =
14 |
15 | ⚠️【免责声明】
16 | ------------------------------------------
17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
24 | */
25 |
26 | const $ = new Env("this官方商城");
27 | let ckName = `this`;
28 | let userCookie = checkEnv(
29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
30 | );
31 | const notify = $.isNode() ? require("./sendNotify") : "";
32 |
33 | !(async () => {
34 | console.log(
35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
36 | new Date().getTime() +
37 | new Date().getTimezoneOffset() * 60 * 1000 +
38 | 8 * 60 * 60 * 1000
39 | ).toLocaleString()} \n==================================================`
40 | );
41 | //console.log(userCookie)
42 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
43 | let index = 1;
44 | let strSplitor = "#";
45 |
46 | for (let user of userCookie) {
47 | $.log(`\n🚀 user:【${index}】 start work\n`);
48 | index++
49 | $.token = user
50 | $.ckStatus = true;
51 | await info()
52 | }
53 |
54 | await $.sendMsg($.logs.join("\n"));
55 | })()
56 | .catch((e) => console.log(e))
57 | .finally(() => $.done());
58 | async function info() {
59 | let data = JSON.stringify({
60 | "sign": 1
61 | });
62 |
63 | let config = {
64 | method: 'POST',
65 | url: 'https://xcx.this.cn/api/sign/user',
66 | headers: {
67 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
68 | 'Accept-Encoding': 'gzip,compress,br,deflate',
69 | 'Content-Type': 'application/json',
70 | 'charset': 'utf-8',
71 | 'form-type': 'routine',
72 | 'authori-zation': 'Bearer ' + $.token,
73 | 'Referer': 'https://servicewechat.com/wx1c228827dfa0de9e/13/page-frame.html'
74 | },
75 | data: data
76 | };
77 | let { data: result } = await Request(config)
78 | if (result?.status == 200) {
79 | $.log(`${result.data.nickname} 累计签到[${result.data.sign_num}]天 当前积分[${result.data.integral}]分`)
80 | if (result.data.is_day_sgin !== true) {
81 | $.log(`未签到 ===> 签到ing`)
82 | await signIn()
83 | } else {
84 | $.log(`已签到 ===> 跳过签到`)
85 | }
86 | } else {
87 | $.log(result.msg)
88 | }
89 | }
90 | async function signIn() {
91 | let data = JSON.stringify({});
92 |
93 | let config = {
94 | method: 'POST',
95 | url: 'https://xcx.this.cn/api/sign/integral',
96 | headers: {
97 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220089 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
98 | 'Accept-Encoding': 'gzip,compress,br,deflate',
99 | 'Content-Type': 'application/json',
100 | 'charset': 'utf-8',
101 | 'form-type': 'routine',
102 | 'authori-zation': 'Bearer ' + $.token,
103 | 'Referer': 'https://servicewechat.com/wx1c228827dfa0de9e/13/page-frame.html'
104 | },
105 | data: data
106 | };
107 | let { data: result } = await Request(config)
108 | if (result?.status == 200) {
109 | $.log(`签到成功:[${result.msg}]`)
110 | } else {
111 | $.log(result.msg)
112 | }
113 | }
114 |
115 |
116 | function checkEnv(userCookie) {
117 | const envSplitor = ["&", "\n"];
118 | //console.log(userCookie);
119 | let userList = userCookie
120 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
121 | .filter((n) => n);
122 | console.log(`共找到${userList.length}个账号`);
123 | return userList;
124 | }
125 | // prettier-ignore
126 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
127 |
128 | async function Request(options) {
129 | if ($.isNode()) {
130 | const axios = require("axios");
131 | Request = async (options) => {
132 | try {
133 | return await axios.request(options);
134 | } catch (error) {
135 | return error && error.error ? error.error : "请求失败";
136 | }
137 | };
138 | }
139 | if ($.isQuanX()) {
140 | Request = async (options) => {
141 | try {
142 | return await $task.fetch(options);
143 | } catch (error) {
144 | return error && error.error ? error.error : "请求失败";
145 | }
146 | };
147 | }
148 | return await Request(options);
149 | }
--------------------------------------------------------------------------------
/xdf.py:
--------------------------------------------------------------------------------
1 | # cron: 16 7 * * *
2 | # const $ = new Env("新东方任务查询");
3 | import requests
4 | import time
5 | import random
6 | result = []
7 | def send_request(activity_id):
8 | url = f"https://omc.koolearn.com/api/free-group/detail?_t=1700295545901&activityId={activity_id}"
9 | response = requests.get(url)
10 | if response.status_code == 200:
11 | data = response.json()
12 | dataInfo = data.get("data")
13 | if dataInfo != None:
14 | activity_id = data.get("data",{}).get("activityId")
15 | activity_name = data.get("data",{}).get("activityName")
16 | result.append({'activityId':activity_id,'activityName':activity_name})
17 | if data.get("code") == 0:
18 | with open("results.txt", "a") as file:
19 | file.write(f"activityId: {activity_id}, activityName: {activity_name}\n")
20 | print(f"Processed activityId: {activity_id}, activityName: {activity_name}")
21 | else:
22 | print(f"Request failed for activityId: {activity_id}, code: {data.get('msg')}")
23 | start = 1500
24 | end = 2500
25 | total_requests = end - start
26 | completed_requests = 0
27 |
28 | for activity_id in range(start, end):
29 | send_request(activity_id)
30 | completed_requests += 1
31 | progress = (completed_requests / total_requests) * 100
32 | print(f"Progress: {progress:.2f}%")
33 | # 生成一个3到5秒之间的随机浮点数
34 | random_time = random.uniform(1, 3)
35 | time.sleep(random_time) # 间隔2秒
36 | print('')
37 | print('统计列表:')
38 | # 打印结果
39 | for data in result:
40 | activity_id = data.get("activityId")
41 | activity_name = data.get("activityName")
42 | print(f'activityId: {activity_id}, activityName: {activity_name}')
43 | print("")
44 | print("获取结束!")
45 |
--------------------------------------------------------------------------------
/xhgj.js:
--------------------------------------------------------------------------------
1 | /*
2 | ------------------------------------------
3 | @Author: smallfawn
4 | @Date: 2024.06.08 13.21
5 | @Description: 小猴工具小程序
6 | ------------------------------------------
7 | 自己先签到一次 抓请求包https://h5.youzan.com/wscump/checkin/checkinV2.json 后面Url的checkinId和请求头Headers中extra-data里面sid的值
8 | #拼接 多账号&或换行或新建同名变量
9 | [Script]
10 | http-response
11 |
12 | [MITM]
13 | hostname =
14 |
15 | ⚠️【免责声明】
16 | ------------------------------------------
17 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。
18 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。
19 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。
20 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
21 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。
22 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。
23 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。
24 | */
25 |
26 | const $ = new Env("小猴工具小程序");
27 | let ckName = `Monkey_WX`;
28 | let userCookie = checkEnv(
29 | ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ""
30 | );
31 | const notify = $.isNode() ? require("./sendNotify") : "";
32 |
33 | !(async () => {
34 | console.log(
35 | `==================================================\n 脚本执行 - 北京时间(UTC+8): ${new Date(
36 | new Date().getTime() +
37 | new Date().getTimezoneOffset() * 60 * 1000 +
38 | 8 * 60 * 60 * 1000
39 | ).toLocaleString()} \n==================================================`
40 | );
41 | //console.log(userCookie)
42 | if (!userCookie?.length) return console.log(`没有找到CK哦`);
43 | let index = 0;
44 | let strSplitor = "#";
45 |
46 | for (let user of userCookie) {
47 | $.log(`\n🚀 user:【${index || ++index}】 start work\n`);
48 | $.checkInId = user.split(strSplitor)[0];
49 | $.sid = user.split(strSplitor)[1];
50 | await signIn();
51 | }
52 |
53 | await $.sendMsg($.logs.join("\n"));
54 | })()
55 | .catch((e) => console.log(e))
56 | .finally(() => $.done());
57 | async function signIn() {
58 |
59 | let config = {
60 | method: 'GET',
61 | url: 'https://h5.youzan.com/wscump/checkin/checkinV2.json?checkinId=' + $.checkInId + '&app_id=&kdt_id=&access_token=',
62 | headers: {
63 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 10; MI 8 Lite Build/QKQ1.190910.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220067 MMWEBSDK/20240404 MMWEBID/8150 MicroMessenger/8.0.49.2600(0x28003156) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android',
64 | 'Accept-Encoding': 'gzip,compress,br,deflate',
65 | 'charset': 'utf-8',
66 | 'content-type': 'application/json',
67 | 'extra-data': '{"is_weapp":1,"sid":"' + $.sid + '","version":"2.154.3.101","client":"weapp","bizEnv":"wsc","uuid":"","ftime":""}',
68 | 'referer': 'https://servicewechat.com/wx0451bbda59c220a8/95/page-frame.html'
69 | }
70 | };
71 | let { data: result } = await Request(config)
72 | result?.code == 0 ? $.log(`签到成功`) : $.log(`签到失败`); console.log(JSON.stringify(result));
73 |
74 | }
75 |
76 |
77 | function checkEnv(userCookie) {
78 | const envSplitor = ["&", "\n"];
79 | //console.log(userCookie);
80 | let userList = userCookie
81 | .split(envSplitor.find((o) => userCookie.includes(o)) || "&")
82 | .filter((n) => n);
83 | console.log(`共找到${userList.length}个账号`);
84 | return userList;
85 | }
86 | // prettier-ignore
87 | function Env(t, s) { return new (class { constructor(t, s) { this.name = t; this.logs = []; this.logSeparator = "\n"; this.startTime = new Date().getTime(); Object.assign(this, s); this.log("", `\ud83d\udd14${this.name},\u5f00\u59cb!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } queryStr(options) { return Object.entries(options).map(([key, value]) => `${key}=${typeof value === "object" ? JSON.stringify(value) : value}`).join("&") } getURLParams(url) { const params = {}; const queryString = url.split("?")[1]; if (queryString) { const paramPairs = queryString.split("&"); paramPairs.forEach((pair) => { const [key, value] = pair.split("="); params[key] = value }) } return params } isJSONString(str) { try { return JSON.parse(str) && typeof JSON.parse(str) === "object" } catch (e) { return false } } isJson(obj) { var isjson = typeof obj == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length; return isjson } async sendMsg(message) { if (!message) return; if (this.isNode()) { await notify.sendNotify(this.name, message) } else { this.msg(this.name, "", message) } } randomNumber(length) { const characters = "0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } randomString(length) { const characters = "abcdefghijklmnopqrstuvwxyz0123456789"; return Array.from({ length }, () => characters[Math.floor(Math.random() * characters.length)]).join("") } uuid() { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == "x" ? r : (r & 0x3) | 0x8; return v.toString(16) }) } time(t) { let s = { "M+": new Date().getMonth() + 1, "d+": new Date().getDate(), "H+": new Date().getHours(), "m+": new Date().getMinutes(), "s+": new Date().getSeconds(), "q+": Math.floor((new Date().getMonth() + 3) / 3), S: new Date().getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (new Date().getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in s) { new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? s[e] : ("00" + s[e]).substr(("" + s[e]).length))) } return t } msg(title = t, subtitle = "", body = "", options) { const formatOptions = (options) => { if (!options) { return options } else if (typeof options === "string") { if (this.isQuanX()) { return { "open-url": options } } else { return undefined } } else if (typeof options === "object" && (options["open-url"] || options["media-url"])) { if (this.isQuanX()) { return options } else { return undefined } } else { return undefined } }; if (!this.isMute) { if (this.isQuanX()) { $notify(title, subtitle, body, formatOptions(options)) } } let logs = ["", "==============📣系统通知📣=============="]; logs.push(title); subtitle ? logs.push(subtitle) : ""; body ? logs.push(body) : ""; console.log(logs.join("\n")); this.logs = this.logs.concat(logs) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, s) { const e = !this.isQuanX(); e ? this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name},\u9519\u8bef!`, t) } wait(t) { return new Promise((s) => setTimeout(s, t)) } done(t = {}) { const s = new Date().getTime(), e = (s - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name},\u7ed3\u675f!\ud83d\udd5b ${e}\u79d2`); this.log(); if (this.isNode()) { process.exit(1) } if (this.isQuanX()) { $done(t) } } })(t, s) }
88 |
89 | async function Request(options) {
90 | if ($.isNode()) {
91 | const axios = require("axios");
92 | Request = async (options) => {
93 | try {
94 | return await axios.request(options);
95 | } catch (error) {
96 | throw error && error.error ? error.error : "请求失败";
97 | }
98 | };
99 | }
100 | if ($.isQuanX()) {
101 | Request = async (options) => {
102 | try {
103 | return await $task.fetch(options);
104 | } catch (error) {
105 | throw error && error.error ? error.error : "请求失败";
106 | }
107 | };
108 | }
109 | return await Request(options);
110 | }
--------------------------------------------------------------------------------
/xhxy.py:
--------------------------------------------------------------------------------
1 | '''
2 | 复制微信打开:https://mx.qrurl.net/s/24211Mky3iJ
3 | 一天一次
4 | 每日任务/签到/学习时长增加
5 | 积分兑换实物卡券
6 | 变量名:xhxy
7 | 填入token,多账号换行或&
8 | 自行抓包token
9 | 自动抓包软群文件有
10 | # cron: 0 7,21 * * *
11 | # const $ = new Env("星火学院");
12 | '''
13 | project = 'fireAcademy'
14 | import lzma, base64
15 | exec(lzma.decompress(base64.b64decode('/Td6WFoAAATm1rRGAgAhARYAAAB0L+Wj4APbASldADSbSme4Ujxz98E0ClwvVjo94gxrJSFdUXCaQNLKTdOsYdLothMkppmNAscozSJk4tdIc96jCFo3keWoy3EcDTbT1ZSwlKaqPKcVyS4no4oaysCKPQ79xk32HCrwl40UCbK6RnfKil4L4YOYIEUuIcpQoUlOvw1+PX1qdn4C/HrQiwXK31ZFmFqXZAFi3R/ZzruxVdnXMRAHX+2zWVgBxbUL5haj4QC0K/kptlSQDkhXGaUH3e/N6KO+QpKWAhOVw9gDR0jAR0c338RXd2AO4D9scmiI5JV9eQi5/NMhtfW5GlluRWqpsJ71rlMDBjggQVFGtkaJvy9jjfa214dkFEkfU4qdKs8ONZKMTdreCOmVHwIV+XydAmlEfhA0yH5kx/50x5hc2wtXUAAAAABCT7Iye8/dnwABxQLcBwAAHhh9kbHEZ/sCAAAAAARZWg==')))
--------------------------------------------------------------------------------
/yl.py:
--------------------------------------------------------------------------------
1 | # !/usr/bin/python3
2 | # -- coding: utf-8 --
3 | # (包含:甄稀冰淇淋,金典SATINE、活力伊利)
4 | # cron "5 9,17 * * *" script-path=xxx.py,tag=匹配cron用
5 | # const $ = new Env('伊利系列小程序')
6 | import json
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 | requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
15 |
16 | IS_DEV = False
17 | if os.path.isfile('DEV_ENV.py'):
18 | import DEV_ENV
19 |
20 | IS_DEV = True
21 | if os.path.isfile('notify.py'):
22 | from notify import send
23 |
24 | print("加载通知服务成功!")
25 | else:
26 | print("加载通知服务失败!")
27 | send_msg = ''
28 | one_msg = ''
29 |
30 |
31 | def Log(cont=''):
32 | global send_msg, one_msg
33 | print(cont)
34 | if cont:
35 | one_msg += f'{cont}\n'
36 | send_msg += f'{cont}\n'
37 |
38 |
39 | class RUN:
40 | def __init__(self, info, index):
41 | global one_msg
42 | one_msg = ''
43 | split_info = info.split('@')
44 | self.access_token = split_info[0]
45 | len_split_info = len(split_info)
46 | last_info = split_info[len_split_info - 1]
47 | self.send_UID = None
48 | if len_split_info > 0 and "UID_" in last_info:
49 | print('检测到设置了UID')
50 | print(last_info)
51 | self.send_UID = last_info
52 | self.index = index + 1
53 | # print(self.access_token)
54 | self.UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x6309080f) XWEB/8555'
55 | # if ENV_NAME == 'YL_ZXBQL':
56 | # appid = "wx06af0ef532292cd3"
57 | # scene = "1037"
58 | # scene = "1037"
59 | self.headers = {
60 | "Host": "msmarket.msx.digitalyili.com",
61 | "register-source": "",
62 | "access-token": self.access_token,
63 | "forward-appid": "wx06af0ef532292cd3",
64 | "source-type": "",
65 | "Content-Type": "application/json",
66 | "atv-page": "",
67 | "scene": "1037",
68 | "xweb_xhr": "1",
69 | "User-Agent": self.UA,
70 | "Accept": "*/*",
71 | "tenant-id": "1718857849685876737",
72 | "Sec-Fetch-Site": "cross-site",
73 | "Sec-Fetch-Mode": "cors",
74 | "Sec-Fetch-Dest": "empty",
75 | "Referer": "https://servicewechat.com/wxf32616183fb4511e/564/page-frame.html",
76 | "Accept-Language": "zh-CN,zh;q=0.9"
77 | }
78 | self.s = requests.session()
79 | self.s.verify = False
80 | self.baseUrl = 'https://msmarket.msx.digitalyili.com/gateway/api/member/'
81 |
82 |
83 | def make_request(self, url, method='post', headers={}, data={}, params=None):
84 | if headers == {}:
85 | headers = self.headers
86 | try:
87 | if method.lower() == 'get':
88 | response = self.s.get(url, headers=headers, verify=False, params=params)
89 | elif method.lower() == 'post':
90 | response = self.s.post(url, headers=headers, json=data, params=params, verify=False)
91 | else:
92 | raise ValueError("不支持的请求方法❌: " + method)
93 | return response.json()
94 | except requests.exceptions.RequestException as e:
95 | print("请求异常❌:", e)
96 | except ValueError as e:
97 | print("值错误或不支持的请求方法❌:", e)
98 | except Exception as e:
99 | print("发生了未知错误❌:", e)
100 |
101 | def get_user_info(self):
102 | act_name = '获取用户信息'
103 | Log(f'\n====== {act_name} ======')
104 | url = f"https://msmarket.msx.digitalyili.com/gateway/api/auth/account/user/info"
105 | response = self.make_request(url,method='get')
106 | if response.get('status', False):
107 | print(f'{act_name}成功!✅')
108 | site = {'1520': "活力伊利", '1577': "活力伊利", '1160': '金典SATINE', '1068': '甄稀冰淇淋','1130': '金典有机生活+'}
109 | registerSource = response.get('data', {}).get('registerSource', None)
110 | Log(f'当前Source:【{registerSource}】')
111 | siteName = site.get(registerSource,False)
112 | if not siteName:
113 | Log(f'当前小程序名称识别失败')
114 | Log(f'当前token所属小程序:【{siteName}】')
115 | nickName = response.get('data')['nickName']
116 | mobile = response.get('data')['mobile']
117 | mobile = mobile[:3] + "*" * 4 + mobile[7:]
118 | Log(f">用户名:{nickName}\n>手机号:{mobile}")
119 | return True
120 | elif not response:
121 | print(f">账号 {self.index}: ck过期 请重新抓取 access-token")
122 | return False
123 | else:
124 | print(response)
125 | return False
126 |
127 | def get_Point(self,END=False):
128 | act_name = '获取积分信息'
129 | if not END:Log(f'\n====== {act_name} ======')
130 | url = f"{self.baseUrl}point"
131 | response = self.make_request(url,method='get')
132 | if response.get('status', False):
133 | point = response.get('data')
134 | print(f'{act_name}成功!✅')
135 | if END:
136 | Log(f'执行后积分:【{point}】')
137 | else:
138 | Log(f'当前积分:【{point}】')
139 | return True
140 | else:
141 | print(response)
142 | return False
143 |
144 | def daily_sign(self):
145 | act_name = '签到'
146 | Log(f'\n====== {act_name} ======')
147 | url = f"{self.baseUrl}daily/sign"
148 | response = self.make_request(url)
149 | if response.get('status', False):
150 | data = response.get('data',{})
151 | dailySign = data.get('dailySign', None)
152 | if dailySign != None:
153 | point = dailySign.get('bonusPoint', '')
154 | print(f'{act_name}成功!✅')
155 | Log(f'获得积分:【{point}】')
156 | return True
157 | else:
158 | print(response)
159 | return False
160 |
161 | def get_sign_status(self):
162 | act_name = '获取签到信息'
163 | Log(f'\n====== {act_name} ======')
164 | url = f"{self.baseUrl}sign/status"
165 | response = self.make_request(url,method='get')
166 | if response.get('status', False):
167 | data = response.get('data',{})
168 | signed = data.get('signed','')
169 | signedDays = data.get('signedDays','')
170 | monthSignDays = data.get('monthSignDays','')
171 | monthDays = data.get('monthDays','')
172 | weekSignDays = data.get('weekSignDays','')
173 | print(f'{act_name}成功!✅')
174 | Log(f'今日:【{"已签到" if signed else "未签到"}】')
175 | print(f'累计签到:【{signedDays}】天')
176 | print(f'周签:【{weekSignDays}】天')
177 | print(f'月签:【{monthSignDays}/{monthDays}】天')
178 | if not signed:
179 | self.daily_sign()
180 | return True
181 | else:
182 | print(response)
183 | return False
184 |
185 |
186 | def main(self):
187 | Log(f"\n开始执行第{self.index}个账号--------------->>>>>")
188 |
189 | if self.get_user_info():
190 | random_delay()
191 | self.get_Point()
192 | random_delay()
193 | self.get_sign_status()
194 | random_delay()
195 | self.get_Point(True)
196 |
197 |
198 | self.sendMsg()
199 | return True
200 | else:
201 | self.sendMsg()
202 | return False
203 |
204 | def sendMsg(self):
205 | if self.send_UID:
206 | push_res = CHERWIN_TOOLS.wxpusher(self.send_UID, one_msg, APP_NAME)
207 | print(push_res)
208 |
209 |
210 | def random_delay(min_delay=1, max_delay=5):
211 | """
212 | 在min_delay和max_delay之间产生一个随机的延时时间,然后暂停执行。
213 | 参数:
214 | min_delay (int/float): 最小延时时间(秒)
215 | max_delay (int/float): 最大延时时间(秒)
216 | """
217 | delay = random.uniform(min_delay, max_delay)
218 | print(f">本次随机延迟:【{delay:.2f}】 秒.....")
219 | time.sleep(delay)
220 |
221 |
222 | def down_file(filename, file_url):
223 | print(f'开始下载:{filename},下载地址:{file_url}')
224 | try:
225 | response = requests.get(file_url, verify=False, timeout=10)
226 | response.raise_for_status()
227 | with open(filename + '.tmp', 'wb') as f:
228 | f.write(response.content)
229 | print(f'【{filename}】下载完成!')
230 |
231 | # 检查临时文件是否存在
232 | temp_filename = filename + '.tmp'
233 | if os.path.exists(temp_filename):
234 | # 删除原有文件
235 | if os.path.exists(filename):
236 | os.remove(filename)
237 | # 重命名临时文件
238 | os.rename(temp_filename, filename)
239 | print(f'【{filename}】重命名成功!')
240 | return True
241 | else:
242 | print(f'【{filename}】临时文件不存在!')
243 | return False
244 | except Exception as e:
245 | print(f'【{filename}】下载失败:{str(e)}')
246 | return False
247 |
248 |
249 | def import_Tools():
250 | global CHERWIN_TOOLS, ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode
251 | import CHERWIN_TOOLS
252 | ENV, APP_INFO, TIPS, TIPS_HTML, AuthorCode = CHERWIN_TOOLS.main(APP_NAME, local_script_name, ENV_NAME,local_version)
253 |
254 |
255 | if __name__ == '__main__':
256 | APP_NAME = '伊利系列小程序'
257 | ENV_NAME = 'yl'
258 | CK_URL = 'msmarket.msx.digitalyili.com请求头'
259 | CK_NAME = 'access-token'
260 | CK_EX = 'wTUhu5IlL9uQDRelKgMRbao2bxii+O8+4FffOnxxxxxxx'
261 | print(f'''
262 | ✨✨✨ {APP_NAME}脚本✨✨✨
263 | ✨ (包含:甄稀冰淇淋,金典SATINE、活力伊利)
264 | ✨ 功能:
265 | 积分签到
266 | ✨ 抓包步骤:
267 | 打开{APP_NAME}
268 | 授权登陆
269 | 打开抓包工具
270 | 找{CK_URL}{CK_NAME}
271 | 参数示例:{CK_EX}
272 | ✨ ✨✨wxpusher一对一推送功能,
273 | ✨需要定义变量export WXPUSHER=wxpusher的app_token,不设置则不启用wxpusher一对一推送
274 | ✨需要在{ENV_NAME}变量最后添加@wxpusher的UID
275 | ✨ 设置青龙变量:
276 | export {ENV_NAME}='{CK_NAME}参数值'多账号#或&分割
277 | export SCRIPT_UPDATE = 'False' 关闭脚本自动更新,默认开启
278 | ✨ ✨ 注意:抓完CK没事儿别打开小程序,重新打开小程序请重新抓包
279 | ✨ 推荐cron:5 9 * * *
280 | ✨✨✨ @Author CHERWIN✨✨✨
281 | ''')
282 | local_script_name = os.path.basename(__file__)
283 | local_version = '2024.06.05'
284 | if IS_DEV:
285 | import_Tools()
286 | else:
287 | if os.path.isfile('CHERWIN_TOOLS.py'):
288 | import_Tools()
289 | else:
290 | if down_file('CHERWIN_TOOLS.py', 'https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py'):
291 | print('脚本依赖下载完成请重新运行脚本')
292 | import_Tools()
293 | else:
294 | print(
295 | '脚本依赖下载失败,请到https://github.com/CHERWING/CHERWIN_SCRIPTS/raw/main/CHERWIN_TOOLS.py下载最新版本依赖')
296 | exit()
297 | print(TIPS)
298 | token = ''
299 | token = ENV if ENV else token
300 | if not token:
301 | print(f"未填写{ENV_NAME}变量\n青龙可在环境变量设置 {ENV_NAME} 或者在本脚本文件上方将{CK_NAME}填入token =''")
302 | exit()
303 | tokens = CHERWIN_TOOLS.ENV_SPLIT(token)
304 | # print(tokens)
305 | if len(tokens) > 0:
306 | print(f"\n>>>>>>>>>>共获取到{len(tokens)}个账号<<<<<<<<<<")
307 | access_token = []
308 | for index, infos in enumerate(tokens):
309 | run_result = RUN(infos, index).main()
310 | if not run_result: continue
311 | if send: send(f'{APP_NAME}挂机通知', send_msg + TIPS_HTML)
--------------------------------------------------------------------------------