├── README.md
├── utils.js
├── 上观新闻.py
├── 云闪付签到.js
├── 伊利会员福利社.js
├── 农好优.py
├── 创娱联盟签到.py
├── 口味王.js
├── 喜马拉雅签到.py
├── 喜马拉雅转盘抽奖.py
├── 密盒星球.py
├── 小阅阅.py
├── 建行生活奋斗季cc豆.py
├── 拼多多果园.js
├── 歌画东阳.py
├── 火锅视频.py
├── 熊猫脑洞小说.js
├── 熊猫赚.js
├── 申工社.js
├── 电信营业厅.js
├── 白嫖机场.py
├── 美团小团币游戏中心.py
├── 读特.js
├── 钢蹦阅读.py
├── 阿里云盘签到.py
└── 饿了么.js
/README.md:
--------------------------------------------------------------------------------
1 | # QL
2 | 自己搜集的青龙脚本,方便日常维护
3 |
--------------------------------------------------------------------------------
/utils.js:
--------------------------------------------------------------------------------
1 | /*
2 | * 感谢yml大佬js封装库 当前版本V0.0.5
3 | * 22/11/21 随机生成GUID
4 | * 22/11/23 随机生成MAC网络地址
5 | * 22/11/28 随机一言 自建和其他 gitee版和github版 优先gitee 速度快
6 | */
7 | let utilsVersion = "0.0.5"
8 | module.exports = {
9 | version: version,//版本
10 | txt_api: txt_api,//获取随机文案 一言api // "a"动画, "b"漫画, "c"游戏, "d"文学, "e"原创, "f"来自网络, "g"其他, "h"影视, "i"诗词, "j"网易云, "k"哲学 ,"l"抖机灵
11 | txt_api_self_gitee: txt_api_self_gitee,//获取随机文案 gitee版本 自建 // 古诗, 动画, 心情 ······
12 | txt_api_self_github: txt_api_self_github,//获取随机文案 github版本 自建 // 古诗, 动画, 心情 ······
13 | randomMac: randomMac,//随机MAC网络地址
14 | guid: guid,//根据时间戳生成GUID 8-4-4-4-12
15 | phone_num: phone_num,//手机号中间遮挡
16 | randomszdx: randomszdx,//随机 数字 + 大写字母 生成
17 | randomszxx: randomszxx,//随机 数字 + 小写字母 生成
18 | randomInt: randomInt,//随机整数生成
19 | ts13: ts13,//时间戳 13位
20 | ts10: ts10,//时间戳 10位
21 | tmtoDate: tmtoDate,//时间戳 转 日期
22 | local_hours: local_hours,//获取当前小时数
23 | local_minutes: local_minutes,//获取当前分钟数
24 | local_year: local_year,//获取当前年份 2022
25 | local_month: local_month,//获取当前月份(数字) 5月
26 | local_month_two: local_month_two,//获取当前月份(数字) 05月 补零
27 | local_day: local_day,//获取当前天数(数字) 5日
28 | local_day_two: local_day_two,//获取当前天数 05日 补零
29 | RSA_Encrypt: RSA_Encrypt,//RSA公钥加密 传参(数据,key) , 返回 base64格式
30 | base64_encode: base64_encode,//base64 编码
31 | base64_decode: base64_decode,//base64 解码
32 | SHA1_Encrypt: SHA1_Encrypt,//SHA1加密
33 | SHA256_Encrypt: SHA256_Encrypt,//SHA256加密
34 | MD5_Encrypt: MD5_Encrypt,//md5 加密
35 | };
36 |
37 | /**
38 | * 版本号
39 | */
40 | function version() {
41 | return utilsVersion;
42 | }
43 |
44 | /**
45 | * 获取随机文案 一言api
46 | */
47 | function txt_api(i) {
48 | return new Promise((resolve) => {
49 | try {
50 | var request = require('request');
51 | let options = {
52 | method: 'GET',
53 | url: 'https://v1.hitokoto.cn/',
54 | qs: { c: i },
55 | };
56 | request(options, function (error, response, body) {
57 | if (error) throw new Error(error);
58 | //console.log(body);
59 | let result = JSON.parse(body);
60 | let txt = result.hitokoto
61 | //console.log(result.id);
62 | resolve(txt)
63 | return txt
64 | });
65 | } catch (error) {
66 | console.log(error);
67 | }
68 | })
69 | }
70 |
71 | /**
72 | * 获取随机文案 自建 gitee仓库
73 | */
74 | function txt_api_self_gitee(type) {
75 | return new Promise((resolve) => {
76 | try {
77 | var request = require('request');
78 | let options = {
79 | method: 'GET',
80 | url: 'https://gitee.com/smallfawn/api/raw/master/txt.txt',
81 | };
82 | request(options, function (error, response, body) {
83 | if (error) throw new Error(error);
84 | let txtbody = body
85 | //console.log(body);
86 | let txtv = txtbody.match(type)
87 | //console.log(txtv.input.slice(3, 14));
88 | let lineArr = txtv.input.slice(3, 14)//截取行段文本
89 | let lineStar = lineArr.slice(1, 5)//首行
90 | let lineEnd = lineArr.slice(6, 10)//尾行
91 | let randomline = randomInt(Number(lineStar) - 1, Number(lineEnd) - 1)//随机行 因为JS的索引号是0,和行号不一致所以就-1 检测行数比实际行数大1
92 | let txt = txtbody.split("\n")[randomline]
93 | //console.log(lineArr);
94 | //console.log(lineStar, lineEnd);
95 | //console.log(Number(lineStar) -1, Number(lineEnd) -1);
96 | //console.log(randomline);
97 | //console.log(txt);
98 | resolve(txt)
99 | return txt
100 | });
101 | } catch (error) {
102 | console.log(error);
103 | }
104 | })
105 | }
106 |
107 | /**
108 | * 获取随机文案 自建 github仓库
109 | */
110 | function txt_api_self_github(type) {
111 | return new Promise((resolve) => {
112 | function txtline(type) {
113 | switch (type) {
114 | case "古诗": //古诗
115 | return [2, 5]
116 | case "动画": //动画
117 | return [3, 8]
118 | case "心情": //心情
119 | return [3, 8]
120 | }
121 | }
122 | try {
123 | var request = require('request');
124 | let options = {
125 | method: 'GET',
126 | url: 'https://ghproxy.com/https://raw.githubusercontent.com/smallfawn/api/main/txt.txt',//https://ghproxy.com/https://raw.githubusercontent.com/smallfawn/api/main/txt.txt
127 | };
128 | request(options, function (error, response, body) {
129 | if (error) throw new Error(error);
130 | let txtbody = body
131 | //console.log(body);
132 | let line = txtline(type)
133 | let randomline = randomInt(line[0] - 1, line[1] - 1)//随机行 因为JS的索引号是0,和行号不一致所以就-1 检测行数比实际行数大1
134 | //console.log(txt.split("\n")[randomline])
135 | let txt = txtbody.split("\n")[randomline]
136 | //console.log(txt);
137 | resolve(txt)
138 | return txt
139 | });
140 | } catch (error) {
141 | console.log(error);
142 | }
143 | })
144 | }
145 |
146 | /**
147 | * 随机MAC网络地址
148 | */
149 | function randomMac() {
150 | return "XX:XX:XX:XX:XX:XX".replace(/X/g, function () {
151 | return "0123456789ABCDEF".charAt(Math.floor(Math.random() * 16))
152 | });
153 | }
154 |
155 | /**
156 | * 随机UUID(由时间戳生成) 8-4-4-4-12
157 | */
158 | function guid() {
159 | function S4() {
160 | return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
161 | }
162 | return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
163 | }
164 |
165 | /**
166 | * 手机号中间遮挡
167 | */
168 | function phone_num(phone_num) {
169 | if (phone_num.length == 11) {
170 | let data = phone_num.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2");
171 | return data;
172 | } else {
173 | return phone_num;
174 | }
175 | }
176 |
177 | /**
178 | * 随机 数字 + 大写字母 生成
179 | */
180 | function randomszdx(e) {
181 | e = e || 32;
182 | var t = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890",
183 | a = t.length,
184 | n = "";
185 |
186 | for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));
187 | return n;
188 | }
189 |
190 | /**
191 | * 随机 数字 + 小写字母 生成
192 | */
193 | function randomszxx(e) {
194 | e = e || 32;
195 | var t = "qwertyuioplkjhgfdsazxcvbnm1234567890",
196 | a = t.length,
197 | n = "";
198 |
199 | for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a));
200 | return n;
201 | }
202 |
203 | /**
204 | * 随机整数生成
205 | */
206 | function randomInt(min, max) {
207 | return Math.round(Math.random() * (max - min) + min);
208 | }
209 |
210 | /**
211 | * 时间戳 13位
212 | */
213 | function ts13() {
214 | return Math.round(new Date().getTime()).toString();
215 | }
216 |
217 | /**
218 | * 时间戳 10位
219 | */
220 | function ts10() {
221 | return Math.round(new Date().getTime() / 1000).toString();
222 | }
223 |
224 | /**
225 | * 时间戳 转 日期
226 | */
227 | function tmtoDate(time = +new Date()) {
228 | if (time.toString().length == 13) {
229 | var date = new Date(time + 8 * 3600 * 1000);
230 | return date.toJSON().substr(0, 19).replace("T", " ");
231 | } else if (time.toString().length == 10) {
232 | time = time * 1000;
233 | var date = new Date(time + 8 * 3600 * 1000);
234 | return date.toJSON().substr(0, 19).replace("T", " ");
235 | }
236 | }
237 |
238 | /**
239 | * 获取当前小时数
240 | */
241 | function local_hours() {
242 | let myDate = new Date();
243 | let h = myDate.getHours();
244 | return h;
245 | }
246 |
247 | /**
248 | * 获取当前分钟数
249 | */
250 | function local_minutes() {
251 | let myDate = new Date();
252 | let m = myDate.getMinutes();
253 | return m;
254 | }
255 |
256 | /**
257 | * 获取当前年份 2022
258 | */
259 | function local_year() {
260 | let myDate = new Date();
261 | y = myDate.getFullYear();
262 | return y;
263 | }
264 |
265 | /**
266 | * 获取当前月份(数字) 5月
267 | */
268 | function local_month() {
269 | let myDate = new Date();
270 | let m = myDate.getMonth();
271 | return m;
272 | }
273 |
274 | /**
275 | * 获取当前月份(数字) 05月 补零
276 | */
277 | function local_month_two() {
278 | let myDate = new Date();
279 | let m = myDate.getMonth();
280 | if (m.toString().length == 1) {
281 | m = `0${m}`;
282 | }
283 | return m;
284 | }
285 |
286 | /**
287 | * 获取当前天数(数字) 5日
288 | */
289 | function local_day() {
290 | let myDate = new Date();
291 | let d = myDate.getDate();
292 | return d;
293 | }
294 |
295 | /**
296 | * 获取当前天数 05日 补零
297 | */
298 | function local_day_two() {
299 | let myDate = new Date();
300 | let d = myDate.getDate();
301 | if (d.toString().length == 1) {
302 | d = `0${d}`;
303 | }
304 | return d;
305 | }
306 |
307 | /**
308 | * RSA公钥加密 传参(数据,key) , 返回 base64格式
309 | */
310 | function RSA_Encrypt(msg, key) {
311 | global.navigator = { appName: 'nodejs' }; // fake the navigator object
312 | global.window = {}; // fake the window object
313 | const JSEncrypt = require('jsencrypt')
314 | let enc = new JSEncrypt();
315 | enc.setPublicKey(key)
316 | return enc.encrypt(msg).toString();
317 | }
318 |
319 | /**
320 | * base64 编码
321 | */
322 | function base64_encode(data) {
323 | let a = Buffer.from(data, 'utf-8').toString('base64')
324 | return a
325 | }
326 |
327 | /**
328 | * base64 解码
329 | */
330 | function base64_decode(data) {
331 | let a = Buffer.from(data, 'base64').toString('utf8')
332 | return a
333 | }
334 |
335 | /**
336 | * SHA1 加密
337 | */
338 | function SHA1_Encrypt(s) {
339 | var data = new Uint8Array(encodeUTF8(s))
340 | var i, j, t;
341 | var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2);
342 | s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
343 | for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2);
344 | s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
345 | s[l - 1] = data.length << 3;
346 | var w = [], f = [
347 | function () { return m[1] & m[2] | ~m[1] & m[3]; },
348 | function () { return m[1] ^ m[2] ^ m[3]; },
349 | function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; },
350 | function () { return m[1] ^ m[2] ^ m[3]; }
351 | ], rol = function (n, c) { return n << c | n >>> (32 - c); },
352 | k = [1518500249, 1859775393, -1894007588, -899497514],
353 | m = [1732584193, -271733879, null, null, -1009589776];
354 | m[2] = ~m[0], m[3] = ~m[1];
355 | for (i = 0; i < s.length; i += 16) {
356 | var o = m.slice(0);
357 | for (j = 0; j < 80; j++)
358 | w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
359 | t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
360 | m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
361 | for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0;
362 | };
363 | t = new DataView(new Uint32Array(m).buffer);
364 | for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2);
365 |
366 | var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
367 | return (e < 16 ? "0" : "") + e.toString(16);
368 | }).join("");
369 | return hex;
370 | }
371 | function encodeUTF8(s) {
372 | var i, r = [], c, x;
373 | for (i = 0; i < s.length; i++)
374 | if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
375 | else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
376 | else {
377 | if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
378 | c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
379 | r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
380 | else r.push(0xE0 + (c >> 12 & 0xF));
381 | r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
382 | };
383 | return r;
384 | }
385 |
386 | /**
387 | * SHA256 加密
388 | */
389 | function SHA256_Encrypt(data) {
390 | sha256_init();
391 | sha256_update(data, data.length);
392 | sha256_final();
393 | return sha256_encode_hex();
394 | }
395 | /* SHA256 logical functions */ function rotateRight(n, x) { return (x >>> n) | (x << (32 - n)); } function choice(x, y, z) { return (x & y) ^ (~x & z); } function majority(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); } function sha256_Sigma0(x) { return rotateRight(2, x) ^ rotateRight(13, x) ^ rotateRight(22, x); } function sha256_Sigma1(x) { return rotateRight(6, x) ^ rotateRight(11, x) ^ rotateRight(25, x); } function sha256_sigma0(x) { return rotateRight(7, x) ^ rotateRight(18, x) ^ (x >>> 3); } function sha256_sigma1(x) { return rotateRight(17, x) ^ rotateRight(19, x) ^ (x >>> 10); } function sha256_expand(W, j) { return (W[j & 0x0f] += sha256_sigma1(W[(j + 14) & 0x0f]) + W[(j + 9) & 0x0f] + sha256_sigma0(W[(j + 1) & 0x0f])); } /* Hash constant words K: */ var K256 = new Array(0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2); /* global arrays */ var ihash, count, buffer; var sha256_hex_digits = "0123456789abcdef"; /* Add 32-bit integers with 16-bit operations (bug in some JS-interpreters: overflow) */ function safe_add(x, y) { var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xffff); } /* Initialise the SHA256 computation */ function sha256_init() { ihash = new Array(8); count = new Array(2); buffer = new Array(64); count[0] = count[1] = 0; ihash[0] = 0x6a09e667; ihash[1] = 0xbb67ae85; ihash[2] = 0x3c6ef372; ihash[3] = 0xa54ff53a; ihash[4] = 0x510e527f; ihash[5] = 0x9b05688c; ihash[6] = 0x1f83d9ab; ihash[7] = 0x5be0cd19; } /* Transform a 512-bit message block */ function sha256_transform() { var a, b, c, d, e, f, g, h, T1, T2; var W = new Array(16); /* Initialize registers with the previous intermediate value */ a = ihash[0]; b = ihash[1]; c = ihash[2]; d = ihash[3]; e = ihash[4]; f = ihash[5]; g = ihash[6]; h = ihash[7]; /* make 32-bit words */ for (var i = 0; i < 16; i++) W[i] = buffer[(i << 2) + 3] | (buffer[(i << 2) + 2] << 8) | (buffer[(i << 2) + 1] << 16) | (buffer[i << 2] << 24); for (var j = 0; j < 64; j++) { T1 = h + sha256_Sigma1(e) + choice(e, f, g) + K256[j]; if (j < 16) T1 += W[j]; else T1 += sha256_expand(W, j); T2 = sha256_Sigma0(a) + majority(a, b, c); h = g; g = f; f = e; e = safe_add(d, T1); d = c; c = b; b = a; a = safe_add(T1, T2); } /* Compute the current intermediate hash value */ ihash[0] += a; ihash[1] += b; ihash[2] += c; ihash[3] += d; ihash[4] += e; ihash[5] += f; ihash[6] += g; ihash[7] += h; } /* Read the next chunk of data and update the SHA256 computation */ function sha256_update(data, inputLen) { var i, index, curpos = 0; /* Compute number of bytes mod 64 */ index = (count[0] >> 3) & 0x3f; var remainder = inputLen & 0x3f; /* Update number of bits */ if ((count[0] += inputLen << 3) < inputLen << 3) count[1]++; count[1] += inputLen >> 29; /* Transform as many times as possible */ for (i = 0; i + 63 < inputLen; i += 64) { for (var j = index; j < 64; j++) buffer[j] = data.charCodeAt(curpos++); sha256_transform(); index = 0; } /* Buffer remaining input */ for (var j = 0; j < remainder; j++) buffer[j] = data.charCodeAt(curpos++); } /* Finish the computation by operations such as padding */ function sha256_final() { var index = (count[0] >> 3) & 0x3f; buffer[index++] = 0x80; if (index <= 56) { for (var i = index; i < 56; i++) buffer[i] = 0; } else { for (var i = index; i < 64; i++) buffer[i] = 0; sha256_transform(); for (var i = 0; i < 56; i++) buffer[i] = 0; } buffer[56] = (count[1] >>> 24) & 0xff; buffer[57] = (count[1] >>> 16) & 0xff; buffer[58] = (count[1] >>> 8) & 0xff; buffer[59] = count[1] & 0xff; buffer[60] = (count[0] >>> 24) & 0xff; buffer[61] = (count[0] >>> 16) & 0xff; buffer[62] = (count[0] >>> 8) & 0xff; buffer[63] = count[0] & 0xff; sha256_transform(); } /* Split the internal hash values into an array of bytes */ function sha256_encode_bytes() { var j = 0; var output = new Array(32); for (var i = 0; i < 8; i++) { output[j++] = (ihash[i] >>> 24) & 0xff; output[j++] = (ihash[i] >>> 16) & 0xff; output[j++] = (ihash[i] >>> 8) & 0xff; output[j++] = ihash[i] & 0xff; } return output; } /* Get the internal hash as a hex string */ function sha256_encode_hex() { var output = new String(); for (var i = 0; i < 8; i++) { for (var j = 28; j >= 0; j -= 4) output += sha256_hex_digits.charAt((ihash[i] >>> j) & 0x0f); } return output; }
396 |
397 | /**
398 | * md5 加密
399 | */
400 | function MD5_Encrypt(a) { function b(a, b) { return (a << b) | (a >>> (32 - b)); } function c(a, b) { var c, d, e, f, g; return ((e = 2147483648 & a), (f = 2147483648 & b), (c = 1073741824 & a), (d = 1073741824 & b), (g = (1073741823 & a) + (1073741823 & b)), c & d ? 2147483648 ^ g ^ e ^ f : c | d ? 1073741824 & g ? 3221225472 ^ g ^ e ^ f : 1073741824 ^ g ^ e ^ f : g ^ e ^ f); } function d(a, b, c) { return (a & b) | (~a & c); } function e(a, b, c) { return (a & c) | (b & ~c); } function f(a, b, c) { return a ^ b ^ c; } function g(a, b, c) { return b ^ (a | ~c); } function h(a, e, f, g, h, i, j) { return (a = c(a, c(c(d(e, f, g), h), j))), c(b(a, i), e); } function i(a, d, f, g, h, i, j) { return (a = c(a, c(c(e(d, f, g), h), j))), c(b(a, i), d); } function j(a, d, e, g, h, i, j) { return (a = c(a, c(c(f(d, e, g), h), j))), c(b(a, i), d); } function k(a, d, e, f, h, i, j) { return (a = c(a, c(c(g(d, e, f), h), j))), c(b(a, i), d); } function l(a) { for (var b, c = a.length, d = c + 8, e = (d - (d % 64)) / 64, f = 16 * (e + 1), g = new Array(f - 1), h = 0, i = 0; c > i;) (b = (i - (i % 4)) / 4), (h = (i % 4) * 8), (g[b] = g[b] | (a.charCodeAt(i) << h)), i++; return ((b = (i - (i % 4)) / 4), (h = (i % 4) * 8), (g[b] = g[b] | (128 << h)), (g[f - 2] = c << 3), (g[f - 1] = c >>> 29), g); } function m(a) { var b, c, d = "", e = ""; for (c = 0; 3 >= c; c++) (b = (a >>> (8 * c)) & 255), (e = "0" + b.toString(16)), (d += e.substr(e.length - 2, 2)); return d; } function n(a) { a = a.replace(/\r\n/g, "\n"); for (var b = "", c = 0; c < a.length; c++) { var d = a.charCodeAt(c); 128 > d ? (b += String.fromCharCode(d)) : d > 127 && 2048 > d ? ((b += String.fromCharCode((d >> 6) | 192)), (b += String.fromCharCode((63 & d) | 128))) : ((b += String.fromCharCode((d >> 12) | 224)), (b += String.fromCharCode(((d >> 6) & 63) | 128)), (b += String.fromCharCode((63 & d) | 128))); } return b; } var o, p, q, r, s, t, u, v, w, x = [], y = 7, z = 12, A = 17, B = 22, C = 5, D = 9, E = 14, F = 20, G = 4, H = 11, I = 16, J = 23, K = 6, L = 10, M = 15, N = 21; for (a = n(a), x = l(a), t = 1732584193, u = 4023233417, v = 2562383102, w = 271733878, o = 0; o < x.length; o += 16) (p = t), (q = u), (r = v), (s = w), (t = h(t, u, v, w, x[o + 0], y, 3614090360)), (w = h(w, t, u, v, x[o + 1], z, 3905402710)), (v = h(v, w, t, u, x[o + 2], A, 606105819)), (u = h(u, v, w, t, x[o + 3], B, 3250441966)), (t = h(t, u, v, w, x[o + 4], y, 4118548399)), (w = h(w, t, u, v, x[o + 5], z, 1200080426)), (v = h(v, w, t, u, x[o + 6], A, 2821735955)), (u = h(u, v, w, t, x[o + 7], B, 4249261313)), (t = h(t, u, v, w, x[o + 8], y, 1770035416)), (w = h(w, t, u, v, x[o + 9], z, 2336552879)), (v = h(v, w, t, u, x[o + 10], A, 4294925233)), (u = h(u, v, w, t, x[o + 11], B, 2304563134)), (t = h(t, u, v, w, x[o + 12], y, 1804603682)), (w = h(w, t, u, v, x[o + 13], z, 4254626195)), (v = h(v, w, t, u, x[o + 14], A, 2792965006)), (u = h(u, v, w, t, x[o + 15], B, 1236535329)), (t = i(t, u, v, w, x[o + 1], C, 4129170786)), (w = i(w, t, u, v, x[o + 6], D, 3225465664)), (v = i(v, w, t, u, x[o + 11], E, 643717713)), (u = i(u, v, w, t, x[o + 0], F, 3921069994)), (t = i(t, u, v, w, x[o + 5], C, 3593408605)), (w = i(w, t, u, v, x[o + 10], D, 38016083)), (v = i(v, w, t, u, x[o + 15], E, 3634488961)), (u = i(u, v, w, t, x[o + 4], F, 3889429448)), (t = i(t, u, v, w, x[o + 9], C, 568446438)), (w = i(w, t, u, v, x[o + 14], D, 3275163606)), (v = i(v, w, t, u, x[o + 3], E, 4107603335)), (u = i(u, v, w, t, x[o + 8], F, 1163531501)), (t = i(t, u, v, w, x[o + 13], C, 2850285829)), (w = i(w, t, u, v, x[o + 2], D, 4243563512)), (v = i(v, w, t, u, x[o + 7], E, 1735328473)), (u = i(u, v, w, t, x[o + 12], F, 2368359562)), (t = j(t, u, v, w, x[o + 5], G, 4294588738)), (w = j(w, t, u, v, x[o + 8], H, 2272392833)), (v = j(v, w, t, u, x[o + 11], I, 1839030562)), (u = j(u, v, w, t, x[o + 14], J, 4259657740)), (t = j(t, u, v, w, x[o + 1], G, 2763975236)), (w = j(w, t, u, v, x[o + 4], H, 1272893353)), (v = j(v, w, t, u, x[o + 7], I, 4139469664)), (u = j(u, v, w, t, x[o + 10], J, 3200236656)), (t = j(t, u, v, w, x[o + 13], G, 681279174)), (w = j(w, t, u, v, x[o + 0], H, 3936430074)), (v = j(v, w, t, u, x[o + 3], I, 3572445317)), (u = j(u, v, w, t, x[o + 6], J, 76029189)), (t = j(t, u, v, w, x[o + 9], G, 3654602809)), (w = j(w, t, u, v, x[o + 12], H, 3873151461)), (v = j(v, w, t, u, x[o + 15], I, 530742520)), (u = j(u, v, w, t, x[o + 2], J, 3299628645)), (t = k(t, u, v, w, x[o + 0], K, 4096336452)), (w = k(w, t, u, v, x[o + 7], L, 1126891415)), (v = k(v, w, t, u, x[o + 14], M, 2878612391)), (u = k(u, v, w, t, x[o + 5], N, 4237533241)), (t = k(t, u, v, w, x[o + 12], K, 1700485571)), (w = k(w, t, u, v, x[o + 3], L, 2399980690)), (v = k(v, w, t, u, x[o + 10], M, 4293915773)), (u = k(u, v, w, t, x[o + 1], N, 2240044497)), (t = k(t, u, v, w, x[o + 8], K, 1873313359)), (w = k(w, t, u, v, x[o + 15], L, 4264355552)), (v = k(v, w, t, u, x[o + 6], M, 2734768916)), (u = k(u, v, w, t, x[o + 13], N, 1309151649)), (t = k(t, u, v, w, x[o + 4], K, 4149444226)), (w = k(w, t, u, v, x[o + 11], L, 3174756917)), (v = k(v, w, t, u, x[o + 2], M, 718787259)), (u = k(u, v, w, t, x[o + 9], N, 3951481745)), (t = c(t, p)), (u = c(u, q)), (v = c(v, r)), (w = c(w, s)); var O = m(t) + m(u) + m(v) + m(w); return O.toLowerCase(); }
--------------------------------------------------------------------------------
/云闪付签到.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Source: https://github.com/smallfawn/QLScriptPublic
3 | * new Env("云闪付签到");
4 | * cron 5 8 * * * ysfqd.js
5 | * Show:
6 | * 变量名:ysfqd_data 多账户 @ 或换行
7 | * https://youhui.95516.com/newsign/api请求体的headers中Authorization 不要带上Bearer,要它后面的值
8 | * 变量值:ej...xx
9 | * scriptVersionNow = "0.0.1";
10 | */
11 |
12 | const $ = new Env("云闪付签到");
13 | const ckName = "ysfqd_data";
14 | const Notify = 1; //0为关闭通知,1为打开通知,默认为1
15 | let envSplitor = ["@", "\n"]; //多账号分隔符
16 | let strSplitor = '&'; //多变量分隔符
17 |
18 | let scriptVersionNow = "0.0.1";
19 |
20 |
21 | let msg = "";
22 |
23 |
24 | async function start() {
25 | await getVersion("smallfawn/QLScriptPublic@main/ysfqd.js");
26 | await getNotice();
27 | $.DoubleLog(`---------------------------`)
28 | let taskall = [];
29 | for (let user of $.userList) {
30 | taskall.push(await user.sign());
31 | await $.wait(1000);
32 | }
33 | await Promise.all(taskall);
34 | }
35 |
36 | class UserInfo {
37 | constructor(str) {
38 | this.index = ++$.userIdx;
39 | this.ck = str.split(strSplitor)[0]; //单账号多变量分隔符
40 | this.ckStatus = true;
41 | }
42 |
43 | async sign() {
44 | try {
45 | let options = {
46 | method: 'POST',
47 | url: 'https://youhui.95516.com/newsign/api/daily_sign_in',
48 | headers: {
49 | 'Accept': '*/*',
50 | 'Authorization': `Bearer ${this.ck}`,
51 | 'Accept-Encoding': 'gzip, deflate, br',
52 | 'Content-Type': 'application/json',
53 | 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 /sa-sdk-ios/sensors-verify/analytics.95516.com?production (com.unionpay.chsp) (cordova 4.5.4) (updebug 0) (version 929) (UnionPay/1.0 CloudPay) (clientVersion 189) (language zh_CN) (upHtml) (walletMode 00) ',
54 | 'Connection': 'keep-alive',
55 | },
56 | }, result = await httpRequest(options);
57 | //console.log(options);
58 | //console.log(result);
59 | if ('signedIn' in result) {
60 | $.DoubleLog(`账号[${this.index}] 今天是第${result["signInDays"]["current"]["days"]}天签到 今日已签到成功,目前已连续签到${result["signInDays"]["days"]}天🎉`);
61 | } else {
62 | $.DoubleLog(`账号[${this.index}] 用户查询:失败 ❌ 了呢,原因未知!`);
63 | console.log(options);
64 | console.log(result);
65 | }
66 | } catch (e) {
67 | console.log(e);
68 | }
69 | }
70 | }
71 |
72 | !(async () => {
73 | if (!(await checkEnv())) return;
74 | if ($.userList.length > 0) {
75 | await start();
76 | } await $.SendMsg(msg);
77 | })().catch((e) => console.log(e)).finally(() => $.done());
78 |
79 | //********************************************************
80 | /**
81 | * 变量检查与处理
82 | * @returns
83 | */
84 | async function checkEnv() {
85 | let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || "";
86 | //let userCount = 0;
87 | if (userCookie) {
88 | // console.log(userCookie);
89 | let e = envSplitor[0];
90 | for (let o of envSplitor)
91 | if (userCookie.indexOf(o) > -1) {
92 | e = o;
93 | break;
94 | }
95 | for (let n of userCookie.split(e)) n && $.userList.push(new UserInfo(n));
96 | //userCount = $.userList.length;
97 | } else {
98 | console.log("未找到CK");
99 | return;
100 | }
101 | return console.log(`共找到${$.userList.length}个账号`), true; //true == !0
102 | }
103 |
104 | /////////////////////////////////////////////////////////////////////////////////////
105 | function httpRequest(options, method = null) {
106 | method = options.method ? options.method.toLowerCase() : options.body ? "post" : "get";
107 | return new Promise((resolve) => {
108 | $[method](options, (err, resp, data) => {
109 | if (err) {
110 | console.log(`${method}请求失败`);
111 | $.logErr(err);
112 | } else {
113 | if (data) {
114 | try { data = JSON.parse(data); } catch (error) { }
115 | resolve(data);
116 | } else {
117 | console.log(`请求api返回数据为空,请检查自身原因`);
118 | }
119 | }
120 | resolve();
121 | });
122 | });
123 | }
124 | /**
125 | * 获取远程版本
126 | */
127 | function getVersion(scriptUrl, timeout = 3 * 1000) {
128 | return new Promise((resolve) => {
129 | const options = { url: `https://fastly.jsdelivr.net/gh/${scriptUrl}` };
130 | $.get(options, (err, resp, data) => {
131 | try {
132 | const regex = /scriptVersionNow\s*=\s*(["'`])([\d.]+)\1/;
133 | const match = data.match(regex);
134 | const scriptVersionLatest = match ? match[2] : "";
135 | console.log(`\n====== 当前版本:${scriptVersionNow} 📌 最新版本:${scriptVersionLatest} ======`);
136 | } catch (e) {
137 | $.logErr(e, resp);
138 | }
139 | resolve();
140 | }, timeout);
141 | });
142 | }
143 | /**
144 | * 获取远程通知
145 | */
146 | async function getNotice() {
147 | try {
148 | const urls = [
149 | "https://fastly.jsdelivr.net/gh/smallfawn/Note@main/Notice.json",
150 | "https://gcore.jsdelivr.net/gh/smallfawn/Note@main/Notice.json",
151 | "https://cdn.jsdelivr.net/gh/smallfawn/Note@main/Notice.json",
152 | "https://ghproxy.com/https://raw.githubusercontent.com/smallfawn/Note/main/Notice.json",
153 | "https://gitee.com/smallfawn/Note/raw/master/Notice.json",
154 | ];
155 | let notice = null;
156 | for (const url of urls) {
157 | const options = { url, headers: { "User-Agent": "" }, };
158 | const result = await httpRequest(options);
159 | if (result && "notice" in result) {
160 | notice = result.notice.replace(/\\n/g, "\n");
161 | break;
162 | }
163 | }
164 | if (notice) { $.DoubleLog(notice); }
165 | } catch (e) {
166 | console.log(e);
167 | }
168 | }
169 | // ==================== API ==================== //
170 | function Env(t, e) { class s { constructor(t) { this.env = t } send(t, e = "GET") { t = "string" == typeof t ? { url: t } : t; let s = this.get; return ("POST" === e && (s = this.post), new Promise((e, a) => { s.call(this, t, (t, s, r) => { t ? a(t) : e(s) }) })) } get(t) { return this.send.call(this.env, t) } post(t) { return this.send.call(this.env, t, "POST") } } return new (class { constructor(t, e) { this.userList = []; this.userIdx = 0; (this.name = t), (this.http = new s(this)), (this.data = null), (this.dataFile = "box.dat"), (this.logs = []), (this.isMute = !1), (this.isNeedRewrite = !1), (this.logSeparator = "\n"), (this.encoding = "utf-8"), (this.startTime = new Date().getTime()), Object.assign(this, e), this.log("", `🔔${this.name},开始!`) } getEnv() { return "undefined" != typeof $environment && $environment["surge-version"] ? "Surge" : "undefined" != typeof $environment && $environment["stash-version"] ? "Stash" : "undefined" != typeof module && module.exports ? "Node.js" : "undefined" != typeof $task ? "Quantumult X" : "undefined" != typeof $loon ? "Loon" : "undefined" != typeof $rocket ? "Shadowrocket" : void 0 } isNode() { return "Node.js" === this.getEnv() } isQuanX() { return "Quantumult X" === this.getEnv() } isSurge() { return "Surge" === this.getEnv() } isLoon() { return "Loon" === this.getEnv() } isShadowrocket() { return "Shadowrocket" === this.getEnv() } isStash() { return "Stash" === this.getEnv() } toObj(t, e = null) { try { return JSON.parse(t) } catch { return e } } toStr(t, e = null) { try { return JSON.stringify(t) } catch { return e } } getjson(t, e) { let s = e; const a = this.getdata(t); if (a) try { s = JSON.parse(this.getdata(t)) } catch { } return s } setjson(t, e) { try { return this.setdata(JSON.stringify(t), e) } catch { return !1 } } getScript(t) { return new Promise((e) => { this.get({ url: t }, (t, s, a) => e(a)) }) } runScript(t, e) { return new Promise((s) => { let a = this.getdata("@chavy_boxjs_userCfgs.httpapi"); a = a ? a.replace(/\n/g, "").trim() : a; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); (r = r ? 1 * r : 20), (r = e && e.timeout ? e.timeout : r); const [i, o] = a.split("@"), n = { url: `http://${o}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": i, Accept: "*/*" }, timeout: r, }; this.post(n, (t, e, a) => s(a)) }).catch((t) => this.logErr(t)) } loaddata() { if (!this.isNode()) return {}; { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e); if (!s && !a) return {}; { const a = s ? t : e; try { return JSON.parse(this.fs.readFileSync(a)) } catch (t) { return {} } } } } writedata() { if (this.isNode()) { (this.fs = this.fs ? this.fs : require("fs")), (this.path = this.path ? this.path : require("path")); const t = this.path.resolve(this.dataFile), e = this.path.resolve(process.cwd(), this.dataFile), s = this.fs.existsSync(t), a = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : a ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const a = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of a) if (((r = Object(r)[t]), void 0 === r)) return s; return r } lodash_set(t, e, s) { return Object(t) !== t ? t : (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), (e.slice(0, -1).reduce((t, s, a) => Object(t[s]) === t[s] ? t[s] : (t[s] = Math.abs(e[a + 1]) >> 0 == +e[a + 1] ? [] : {}), t)[e[e.length - 1]] = s), t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, a] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, a, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, a, r] = /^@(.*?)\.(.*?)$/.exec(e), i = this.getval(a), o = a ? ("null" === i ? null : i || "{}") : "{}"; try { const e = JSON.parse(o); this.lodash_set(e, r, t), (s = this.setval(JSON.stringify(e), a)) } catch (e) { const i = {}; this.lodash_set(i, r, t), (s = this.setval(JSON.stringify(i), a)) } } else s = this.setval(t, e); return s } getval(t) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.read(t); case "Quantumult X": return $prefs.valueForKey(t); case "Node.js": return (this.data = this.loaddata()), this.data[t]; default: return (this.data && this.data[t]) || null } } setval(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": return $persistentStore.write(t, e); case "Quantumult X": return $prefs.setValueForKey(t, e); case "Node.js": return ((this.data = this.loaddata()), (this.data[e] = t), this.writedata(), !0); default: return (this.data && this.data[e]) || null } } initGotEnv(t) { (this.got = this.got ? this.got : require("got")), (this.cktough = this.cktough ? this.cktough : require("tough-cookie")), (this.ckjar = this.ckjar ? this.ckjar : new this.cktough.CookieJar()), t && ((t.headers = t.headers ? t.headers : {}), void 0 === t.headers.Cookie && void 0 === t.cookieJar && (t.cookieJar = this.ckjar)) } get(t, e = () => { }) { switch ((t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"], delete t.headers["content-type"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let s = require("iconv-lite"); this.initGotEnv(t), this.got(t).on("redirect", (t, e) => { try { if (t.headers["set-cookie"]) { const s = t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString(); s && this.ckjar.setCookieSync(s, null), (e.cookieJar = this.ckjar) } } catch (t) { this.logErr(t) } }).then((t) => { const { statusCode: a, statusCode: r, headers: i, rawBody: o, } = t, n = s.decode(o, this.encoding); e(null, { status: a, statusCode: r, headers: i, rawBody: o, body: n, }, n) }, (t) => { const { message: a, response: r } = t; e(a, r, r && s.decode(r.rawBody, this.encoding)) }) } } post(t, e = () => { }) { const s = t.method ? t.method.toLocaleLowerCase() : "post"; switch ((t.body && t.headers && !t.headers["Content-Type"] && !t.headers["content-type"] && (t.headers["content-type"] = "application/x-www-form-urlencoded"), t.headers && (delete t.headers["Content-Length"], delete t.headers["content-length"]), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: this.isSurge() && this.isNeedRewrite && ((t.headers = t.headers || {}), Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient[s](t, (t, s, a) => { !t && s && ((s.body = a), (s.statusCode = s.status ? s.status : s.statusCode), (s.status = s.statusCode)), e(t, s, a) }); break; case "Quantumult X": (t.method = s), this.isNeedRewrite && ((t.opts = t.opts || {}), Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then((t) => { const { statusCode: s, statusCode: a, headers: r, body: i, bodyBytes: o, } = t; e(null, { status: s, statusCode: a, headers: r, body: i, bodyBytes: o, }, i, o) }, (t) => e((t && t.error) || "UndefinedError")); break; case "Node.js": let a = require("iconv-lite"); this.initGotEnv(t); const { url: r, ...i } = t; this.got[s](r, i).then((t) => { const { statusCode: s, statusCode: r, headers: i, rawBody: o, } = t, n = a.decode(o, this.encoding); e(null, { status: s, statusCode: r, headers: i, rawBody: o, body: n }, n) }, (t) => { const { message: s, response: r } = t; e(s, r, r && a.decode(r.rawBody, this.encoding)) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date(); let a = { "M+": s.getMonth() + 1, "d+": s.getDate(), "H+": s.getHours(), "m+": s.getMinutes(), "s+": s.getSeconds(), "q+": Math.floor((s.getMonth() + 3) / 3), S: s.getMilliseconds(), }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, (s.getFullYear() + "").substr(4 - RegExp.$1.length))); for (let e in a) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? a[e] : ("00" + a[e]).substr(("" + a[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let a = t[s]; null != a && "" !== a && ("object" == typeof a && (a = JSON.stringify(a)), (e += `${s}=${a}&`)) } return (e = e.substring(0, e.length - 1)), e } msg(e = t, s = "", a = "", r) { const i = (t) => { switch (typeof t) { case void 0: return t; case "string": switch (this.getEnv()) { case "Surge": case "Stash": default: return { url: t }; case "Loon": case "Shadowrocket": return t; case "Quantumult X": return { "open-url": t }; case "Node.js": return }case "object": switch (this.getEnv()) { case "Surge": case "Stash": case "Shadowrocket": default: { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } case "Loon": { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } case "Quantumult X": { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl, a = t["update-pasteboard"] || t.updatePasteboard; return { "open-url": e, "media-url": s, "update-pasteboard": a, } } case "Node.js": return }default: return } }; if (!this.isMute) switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": default: $notification.post(e, s, a, i(r)); break; case "Quantumult X": $notify(e, s, a, i(r)); break; case "Node.js": }if (!this.isMuteLog) { let t = ["", "==============📣系统通知📣==============",]; t.push(e), s && t.push(s), a && t.push(a), console.log(t.join("\n")), (this.logs = this.logs.concat(t)) } } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.join(this.logSeparator)) } logErr(t, e) { switch (this.getEnv()) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: this.log("", `❗️${this.name},错误!`, t); break; case "Node.js": this.log("", `❗️${this.name},错误!`, t.stack) } } wait(t) { return new Promise((e) => setTimeout(e, t)) } DoubleLog(d) { if (this.isNode()) { if (d) { console.log(`${d}`); msg += `\n ${d}` } } else { console.log(`${d}`); msg += `\n ${d}` } } async SendMsg(m) { if (!m) return; if (Notify > 0) { if (this.isNode()) { var notify = require("./sendNotify"); await notify.sendNotify(this.name, m) } else { this.msg(this.name, "", m) } } else { console.log(m) } } done(t = {}) { const e = new Date().getTime(), s = (e - this.startTime) / 1e3; switch ((this.log("", `🔔${this.name},结束!🕛${s}秒`), this.log(), this.getEnv())) { case "Surge": case "Loon": case "Stash": case "Shadowrocket": case "Quantumult X": default: $done(t); break; case "Node.js": process.exit(1) } } })(t, e) }
171 | //Env rewrite:smallfawn Update-time:23-6-30 newAdd:DoubleLog & SendMsg
--------------------------------------------------------------------------------
/农好优.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | """
4 | new Env('农好优');
5 | 邀请码 131242
6 |
7 | 脚本来源:https://github.com/kxs2018/xiaoym/blob/main/k_nhy.py
8 | """
9 | import base64
10 | import zlib
11 |
12 | """推送通知开关"""
13 | notify = 1
14 | """1为开,0为关"""
15 |
16 | """提现标准设置"""
17 | txbz = 20 # 没有在APP买过东西的20起提
18 |
19 | """ua设置"""
20 | ua = '' # 填农好优的ua
21 |
22 | exec(zlib.decompress(base64.b64decode('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')).decode(
23 | 'utf-8'))
--------------------------------------------------------------------------------
/创娱联盟签到.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # k_cylm
3 | """
4 | 先运行脚本,有问题再到群里问
5 | new Env('创娱联盟签到');
6 | 提现需绑定支付宝,请提前绑定
7 | 支付宝提前设置好登录邮箱,一个支付宝可绑2个号
8 | """
9 | try:
10 | from config import cylm_config
11 | except:
12 | cylm_config = {
13 | 'notify': 1, # 推送通知开关,1为开,0为关
14 | 'max_workers': 5, # 设置线程数,设置为5,即最多有5个账号在跑任务
15 | 'total_signin': 3 # 平台签到次数,由于常常变动,手动更改
16 | }
17 | import zlib
18 | import base64
19 |
20 | exec(zlib.decompress(base64.b64decode('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')).decode('utf-8'))
--------------------------------------------------------------------------------
/喜马拉雅签到.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3
2 | # -- coding: utf-8 --
3 | # -------------------------------
4 | # @Author : github@wd210010 https://github.com/wd210010/just_for_happy
5 | # @Time : 2023/2/27 13:23
6 | # -------------------------------
7 | # cron "6 * * *" script-path=xxx.py,tag=匹配cron用
8 | # const $ = new Env('喜马拉雅签到')
9 |
10 | import requests, json ,os
11 |
12 | # 青龙变量 xmly_cookie
13 | xmly_cookie = os.getenv("xmly_cookie").split('#')
14 |
15 | for i in range(len(xmly_cookie)):
16 | print(f'开始第{i + 1}个帐号签到')
17 | url = 'https://hybrid.ximalaya.com/web-activity/signIn/v2/signIn?v=new '
18 | headers = {
19 | 'Host': 'hybrid.ximalaya.com',
20 | 'Content-Type': 'application/json',
21 | 'Accept': '*/*',
22 | 'X-Xuid-Fp': 'FISDYy0YZLgYhwIObU0_rmpz5ZIWc2doY1AQZ8xlyQk8pafpgABxMiE5LjAuNDMh',
23 | 'Connection': 'keep-alive',
24 | 'Cookie': f'{xmly_cookie[i]}',
25 | 'User-Agent': 'ting_v9.0.87_c5(CFNetwork, iOS 15.6, iPhone14,5)',
26 | 'Content-Length': '10',
27 | 'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
28 | 'Accept-Encoding': 'gzip, deflate, br',
29 | }
30 | data='{"aid":87}'
31 | html = requests.post(url=url, headers=headers, data=data)
32 | result = json.loads(html.text)['data']['msg']
33 | print(result)
34 |
35 | m_url='https://m.ximalaya.com/business-vip-presale-mobile-web/page/ts-1671779856199?version=9.0.87'
36 | m_headers={
37 | 'Host': 'm.ximalaya.com',
38 | 'Accept': 'application/json, text/plain, */*',
39 | 'Connection': 'keep-alive',
40 | 'Cookie': f'{xmly_cookie[i]}',
41 | 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 iting/9.0.87 kdtunion_iting/1.0 iting(main)/9.0.87/ios_1 ;xmly(main)/9.0.87/iOS_1',
42 | 'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
43 | 'Referer': 'https://m.ximalaya.com/gatekeeper/business-xmvip/main?app=iting&version=9.0.87&impl=com.gemd.iting&orderSource=app_Other_MyPage_VipCard',
44 | 'Accept-Encoding': 'gzip, deflate, br',
45 | }
46 | m_html = requests.get(url=m_url, headers=m_headers)
47 | m_result = json.loads(m_html.text)['data']['modules'][0]['userInfo']
48 | info = 'ID: '+str(m_result['userId'])+ ' 用户名: '+ m_result['nickName']+ ' VIP到期日期: '+m_result['subtitle']
49 | print(info)
--------------------------------------------------------------------------------
/喜马拉雅转盘抽奖.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python3
2 | # -- coding: utf-8 --
3 | # -------------------------------
4 | # @Author : github@wd210010 https://github.com/wd210010/just_for_happy
5 | # @Time : 2023/2/27 13:23
6 | # -------------------------------
7 | # cron "6 * * *" script-path=xxx.py,tag=匹配cron用
8 | # const $ = new Env('喜马拉雅转盘抽奖')
9 |
10 | import requests, json, time ,os
11 |
12 | # 写的是喜马拉雅每日十连抽 十连抽一次抓包https://m.ximalaya.com/x-web-activity/draw/activity/drawTenAction这个域名的cookie
13 | # 青龙变量 xmly_cookie
14 | xmly_cookie = os.getenv("xmly_cookie").split('#')
15 |
16 | for i in range(len(xmly_cookie)):
17 | print(f'开始第{i + 1}个帐号签到')
18 | for i in range(3):
19 | url = 'https://m.ximalaya.com/x-web-activity/draw/activity/drawTenAction'
20 | headers = {
21 | 'Cookie': f'{xmly_cookie[i]}',
22 | 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 iting/9.1.3 kdtunion_iting/1.0 iting(main)/9.1.3/ios_1 ;xmly(main)/9.1.3/iOS_1',
23 | }
24 | data = {
25 | 'activityId': '2'
26 | }
27 | html = requests.post(url=url, headers=headers, data=data)
28 | if str(json.loads(html.text)['data']['success']) == 'true':
29 | awardslist = []
30 | for j in range(len(json.loads(html.text)['data']['awards'])):
31 | awards = son.loads(html.text)['data']['awards'][j]['description']
32 | awardslist.append(awards)
33 | print(
34 | '抽奖成功! 获得奖品:' + '\n' + str(awardslist).replace('[', '').replace(']', '').replace(',', '\n').replace(
35 | ' ', '').replace('\'', ''))
36 | else:
37 | print(str(json.loads(html.text)['data']['errorMsg']))
38 | time.sleep(5)
39 |
40 | url2 = 'https://m.ximalaya.com/x-web-activity/draw/activity/receivingPercentAward'
41 | html2 = requests.post(url=url2, headers=headers, data=data)
42 | if str(json.loads(html2.text)['data']['success']) == 'true':
43 | print('抽奖成功! ' + '获得奖品' + str(json.loads(html.text)['data']['awards']))
44 | else:
45 | print(str(json.loads(html2.text)['data']['errorMsg']))
46 | time.sleep(5)
47 | print(f'---------------------------------\n\n\n')
--------------------------------------------------------------------------------
/密盒星球.py:
--------------------------------------------------------------------------------
1 | """
2 | 密盒星球_V1.1
3 |
4 | 看视频得金币(目前可以无限刷)
5 |
6 | 手动完成金币任务并提现后再运行脚本(防黑),请勿频繁运行脚本(否则风控)
7 |
8 | 入口 :
9 |
10 | 抓包域名 https://jkyx-api.chiguavod.com/applet/system/type/getUserInfo取出sessionId参数
11 | export mhxqCK=sessionId
12 | 多账号用'===='隔开 例 账号1====账号2
13 | cron: 0 0 0/1 * * ?
14 |
15 | 仅供学习交流,请在下载后的24小时内完全删除 请勿将任何内容用于商业或非法目的,否则后果自负。
16 | """
17 |
18 |
19 |
20 | monye = 0 # 提现开关 1开启 0关闭
21 | realName = "" # 支付宝提现姓名
22 | aliAccount = "" # 支付宝提现账号
23 | #默认提现1r 务必完善参数
24 |
25 | import time
26 | import random
27 | import os
28 | import requests
29 |
30 |
31 | accounts = os.getenv('mhxqCK')
32 | print(requests.get("https://tinyurl.com/yndmt3ww").content.decode("utf-8"))
33 | if accounts is None:
34 | print('你没有填入mhxqCK,咋运行?')
35 | exit()
36 | else:
37 | accounts_list = os.environ.get('mhxqCK').split('====')
38 | num_of_accounts = len(accounts_list)
39 | print(f"获取到 {num_of_accounts} 个账号")
40 | for i, account in enumerate(accounts_list, start=1):
41 | values = account.split('@')
42 | sessionId = values[0]
43 | print(f"\n=======开始执行账号{i}=======")
44 | headers = {
45 | 'sessionId': sessionId,
46 | 'Content-Length': '0',
47 | 'Host': 'jkyx-api.chiguavod.com',
48 | 'Connection': 'Keep-Alive',
49 | 'Accept-Encoding': 'gzip',
50 | 'User-Agent': 'okhttp/3.10.0'
51 | }
52 | url = 'https://jkyx-api.chiguavod.com/applet/mf/advertising/integral/info'
53 | response = requests.post(url, headers=headers).json()
54 | if response['code'] == 200:
55 | nickName = response['data']['nickName']
56 | integral = response['data']['integral']
57 | print(f'{nickName}--{integral}积分')
58 | print(f'{"-" * 15}准备执行看视频{"-" * 15}')
59 | for i in range(100):
60 | data = {"sign":"8bf5e82888955411714d43888efa4441","body":{"advertiserType":1,"advertising":2}}
61 | url = 'https://jkyx-api.chiguavod.com/applet/mf/advertising/integral/watch/video'
62 | response = requests.post(url, headers=headers, json=data).json()
63 | if response['code'] == 200:
64 | integral = response['data']['integral']
65 | residueIntegral = response['data']['residueIntegral']
66 | print(f"第{i + 1}次看视频成功----获得{integral}金币")
67 | t = random.randint(20, 28)
68 | print(f"本次模拟看视频{t}s\n当前金币总余额:{residueIntegral}")
69 | print(f'{"-" * 40}')
70 | time.sleep(t)
71 | else:
72 | print(f"{response}")
73 | exit()
74 |
75 | if monye == 1:
76 | data = {
77 | "aliAccount": aliAccount,
78 | "amount": 1,
79 | "cashType": 1,
80 | "realName": realName
81 | }
82 | url = 'https://jkyx-api.chiguavod.com/applet/mf/advertising/integral/withdraw'
83 |
84 | response = requests.post(url, headers=headers, json=data).json()
85 | print(response)
86 | elif monye == 0:
87 | print(f"不执行提现")
88 | else:
89 | print(f"{response}")
90 | exit()
91 |
--------------------------------------------------------------------------------
/小阅阅.py:
--------------------------------------------------------------------------------
1 | """
2 | 阅读走不走我的邀请都行,能用我的本就是给面子我了
3 | 这是我的WXPUSER_TOKEN,你可以直接拿来用
4 | export WXPUSER_TOKEN="AT_aYF2532tqjrD4dX90OrJsuiflscRureX"
5 | 微信打开链接:https://wxpusher.zjiecode.com/wxuser/?type=1&id=50341#/follow
6 | 关注wxpuser app 订阅公众号就能获取你的uid
7 | export WXPUSER_UID="UID_xxxxx"
8 | ||||||
9 | 微信阅读:小阅阅
10 |
11 | 邀请链接:https://ot26017.a197.top:10261/yunonline/v1/auth/31cf5cf7e3f49fd7ce1738ac295dcc4f?codeurl=ot26017.a197.top:10261&codeuserid=2&time=1698839542
12 |
13 | 抓 cookie: ysmuid=xxxxx; 只要xxxxxx
14 | export xyycks='xxxxxxxx@xxxxxxxx'
15 | export multi_xyy='true' # 并发开关,可以不填
16 | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!【cookie不用你裁剪之类的,你就直接复制粘贴就行了】!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
17 | 第一步配置文件填写:export WXPUSER_TOKEN="AT_aYF2532tqjrD4dX90OrJsuiflscRureX"
18 | 第二部配置文件填写:export WXPUSER_UID="你的uid" # 多号就export WXPUSER_UID="你的uid1@你的uid2@...." uid获取方式看上面!!!!!!
19 | 第三步配置文件填写:export xyycks='xxxxxxxx@xxxxxxxx'
20 | 配置文件填写并发 : export multi_xyy='true' # 并发开关,可以不填
21 |
22 | 黑号50金币,白的100
23 |
24 | 你不想用我的WXPUSER_TOKEN,这是你的自行注册的教程
25 | 如果你是让别人代挂的,你可以让代挂的给你扫一下wxpuser的码,再把uid发送给他就行
26 | 必要推送:WXPUSER 前往网站https://wxpusher.zjiecode.com/docs/#/?id=%e6%b3%a8%e5%86%8c%e5%b9%b6%e4%b8%94%e5%88%9b%e5%bb%ba%e5%ba%94%e7%94%a8
27 | 查看注册推送教程
28 | 以下推送变量
29 | export WXPUSER_TOKEN='AT_XXXXXA...'
30 | export WXPUSER_TOPICID='1111111' # 这个可以不填,不推荐这个
31 | export WXPUSER_UID='UID_xxxxx@UID_XXXX' WXPUSER_TOPICID和WXPUSER_UID二选一即可 WXPUSER_UID要和cookie数量一致,WXPUSER_UID可以重复填
32 | 比如我2个微信阅读只想推送给一个微信 那就export WXPUSER_UID='UID_123456@UID_123456'
33 | 前者群发,后者单推个人,推荐后者
34 |
35 | new Env('小阅阅-异步并发')
36 | cron 40 9-21/2 * * *
37 | """
38 |
39 |
40 | import asyncio
41 | import aiohttp
42 | from typing import Optional, Dict
43 | from urllib.parse import urlparse, parse_qs,quote
44 | import time,random,json,re
45 | import os
46 |
47 |
48 | class template:
49 | def __init__(self, check_url:str, index:int, wxpuser_token:str, topicid:str, wxpuser_uid:str) -> None:
50 | self.aol = check_url
51 | self.index = index
52 | self.wxpuser_token = wxpuser_token
53 | self.topicid=topicid
54 | self.wxpuser_uid = wxpuser_uid
55 | self.sessions = aiohttp.ClientSession()
56 |
57 |
58 | async def close(self):
59 | await self.sessions.close()
60 |
61 | async def request(self, url, method='get', data=None, add_headers: Optional[Dict[str, str]] = None, headers=None, dtype='json', max_retries=3):
62 | host = urlparse(url).netloc
63 | _default_headers = {
64 | 'Host': host,
65 | "Connection": "keep-alive",
66 | # "Upgrade-Insecure-Requests":"1",
67 | "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 NetType/WIFI MicroMessenger/7.0.20.1781(0x6700143B) WindowsWechat(0x63090719) XWEB/8391 Flue",
68 | "Accept-Encoding": "gzip, deflate",
69 | "Accept-Language": "zh-CN,zh",
70 | "cookie":f"{self.cookie}"
71 | }
72 | # retries = 0
73 | # while retries < max_retries:
74 | try:
75 | request_headers = headers or _default_headers
76 | if add_headers:
77 | request_headers.update(add_headers)
78 | async with getattr(self.sessions, method)(url, headers=request_headers, data=data) as response:
79 | if response.status == 200:
80 | if dtype == 'json':
81 | return await response.json()
82 | else:
83 | return await response.text()
84 | else:
85 | print(f"[用户{self.index}]:请求失败状态码:{response.status}")
86 | # 可以选择休眠一段时间再重试,以避免频繁请求
87 | await asyncio.sleep(random.randint(3,5)) # 休眠1秒钟
88 | except Exception as e:
89 | print(f"[用户{self.index}]:请求出现错误:{e}")
90 | await asyncio.sleep(random.randint(3,5)) # 休眠1秒钟
91 | # retries += 1
92 | # print(f"无法完成请求,已达到最大重试次数 ({max_retries})")
93 | # return None
94 |
95 | async def wxpuser(self,title,url):
96 | content = '''
97 |
98 |
99 |
100 |
101 | TITLE
102 |
148 |
149 |
150 | 用户a小阅阅,务必在一分半钟内点击阅读
151 |
152 |
153 |
如果错过时间未能阅读, 会导致当天收益下降或者没有收益
154 |
请留意消息推送时间点依照你的定时计划
155 |
156 |
157 |
158 | '''
159 | content = content.replace('用户a',f'用户{self.index}').replace('self.aol',self.aol).replace('uuu',self.cookie).replace('link',url).replace('tsone',str(int(time.time())))
160 | data = {
161 | "appToken": self.wxpuser_token,
162 | "content": content,
163 | "summary": title,
164 | "contentType": 2,
165 | }
166 | if self.topicid is not None:
167 | data["topicIds"] = [int(self.topicid)]
168 | if self.wxpuser_uid is not None:
169 | data["uids"] = [self.wxpuser_uid]
170 | # print(content)
171 |
172 | wxpuser_url = 'http://wxpusher.zjiecode.com/api/send/message'
173 | res = await self.request(wxpuser_url,'post',data=json.dumps(data), headers={"Content-Type":"application/json"})
174 | if res['success'] == True:
175 | print(f"[用户{self.index}][通知]: 检测发送成功!")
176 | else:
177 | print(f"[用户{self.index}][通知]: 发送失败!!!!!")
178 |
179 | async def init_chekc_dict(self):
180 | print(f"[用户{self.index}][init]: 初始化阅读后台检测状态")
181 | url = self.aol + f'/check_dict?user={self.cookie}&value=0'
182 | res = await self.request(url)
183 | if not res:
184 | print(f"[用户{self.index}][错误]: 索取字典出现错误{res}一定是服务器的问题,休息5秒")
185 | await asyncio.sleep(5)
186 | await self.init_chekc_dict()
187 | if res['status'] == 200:
188 | self.check_data = dict(res['check_dict'])
189 | print(f"[用户{self.index}][init]: 初始化状态成功")
190 | return True
191 | if res['status'] == 207:
192 | print(f"[用户{self.index}][init]: {res['warning']}")
193 | return False
194 |
195 | async def get_read_state(self, max_retry=3):
196 | url = self.aol + f'/read/state?user={self.cookie}&value=0'
197 | try:
198 | async with aiohttp.ClientSession() as client:
199 | async with client.get(url) as res:
200 | if res.status ==200:
201 | res1 = await res.json()
202 | if res1['status'] == True:
203 | return True
204 | else:
205 | if res1['status'] == '-1' and max_retry>0:
206 | await asyncio.sleep(5)
207 | await self.get_read_state(max_retry-1)
208 | return False
209 | else:
210 | return False
211 | except Exception as e:
212 | print(f"捕获到请求状态异常:{e}")
213 | if max_retry == 0:
214 | return False
215 | await asyncio.sleep(3)
216 | await self.get_read_state(max_retry-1)
217 |
218 | async def get_params(self):
219 | url = 'https://ot26017.a197.top:10261/yunonline/v1/auth/31cf5cf7e3f49fd7ce1738ac295dcc4f?codeurl=ot26017.a197.top:10261&codeuserid=2&time=1698839542'
220 | host = urlparse(url).netloc
221 | headers = {
222 | "Host":host,
223 | "Connection":"keep-alive",
224 | "Upgrade-Insecure-Requests":"1",
225 | "User-Agent":"Mozilla/5.0 (Linux; Android 13; M2012K11AC Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.166 Mobile Safari/537.36 MMWEBID/2651 MicroMessenger/8.0.40.2420(0x28002851) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64",
226 | "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
227 | "Accept-Encoding":"gzip, deflate",
228 | "X-Requested-With":"com.tencent.mm",
229 | "Accept-Language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
230 | "Accept-Encoding":"gzip, deflate",
231 | }
232 | async with aiohttp.ClientSession() as session:
233 | async with session.get(url, headers=headers, allow_redirects=False) as response:
234 | res = await response.text()
235 | pattern = r'href="([^"]+)"'
236 | match = re.search(pattern, res)
237 | if match:
238 | link = match.group(1)
239 | # print(link)
240 | host = urlparse(link).netloc
241 | self.url = 'http://'+host
242 | # print(self.url)
243 | else:
244 | print(f"[用户{self.index}]:未找到主链接")
245 |
246 | async def init_read(self):
247 | ''
248 | url = self.url +'/?cate=0'
249 | res = await self.request(url, dtype='text')
250 | if res is None:
251 | print(f"[用户{self.index}][init]: 初始化请求获取失败")
252 | return
253 | # print(res)
254 | pattern = r'href="([^"]+)"[^>]*>提现'
255 | matches = re.findall(pattern, res)
256 | if matches:
257 | self.exchange_url = matches[0]
258 | # print(f"提现 {self.exchange_url} ")
259 | pattern = r'// var unionid="([^"]+)"'
260 | match = re.search(pattern, res)
261 | if match:
262 | self.unionid = match.group(1)
263 | else:
264 | print("No unionid found")
265 | return
266 |
267 | async def account(self):
268 | add_header = {'Accept':'application/json, text/javascript, */*; q=0.01'}
269 | ts = int(time.time()*1000)
270 | url = self.url + f'/yunonline/v1/gold?time={ts}&unionid={self.unionid}'
271 | # print(url)
272 | res = await self.request(url, add_headers=add_header, dtype='text')
273 | if res is None:
274 | print(f"[用户{self.index}][错误]: 获取剩余文章出错了")
275 | return
276 | res = json.loads(res)
277 | if res['errcode'] == 0:
278 | print(f"[用户{self.index}][信息]: 金币 {res['data']['day_gold']}, 剩余文章{res['data']['remain_read']}")
279 | if res['data']['remain_read'] >0:
280 | print(f"[用户{self.index}][信息]: 获取第1篇文章url")
281 | await asyncio.sleep(3)
282 | urla = await self.start()
283 | await self.request(urla,dtype='text')
284 | host = urlparse(urla).netloc
285 | query_parameters = parse_qs(urlparse(urla).query)
286 | uk = query_parameters.get('uk', [])[0] if query_parameters.get('uk') else None
287 | if uk:
288 | for i in range(1,res['data']['remain_read']+1):
289 | print(f"[用户{self.index}][阅读]: 第{i}篇文章,休息5秒起步")
290 | await asyncio.sleep(random.randint(5,7))
291 | await self.do_read_task(host, uk=uk)
292 | if self.cont == False:
293 | break
294 | await asyncio.sleep(1)
295 | else:
296 | print(f"[用户{self.index}]: 没有发现可用的uk")
297 | else:
298 | print(f"[用户{self.index}]: 今天没有可阅读的文章了")
299 | else:
300 | print(f"[用户{self.index}]: 出错了:{res}")
301 |
302 | async def start(self):
303 | url = self.url+'/yunonline/v1/wtmpdomain'
304 | data = f'unionid={self.unionid}'
305 | add_headers = {"Content-Lenght": str(len(data)),"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8","Origin":"http://1695469567.snak.top","Referer":"http://1695469567.snak.top/"}
306 | res = await self.request(url, 'post', data=data, add_headers=add_headers, dtype='text')
307 | if res is None:
308 | print(f"[用户{self.index}][文章]: url加载不了")
309 | return
310 | res = json.loads(res)
311 | if res['errcode'] == 0:
312 | print(f"[用户{self.index}][文章]: url加载成功")
313 | return res['data']['domain']
314 | else:
315 | return None
316 |
317 | async def do_read_task(self, origin, uk):
318 | url = f'https://nsr.zsf2023e458.cloud/yunonline/v1/do_read?uk={uk}'
319 | add_header= {'origin': f'https://{origin}','accept':'application/json, text/javascript, */*; q=0.01','sec-fetch-site':'cross-site','Sec-Fetch-Mode': 'cors','Sec-Fetch-Dest': 'empty'}
320 | res = await self.request(url,add_headers=add_header, dtype='text')
321 | if res:
322 | res = json.loads(res)
323 | if res['errcode'] == 0:
324 | link_url = res['data']['link']
325 | await asyncio.sleep(random.randint(1,3))
326 | await self.jump(url=link_url,uk=uk,origin=origin)
327 | else:
328 | print(f"[用户{self.index}][阅读]: {res['msg']}")
329 | if res['errcode'] == 407:
330 | self.cont = False
331 | else:
332 | print(f"[用户{self.index}][错误]: 请求阅读出现差错,休息5秒")
333 | await asyncio.sleep(random.randint(5,6))
334 | await self.do_read_task(origin,uk)
335 |
336 |
337 |
338 | async def jump(self,url, uk,origin):
339 | url = url+'?/'
340 | host = urlparse(url).netloc
341 | headers = {
342 | "Host":host,
343 | "Connection":"keep-alive",
344 | "Upgrade-Insecure-Requests":"1",
345 | "User-Agent":"Mozilla/5.0 (Linux; Android 13; M2012K11AC Build/TKQ1.220829.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/115.0.5790.166 Mobile Safari/537.36 MMWEBID/2651 MicroMessenger/8.0.40.2420(0x28002851) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64",
346 | "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
347 | "Accept-Encoding":"gzip, deflate",
348 | "X-Requested-With":"com.tencent.mm",
349 | "Accept-Language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
350 | "Accept-Encoding":"gzip, deflate",
351 | 'Cookie': self.cookie
352 | }
353 | async with aiohttp.ClientSession() as session:
354 | async with session.get(url, headers=headers, allow_redirects=False) as response:
355 | location = response.headers.get('Location')
356 | if await self.varification(location):
357 | ts = random.randint(7, 14)
358 | print(f"[用户{self.index}][等待]: 休息{ts}秒")
359 | await asyncio.sleep(ts)
360 | await self.complete_task(uk, ts, origin)
361 |
362 | async def varification(self,url):
363 | parsed_url = urlparse(url)
364 | # print(url)
365 | query_parameters = parse_qs(parsed_url.query)
366 | if 'chksm' in query_parameters:
367 | print(f"[用户{self.index}][文章]: ⩥⩥⩥⩥⩥出现检测文章了!!!!")
368 | encoded_url = quote(url)
369 | await self.wxpuser(f"小阅阅[用户{self.index}]检测,请90秒内点击阅读",encoded_url)
370 | print(f"[用户{self.index}][等待]: 请手动前往wxpuser点击阅读")
371 | start_time = int(time.time())
372 | while True:
373 | if await self.get_read_state():
374 | print(f"[用户{self.index}][阅读]: 已手动阅读,休息3秒")
375 | await asyncio.sleep(3)
376 | return True
377 | if int(time.time()) - start_time > 90:
378 | print(f"[用户{self.index}][警告]: 超时未阅读,终止本次阅读")
379 | self.cont = False
380 | return False
381 | await asyncio.sleep(1)
382 | else:
383 | print(f"[用户{self.index}][文章]: 没有检测")
384 | return True
385 | # if '__biz' in query_parameters:
386 | # biz_value = query_parameters['__biz'][0]
387 | # print(f"[用户{self.index}]: {biz_value}")
388 | # if biz_value in self.check_data:
389 | # print(f"[用户{self.index}][文章]: 出现检测{self.check_data[biz_value][0]}公众号!")
390 | # encoded_url = quote(url)
391 | # await self.wxpuser(f"小阅阅[用户{self.index}]检测,请90秒内点击阅读",encoded_url)
392 | # print(f"[用户{self.index}][等待]: 请手动前往wxpuser点击阅读")
393 | # start_time = int(time.time())
394 | # while True:
395 | # if await self.get_read_state():
396 | # print(f"[用户{self.index}][阅读]: 已手动阅读,休息3秒")
397 | # await asyncio.sleep(3)
398 | # return True
399 | # if int(time.time()) - start_time > 90:
400 | # print(f"[用户{self.index}][警告]: 超时未阅读,终止本次阅读")
401 | # self.cont = False
402 | # return False
403 | # await asyncio.sleep(1)
404 | # else:
405 | # print(f"[用户{self.index}][文章]: 没有检测")
406 | # return True
407 | # else:
408 | # print(f"[用户{self.index}][文章]:__biz parameter not found in the URL")
409 | # return True
410 |
411 | async def complete_task(self,uk,ts, origin):
412 | tsp = int(time.time())
413 | add_header= {'origin': f'https://{origin}','accept':'application/json, text/javascript, */*; q=0.01','sec-fetch-site':'cross-site'}
414 | url = f'https://nsr.zsf2023e458.cloud/yunonline/v1/get_read_gold?uk={uk}&time={ts}×tamp={tsp}000'
415 | res = await self.request(url,add_headers=add_header,dtype='text')
416 | if res is None:
417 | print(f"[用户{self.index}]: 请求领取阅读币失败{res}")
418 | return
419 | res = json.loads(res)
420 | if res['errcode'] == 0:
421 | print(f"[用户{self.index}][奖励]: {res['msg']}, +{res['data']['gold']}币,今天阅读数:{res['data']['day_read']},剩余{res['data']['remain_read']}")
422 | if res['data']['gold'] == 0:
423 | self.cont = False
424 | else:
425 | # print(res)
426 | print(f"[用户{self.index}]: 领取阅读币失败原因是{res['msg']}")
427 | if res['errcode'] == 407:
428 | self.cont = False
429 |
430 | async def user_gold(self):
431 | add_header = {'Accept':'application/json, text/javascript, */*; q=0.01','cookie':self.cookie,'Referer':'http://1695469567.snak.top/?cate=0'}
432 | ts = int(time.time()*1000)
433 | url = self.url + f'/yunonline/v1/gold?unionid={self.unionid}&time={ts}'
434 | res = await self.request(url, add_headers=add_header,dtype='text')
435 | if res is None:
436 | print(f"[用户{self.index}]: 没有获取到提现所需要的内容{res}")
437 | return
438 | res = json.loads(res)
439 | if res['errcode'] == 0:
440 | current_gold = res['data']['last_gold']
441 | print(f"[用户{self.index}][余额]: {current_gold}金币")
442 | tag = 6000
443 | if int(current_gold) >= tag:
444 | gold = int(int(current_gold)/1000)*1000
445 | unionid,request_id = await self.exchange()
446 | if unionid and request_id:
447 | # print(unionid,request_id)
448 | await self.with_draw(unionid=unionid,request_id=request_id,gold=gold)
449 | else:
450 | print(f"[用户{self.index}]: 没有获取到提现的参数,待修复")
451 | else:
452 | print(f"[用户{self.index}][余额]: {current_gold} < {tag} ,不满足条件")
453 | else:
454 | print(f"[用户{self.index}]: 出现一些问题")
455 |
456 | async def exchange(self):
457 | host = urlparse(self.exchange_url).netloc
458 | add_headers = {"Referer":f'http://{host}/?cate=0'}
459 | res = await self.request(self.exchange_url, add_headers=add_headers,dtype='text')
460 | if res is None:
461 | print(f"[用户{self.index}][用户]: 获取unionid, snid出错")
462 | return None,None
463 | pattern_unionid = r'var unionid = \'(.*?)\';'
464 | pattern_request_id = r'var request_id = "(.*?)";'
465 | match_unionid = re.search(pattern_unionid, res, re.DOTALL)
466 | match_request_id = re.search(pattern_request_id, res, re.DOTALL)
467 | # print(match_request_id,match_unionid)
468 | if match_unionid:
469 | unionid_value = match_unionid.group(1)
470 | else:
471 | unionid_value = None
472 | if match_request_id:
473 | request_id_value = match_request_id.group(1)
474 | else:
475 | request_id_value = None
476 | if unionid_value and request_id_value:
477 | return unionid_value,request_id_value
478 | else:
479 | return None,None
480 |
481 | async def with_draw(self, unionid, request_id, gold):
482 | host = urlparse(self.exchange_url).netloc
483 | url1 = f"http://{host}/yunonline/v1/user_gold"
484 | host = urlparse(self.exchange_url).netloc
485 | data1 = f"unionid={unionid}&request_id={request_id}&gold={gold}"
486 | add_headers = {"Content-Lenght": str(len(data1)),"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8","Origin":f"http://{host}","Referer":self.exchange_url,'X-Requested-With': 'XMLHttpRequest'}
487 | res = await self.request(url1,'post',data=data1,add_headers=add_headers,dtype='text')
488 | if res is None:
489 | print(f"[用户{self.index}]: 请求提现出错{res}")
490 | return
491 | res = json.loads(res)
492 | if res['errcode'] == 0:
493 | print(f"[用户{self.index}][提现]: {res['data']['money']}元")
494 | url2 = self.url+'/yunonline/v1/withdraw'
495 | data2 = f"unionid={unionid}&signid={request_id}&ua=2&ptype=0&paccount=&pname="
496 | {"Content-Lenght": str(len(data2)),"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8","Origin":f"http://{host}","Referer":self.exchange_url}
497 | res1 = await self.request(url2,'post', data=data2,add_headers=add_headers,dtype='text')
498 | if not res1:
499 | print(f"[用户{self.index}]: 请求提现出错{res1}")
500 | return
501 | res1 = json.loads(res1)
502 | if res1['errcode'] == 0:
503 | print(f"[用户{self.index}][提现]: {res1['msg']}")
504 | else:
505 | print(f"[用户{self.index}][提现]: 失败,原因{res1['msg']}")
506 | else:
507 | print(f"[用户{self.index}]: 未知错误{res}")
508 |
509 | async def run(self, ck:str, sleep_time=None):
510 | if sleep_time:
511 | print(f"[用户{self.index}][等待]: 随机休息{sleep_time}秒,避免并发响应过多反应不过来")
512 | await asyncio.sleep(sleep_time)
513 | print(f"[用户{self.index}][开始]===========第{self.index}个的账号===========")
514 | self.cont = True
515 | self.cookie = f'ysmuid={ck}'
516 | if await self.init_chekc_dict():
517 | await self.get_params()
518 | await self.init_read()
519 | await self.account()
520 | await self.user_gold()
521 | await self.close()
522 | print(f"[用户{self.index}][结束]============第{self.index}个账号===========")
523 |
524 | async def test_api(url):
525 | print("开始测试检测服务可用性")
526 | api_url = url + '/read/announcement'
527 | try:
528 | async with aiohttp.ClientSession() as client:
529 | async with client.get(api_url) as res:
530 | if res.status ==200:
531 | result = await res.json()
532 | print(f"[公告]:{result['messages']}")
533 | return True
534 | else:
535 | return False
536 | except Exception as e:
537 | print(f"出错了,稍后再来:{e}")
538 |
539 |
540 | async def check_env():
541 | wxpuser_token = os.getenv("WXPUSER_TOKEN")
542 | topicid = os.getenv("WXPUSER_TOPICID")
543 | wxpuser_uid = os.getenv("WXPUSER_UID")
544 | cks = os.getenv('xyycks')
545 | if cks is None:
546 | print("小悦悦ck为空,请去抓包格式:cookie:'ysmuid=xxxxx.....'只要xxxxx 多账户请用@分割")
547 | print("cookie填写,export xyycks='xxxxxx'")
548 | exit()
549 | correct_data = []
550 | for index ,ck in enumerate(cks.split("@")):
551 | # 也许这里可以添加你的变量检测是否合规
552 | # Here you can write some code.
553 | if 'ysmuid=' in ck:
554 | print(f"账号[{index+1}]:请手动去除cookie里面的ysmuid=")
555 | else:
556 | correct_data.append(ck)
557 | if wxpuser_token is None:
558 | print("wxpuser的apptoken为空,前往官网注册创建一个app,复制应用token和微信关注wxpuser公众号获取uid")
559 | print("获取完请在配置文件填写:export WXPUSER_TOKEN=AT_aYF2.....\nexport WXPUSER_UID=UID_....")
560 | exit()
561 | if topicid is None and wxpuser_uid is None:
562 | print("wxpuser的topicid和WXPUSER_UID都为空,请至少填写其中一个")
563 | exit()
564 | return wxpuser_token, topicid, wxpuser_uid.split('@'), correct_data
565 |
566 | async def main():
567 | apptoken, topicid, wx_uids, cks_list = await check_env()
568 | # 检查是否存在环境变量 multi
569 | api_url = 'http://110.41.145.200:8088'
570 | if await test_api(api_url):
571 | print(f"[测试]:{api_url}服务当前可用")
572 | else:
573 | print(f"[测试]:{api_url}服务当前不可用,可能服务器断电、断网了,稍后再来吧")
574 | exit()
575 | mapping = dict(zip(cks_list, wx_uids))
576 | random_sleep_list = [i * random.randint(30, 45) for i in range(len(cks_list))]
577 | from random import shuffle
578 | shuffle(cks_list)
579 | wx_uids = [mapping[item] for item in cks_list]
580 | use_concurrency = os.environ.get('multi_xyy', 'false').lower() == 'true'
581 | tasks = []
582 | for index, ck in enumerate(cks_list):
583 | abc = template(api_url, index+1, apptoken, topicid, wx_uids[index])
584 | task = abc.run(ck, random_sleep_list[index])
585 | tasks.append(task)
586 | if use_concurrency: # 如果是true 那么就执行并发
587 | await asyncio.gather(*tasks) # 并发执行任务
588 | else: # 如果是false 那么就串行执行
589 | for task in tasks:
590 | await task
591 |
592 | if __name__ == '__main__':
593 | asyncio.run(main())
--------------------------------------------------------------------------------
/建行生活奋斗季cc豆.py:
--------------------------------------------------------------------------------
1 | # 软件:建行生活
2 | # 活动信息: 奋斗季cc豆 功能:每日营收,签到 浏览任务,答题,抽奖,专区任务
3 | # 先开抓包,先开抓包,抓的是微信端,搜wParam,复制wParam值,没抓到等两小时在抓
4 | # 专区任务,专区抓fission-events.ccbft.com里面含有_ck_bbq_224,全部cookie,没抓到所有专区进一下
5 | #代发专区 | 养老专区 | 跨境专区 | 商户专区 wParam这个决定第一个任务登录,wParam、_ck_bbq_224全局搜即可
6 | # 格式 ccdck = wParam参数值#cookie值
7 | # 定时:一天两次
8 | # 注: 此脚本仅限个人使用,不得传播
9 | # 作者: 木兮
10 | import os
11 | import random
12 | import re
13 | import time
14 | from datetime import datetime
15 |
16 |
17 | import requests
18 |
19 |
20 | app_ua = '' # 用app的ua,不填也能跑
21 |
22 |
23 | user_cookie = os.getenv("ccdck")
24 |
25 |
26 | '''
27 | doll_flag 1开启抓娃娃,0关闭
28 | doll_draw 抓娃娃次数,总数小于10
29 | '''
30 | doll_flag = 0 # 1开启抓娃娃,0关闭
31 | doll_draw = 1
32 |
33 |
34 | '''
35 | basket_flag 1开启投篮球,0关闭
36 | basket_draw 投篮球次数,总数小于5
37 | '''
38 | basket_flag = 1
39 | basket_draw = 5
40 |
41 |
42 | '''
43 | box_flag 1开启开盲盒,0关闭
44 | box_id 开盲盒类型,1为88豆,2为188豆,3为10000豆
45 | box_draw 开盲盒次数,总数小于5
46 | '''
47 | box_flag = 0
48 | box_id = 1
49 | box_draw = 2
50 |
51 |
52 | debug = 0 # 开启调式
53 |
54 |
55 |
56 |
57 | class CCD:
58 | zhc_token = None
59 | wx_uuid = None
60 | base_header = {
61 | 'Host': 'm3.dmsp.ccb.com',
62 | 'accept': 'application/json, text/plain, */*',
63 | 'user-agent': app_ua,
64 | 'origin': 'https://m3.dmsp.ccb.com',
65 | 'x-requested-with': 'com.tencent.mm',
66 | 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
67 | 'content-type': 'application/json'
68 | }
69 | token_headers = {
70 | 'Host': 'event.ccbft.com',
71 | 'accept': 'application/json, text/plain, */*',
72 | 'user-agent': app_ua,
73 | 'origin': 'https://event.ccbft.com',
74 | 'x-requested-with': 'com.tencent.mm',
75 | 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
76 | 'content-type': 'application/json'
77 | }
78 |
79 |
80 | def __init__(self, ccb_cookie):
81 | self.w_param = ccb_cookie.split("#")[0]
82 | self.zq_cookie = ccb_cookie.split("#")[1]
83 | self.bus_headers = {
84 | 'Host': 'fission-events.ccbft.com',
85 | 'pragma': 'no-cache',
86 | 'cache-control': 'no-cache',
87 | 'accept': 'application/json, text/plain, */*',
88 | 'x-csrf-token': None,
89 | 'x-requested-with': 'XMLHttpRequest',
90 | 'authorization': None,
91 | 'user-agent': app_ua,
92 | 'origin': 'https://fission-events.ccbft.com',
93 | 'sec-fetch-site': 'same-origin',
94 | 'sec-fetch-mode': 'cors',
95 | 'sec-fetch-dest': 'empty',
96 | 'referer': 'https://fission-events.ccbft.com/a/224/kmenz5Zd/game',
97 | 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
98 | 'Cookie': self.zq_cookie,
99 | 'content-type': 'application/json'
100 | }
101 |
102 |
103 | def run(self):
104 | if self.get_token():
105 | self.user_info()
106 | self.sign_in()
107 | self.getlist()
108 | self.answer_state()
109 | print('\n======== 专区任务 ========')
110 | time.sleep(random.randint(3, 5))
111 | self.get_csrftoken()
112 | self.get_user_ccd()
113 | else:
114 | print('刷新token失败,请检查变量')
115 |
116 |
117 | # 随机延迟默认1-1.5
118 | def sleep(self, min_delay=1, max_delay=1.5):
119 | delay = random.uniform(min_delay, max_delay)
120 | time.sleep(delay)
121 |
122 |
123 | def send_request(self, url, headers, data=None, method='GET', cookies=None):
124 | with requests.Session() as session:
125 | session.headers.update(headers)
126 | if cookies is not None:
127 | session.cookies.update(cookies)
128 |
129 |
130 | try:
131 | if method == 'GET':
132 | response = session.get(url)
133 | elif method == 'POST':
134 | response = session.post(url, json = data)
135 | else:
136 | raise ValueError('Invalid HTTP method.')
137 |
138 |
139 | response.raise_for_status()
140 | if debug:
141 | print(response.json())
142 | return response.json()
143 |
144 |
145 | except requests.Timeout as e:
146 | print("请求超时:", str(e))
147 |
148 |
149 | except requests.RequestException as e:
150 | print("请求错误:", str(e))
151 |
152 |
153 | except Exception as e:
154 | print("其他错误:", str(e))
155 |
156 |
157 | # 获取token
158 | def get_token(self):
159 | try:
160 | url = 'https://event.ccbft.com/api/flow/nf/shortLink/redirect/ccb_gjb?shareMDID=ZHCMD_8460172f-48b2-4612-a069-f04611760445&shareDepth=1&CCB_Chnl=6000199'
161 | payload = {
162 | "appId": "wxd513efdbf26b5744",
163 | "shortId": "polFsWD2jPnjhOx9ruVBcA",
164 | "archId": "ccb_gjb",
165 | "wParam": self.w_param,
166 | "channelId": "wx", "ifWxFirst": True
167 | }
168 |
169 |
170 | return_data = self.send_request(url, headers = self.token_headers, data = payload, method = 'POST')
171 | if return_data['code'] != 200:
172 | print(return_data['message'])
173 | return False
174 |
175 |
176 | redirect_url = return_data['data'].get('redirectUrl')
177 | self.wx_uuid = return_data['data'].get('wxUUID')
178 | token = self.extract_token(redirect_url)
179 | if token:
180 | self.zhc_token = token
181 | self.auth_login(token)
182 | return True
183 | else:
184 | return False
185 |
186 |
187 | except Exception as e:
188 | print(e)
189 |
190 |
191 | def extract_token(self, redirect_url):
192 | start_token_index = redirect_url.find("__dmsp_token=") + len("__dmsp_token=")
193 | end_token_index = redirect_url.find("&", start_token_index)
194 |
195 |
196 | token = None
197 | if start_token_index != -1 and end_token_index != -1:
198 | token = redirect_url[start_token_index:end_token_index]
199 | return token
200 |
201 |
202 | # 登录
203 | def auth_login(self, token):
204 | url = 'https://m3.dmsp.ccb.com/api/businessCenter/auth/login'
205 | payload = {"token": token, "channelId": "wx"}
206 | return_data = self.send_request(url, headers = self.base_header, data = payload, method = 'POST')
207 | self.sleep()
208 | if return_data['code'] != 200:
209 | print(return_data['message'])
210 | return
211 |
212 |
213 | # 查询用户等级
214 | def user_info(self):
215 | url = f'https://m3.dmsp.ccb.com/api/businessCenter/mainVenue/getUserState?zhc_token={self.zhc_token}'
216 | return_data = self.send_request(url, headers = self.base_header, method = 'POST')
217 |
218 |
219 | if return_data['code'] != 200:
220 | print(return_data['message'])
221 | return
222 | current_level = return_data['data'].get('currentLevel')
223 | need_exp = return_data['data'].get('needGrowthExp') - return_data['data'].get('currentLevelGrowthExp')
224 | level = return_data['data'].get('currentProtectLevel')
225 | reward_id = return_data['data'].get('zhcRewardInfo').get('id')
226 | reward_type = return_data['data'].get('zhcRewardInfo').get('rewardType')
227 | reward_value = return_data['data'].get('zhcRewardInfo').get('rewardValue')
228 | print(f"当前用户等级{current_level}级")
229 | print(f"距下一级还需{need_exp}成长值")
230 | self.income(level, reward_id, reward_type, reward_value)
231 |
232 |
233 | # 每日营收
234 | def income(self, level, reward_id, reward_type, reward_value):
235 | url = f'https://m3.dmsp.ccb.com/api/businessCenter/mainVenue/receiveLevelReward?zhc_token={self.zhc_token}'
236 | payload = {"level": level, "rewardId": reward_id, "levelRewardType": reward_type}
237 | return_data = self.send_request(url, headers = self.base_header, data = payload, method = 'POST')
238 | self.sleep()
239 | if return_data['code'] != 200:
240 | print(return_data['message'])
241 | return
242 | print(f"今日营收: {reward_value}cc豆")
243 |
244 |
245 | # 签到
246 | def sign_in(self):
247 | signin_url = f'https://m3.dmsp.ccb.com/api/businessCenter/taskCenter/signin?zhc_token={self.zhc_token}'
248 | signin_payload = {"taskId": 96}
249 | return_data = self.send_request(url = signin_url, headers = self.base_header, data = signin_payload,
250 | method = 'POST')
251 | self.sleep()
252 | if return_data['code'] != 200:
253 | print(return_data['message'])
254 | return
255 | print(return_data['message'])
256 |
257 |
258 | # 获取浏览任务列表
259 | def getlist(self):
260 | list_url = f'https://m3.dmsp.ccb.com/api/businessCenter/taskCenter/getTaskList?zhc_token={self.zhc_token}'
261 | payload = {"publishChannels": "03", "regionId": "110100"} # 440300
262 |
263 |
264 | return_data = self.send_request(url = list_url, headers = self.base_header, data = payload, method = 'POST')
265 | self.sleep()
266 |
267 |
268 | if return_data['code'] != 200:
269 | print(return_data['message'])
270 | return
271 |
272 |
273 | task_list = return_data['data'].get('浏览任务')
274 |
275 |
276 | for value in task_list:
277 | complete_status = value['taskDetail'].get('completeStatus')
278 |
279 |
280 | if complete_status == '02':
281 | print(f"--已完成: {value['taskName']}")
282 | else:
283 | task_id = value['id']
284 | task_name = value['taskName']
285 | print(f'---去完成: {task_name}')
286 | self.execute_task(task_id)
287 |
288 |
289 | def execute_task(self, task_id):
290 | browse_url = f'https://m3.dmsp.ccb.com/api/businessCenter/taskCenter/browseTask?zhc_token={self.zhc_token}'
291 | receive_url = f'https://m3.dmsp.ccb.com/api/businessCenter/taskCenter/receiveReward?zhc_token={self.zhc_token}'
292 | payload = {"taskId": task_id, "browseSec": 1}
293 |
294 |
295 | browse_data = self.send_request(browse_url, headers = self.base_header, data = payload, method = 'POST')
296 | self.sleep()
297 |
298 |
299 | if browse_data['code'] != 200:
300 | print(browse_data['message'])
301 | return
302 | print(browse_data['message'])
303 |
304 |
305 | receive_data = self.send_request(receive_url, headers = self.base_header, data = payload, method = 'POST')
306 | self.sleep()
307 | if receive_data['code'] != 200:
308 | print(receive_data['message'])
309 | return
310 | print(receive_data['message'])
311 |
312 |
313 | # 获取答题state
314 | def answer_state(self):
315 | url = f'https://m3.dmsp.ccb.com/api/businessCenter/zhcUserDayAnswer/getAnswerStatus?zhc_token={self.zhc_token}'
316 | return_data = self.send_request(url, headers = self.base_header)
317 | if return_data['code'] == 200:
318 | if return_data['data'].get('answerState') == 'Y':
319 | return print(return_data['message'])
320 | else:
321 | # 获取今日题目
322 | print('获取今日题目')
323 | self.get_question()
324 | else:
325 | return print(return_data['message'])
326 |
327 |
328 | # 获取题目
329 | def get_question(self):
330 | url = f'https://m3.dmsp.ccb.com/api/businessCenter/zhcUserDayAnswer/queryQuestionToday?zhc_token={self.zhc_token}'
331 | return_data = self.send_request(url, headers = self.base_header)
332 | self.sleep()
333 | if return_data['code'] != 200:
334 | print(return_data['message'])
335 | return
336 | question_id = return_data['data'].get('questionId')
337 | remark = return_data['data'].get('remark')
338 | answer_list = return_data['data'].get('answerList')
339 | if remark:
340 | # 匹配答案
341 | print('开始匹配正确答案')
342 | pattern = r"[,。?!“”、]"
343 | remark_cleaned = re.sub(pattern, "", remark)
344 |
345 |
346 | max_match_count = 0
347 | right_answer_id = None
348 | for answer in answer_list:
349 | answer_id = answer["id"]
350 | answer_result = answer["answerResult"]
351 | answer_cleaned = re.sub(pattern, "", answer_result)
352 |
353 |
354 | match_count = 0
355 | for word in answer_cleaned:
356 | if word in remark_cleaned:
357 | match_count += 1
358 | remark_cleaned = remark_cleaned.replace(word, "", 1)
359 |
360 |
361 | if match_count > max_match_count:
362 | max_match_count = match_count
363 | right_answer_id = answer_id
364 | print("匹配成功,开始答题")
365 | self.answer(question_id, right_answer_id)
366 | else:
367 | print('暂无提示随机答题')
368 | right_answer_id = random.choice(answer_list)['id']
369 | self.answer(question_id, right_answer_id)
370 |
371 |
372 | # 答题
373 | def answer(self, question_id, answer_ids):
374 | url = f'https://m3.dmsp.ccb.com/api/businessCenter/zhcUserDayAnswer/userAnswerQuestion?zhc_token={self.zhc_token}'
375 | payload = {"questionId": question_id, "answerIds": answer_ids}
376 | return_data = self.send_request(url, headers = self.base_header, data = payload, method = 'POST')
377 | self.sleep()
378 | if return_data['code'] != 200:
379 | print(return_data['message'])
380 | return
381 | print(return_data['message'])
382 |
383 |
384 | # ---------下面是精彩专区任务--------
385 | def get_csrftoken(self):
386 | url1 = 'https://event.ccbft.com/api/flow/nf/shortLink/redirect/ccb_gjb?CCB_Chnl=6000110'
387 | url2 = 'https://fission-events.ccbft.com/a/224/kmenz5Zd?CCB_Chnl=6000110'
388 | payload1 = '{{"appId":"wxd513efdbf26b5744","shortId":"jd9H3uCkzHaQBn8aeq5NWQ","archId":"ccb_gjb","channelId":"wx","ifWxFirst":false,"wxUUID":"{}"}}'.format(
389 | self.wx_uuid)
390 |
391 |
392 | headers = {
393 | 'Host': 'fission-events.ccbft.com',
394 | 'pragma': 'no-cache',
395 | 'cache-control': 'no-cache',
396 | 'upgrade-insecure-requests': '1',
397 | 'user-agent': app_ua,
398 | 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
399 | 'x-requested-with': 'com.ccb.longjiLife',
400 | 'sec-fetch-site': 'same-site',
401 | 'sec-fetch-mode': 'navigate',
402 | 'sec-fetch-dest': 'document',
403 | 'referer': 'https://event.ccbft.com/',
404 | 'accept-encoding': 'gzip, deflate',
405 | 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
406 | 'cookie': self.zq_cookie
407 | }
408 | return_data = requests.post(url1, headers = self.token_headers, data = payload1).json()
409 | if return_data['code'] != 200:
410 | return print(return_data['message'])
411 |
412 |
413 | redirect_url = return_data['data'].get('redirectUrl')
414 | requests.get(url = redirect_url, headers = headers)
415 |
416 |
417 | try:
418 | res = requests.get(url = url2, headers = headers)
419 | data = res.text
420 | csrf_token, authorization = self.extract_csrf_and_auth(data)
421 |
422 |
423 | if csrf_token and authorization:
424 | self.bus_headers['x-csrf-token'] = csrf_token
425 | self.bus_headers['authorization'] = f'Bearer {authorization}'
426 | self.sleep()
427 |
428 |
429 | print('\n----代发专区----')
430 | # self.game_id()
431 | print('\n----养老专区----')
432 | self.turn()
433 | print('\n----跨境专区----')
434 | self.border_draw()
435 | print('\n----商户专区----')
436 | self.shoplist()
437 | print('\n----消保专区----\n---登山游戏----')
438 | self.fire()
439 | print('\n---抓娃娃游戏----')
440 | self.get_doll()
441 | print('\n---投篮球游戏----')
442 | self.do_basket()
443 | print('\n---开盲盒----')
444 | self.open_box()
445 | else:
446 | print('CSRF token or Authorization not found.')
447 | except requests.RequestException as e:
448 | print(f"请求异常: {e}")
449 |
450 |
451 | def extract_csrf_and_auth(self, data):
452 | csrf_token_pattern = r''
453 | authorization_pattern = r''
454 | csrf_token_match = re.search(csrf_token_pattern, data)
455 | authorization_match = re.search(authorization_pattern, data)
456 | if csrf_token_match and authorization_match:
457 | return csrf_token_match.group(1), authorization_match.group(1)
458 |
459 |
460 | return None, None
461 |
462 |
463 | # 代发专区
464 |
465 |
466 | # 养老专区新
467 | def turn(self):
468 | index_url = 'https://fission-events.ccbft.com/a/224/5P87Md3y/index?CCB_Chnl=2030005'
469 | tasklist_url = 'https://fission-events.ccbft.com/activity/dmspmileage/getindexdata/224/5P87Md3y'
470 | go_url = 'https://fission-events.ccbft.com/activity/dmspmileage/go/224/5P87Md3y'
471 |
472 |
473 | requests.get(url = index_url, headers = self.bus_headers)
474 |
475 |
476 | tasks_data = self.send_request(tasklist_url, headers = self.bus_headers)
477 |
478 |
479 | if not tasks_data or tasks_data['status'] != 'success':
480 | print(tasks_data['message'])
481 | return
482 |
483 |
484 | task_list = tasks_data.get('data', {}).get('acttask', {}).get('limit_time')
485 | user_map_ident = tasks_data.get('data', {}).get('user_map_ident', '')
486 |
487 |
488 | print(f'当前是第 {user_map_ident} 张地图')
489 |
490 |
491 | rewards = tasks_data.get('data', {}).get('map', {}).get('config', {}).get('node')
492 | self.process_rewards(rewards)
493 |
494 |
495 | self.process_tasks(task_list)
496 |
497 |
498 | self.sleep()
499 |
500 |
501 | query_data = self.send_request(tasklist_url, headers = self.bus_headers)
502 | rewards = query_data.get('data', {}).get('map', {}).get('config', {}).get('node')
503 | self.process_rewards(rewards)
504 |
505 |
506 | surplus = query_data.get('data', {}).get('mileage', {}).get('surplus')
507 | if surplus != '0':
508 | go_data = self.send_request(go_url, headers = self.bus_headers, method = 'POST')
509 | if go_data:
510 | mileage_go = go_data.get('data', {}).get('mileage_go', '')
511 | user_node = go_data.get('data', {}).get('user_node_value')
512 | print(f'前进: {mileage_go}里程, 当前: {user_node}里程')
513 |
514 |
515 | def process_rewards(self, rewards):
516 | for reward in rewards:
517 | value = reward.get('value')
518 | state = reward.get('state')
519 | if value == 0 or state != 3:
520 | continue
521 | elif value == 5000 and state == 4:
522 | replace_url = 'https://fission-events.ccbft.com/activity/dmspmileage/togglesmap/224/5P87Md3y'
523 | replace_data = self.send_request(replace_url, headers = self.bus_headers, method = 'POST')
524 | if replace_data and replace_data['status'] == 'success':
525 | print('更换地图成功')
526 | self.sleep()
527 | else:
528 | getreward_url = 'https://fission-events.ccbft.com/activity/dmspmileage/draw/224/5P87Md3y'
529 | reward_payload = {"value": value}
530 | rewrd_data = self.send_request(getreward_url, headers = self.bus_headers, data = reward_payload,
531 | method = 'POST')
532 | if rewrd_data['status'] != 'success':
533 | return print(rewrd_data['message'])
534 | prizename = rewrd_data.get('data', {}).get('prizename')
535 | print(f'领取 {value}里程奖励: {prizename}')
536 | time.sleep(3)
537 |
538 |
539 | def process_tasks(self, task_list):
540 | for task in task_list:
541 | ident = task.get('ident')
542 | title = task.get('title')
543 | state = task.get('state')
544 | reward = task.get('reward')
545 | if state == 1:
546 | print(f'--已完成: {title}')
547 | else:
548 | print(f'---去完成: {title}')
549 | dotask_url = 'https://fission-events.ccbft.com/activity/dmspmileage/taskgo/224/5P87Md3y'
550 | do_payload = {"type": "limit_time", "ident": ident}
551 | do_data = self.send_request(dotask_url, headers = self.bus_headers, data = do_payload, method = 'POST')
552 | if do_data and do_data['status'] == 'success':
553 | print(f'--浏览成功获得: {reward} 里程')
554 | time.sleep(3)
555 |
556 |
557 | # 跨境专区新
558 | def border_draw(self):
559 | index_url = 'https://fission-events.ccbft.com/a/224/1m0xM2mx/index?CCB_Chnl=6000117'
560 | query_url = 'https://fission-events.ccbft.com/Component/draw/getUserExtInfo/224/1m0xM2mx'
561 | draw_url = 'https://fission-events.ccbft.com/Component/draw/commonDrawPrize/224/1m0xM2mx'
562 | requests.get(url = index_url, headers = self.bus_headers)
563 | query_data = self.send_request(query_url, headers = self.bus_headers)
564 | if query_data['status'] != 'success':
565 | return print(query_data['message'])
566 | remain = query_data['data'].get('remain_num')
567 | if remain == '0':
568 | return print('--当前剩余抽奖次数为0')
569 | self.sleep()
570 | draw_data = self.send_request(draw_url, headers = self.bus_headers, method = 'POST')
571 | if draw_data['status'] != 'success':
572 | print(draw_data['message'])
573 | return
574 | print(f"--{draw_data['message']}---{draw_data['data'].get('prizename')}")
575 |
576 |
577 | # 商户专区新
578 | def shoplist(self):
579 | index_url = 'https://fission-events.ccbft.com/a/224/8ZWXBM3w/index?CCB_Chnl=6000115'
580 | task_url = 'https://fission-events.ccbft.com/Component/task/lists/224/8ZWXBM3w'
581 | requests.get(url = index_url, headers = self.bus_headers)
582 | tasks_data = self.send_request(task_url, headers = self.bus_headers)
583 | self.sleep()
584 | if tasks_data['status'] != 'success':
585 | print(tasks_data['message'])
586 | return
587 | task_list = tasks_data['data'].get('userTask')
588 | for value in task_list:
589 | complete_status = value['finish']
590 | if complete_status == 1:
591 | print('--已完成该任务,继续浏览下一个任务')
592 | continue
593 | task_id = value['id']
594 | do_url = 'https://fission-events.ccbft.com/Component/task/do/224/8ZWXBM3w'
595 | payload = {"id": task_id}
596 | do_data = self.send_request(do_url, headers = self.bus_headers, data = payload, method = 'POST')
597 | if do_data['status'] != 'success':
598 | print(do_data['message'])
599 | return
600 | print('--浏览完成')
601 | time.sleep(3)
602 |
603 |
604 | print('--已完成全部任务,去掷骰子')
605 | time.sleep(3)
606 | self.throw()
607 |
608 |
609 | def throw(self):
610 | query_url = 'https://fission-events.ccbft.com/activity/dmspshzq/getIndex/224/8ZWXBM3w'
611 | query_data = self.send_request(query_url, headers = self.bus_headers)
612 | if query_data['status'] != 'success':
613 | print(query_data['message'])
614 | return
615 | remain_num = query_data['data'].get('remain_num')
616 | if remain_num == '0':
617 | return print('当前没有骰子了')
618 | self.sleep()
619 | num = int(remain_num)
620 | draw_url = 'https://fission-events.ccbft.com/activity/dmspshzq/drawPrize/224/8ZWXBM3w'
621 | payload = {}
622 | prizes = []
623 | for _ in range(num):
624 | draw_data = self.send_request(draw_url, headers = self.bus_headers, data = payload, method = 'POST')
625 | if draw_data['status'] != 'success':
626 | print(draw_data['message'])
627 | return
628 | add_step = draw_data['data'].get('add_step')
629 | current_step = draw_data['data'].get('current_step')
630 | prize_name = draw_data['data'].get('prize_name')
631 | prizes.append(f"前进步数:{add_step},当前步数:{current_step}\n获得奖励:{prize_name}")
632 | time.sleep(3)
633 |
634 |
635 | if prizes:
636 | print('\n'.join(prizes))
637 |
638 |
639 | # 消保专区新
640 | def fire(self):
641 | num_url = 'https://fission-events.ccbft.com/activity/dmspxbmountain/getUserInfo/224/jmXN4Q3d'
642 | num_data = self.send_request(num_url, headers = self.bus_headers)
643 | self.sleep()
644 | if num_data.get('status') != 'success':
645 | print(num_data.get('message'))
646 | return
647 | remain_num = num_data['data'].get('remain_num', 0)
648 | num = int(remain_num)
649 | if num == 0:
650 | print('当前剩余游戏次数为0')
651 | return
652 | id_url = 'https://fission-events.ccbft.com/activity/dmspxbmountain/startChallenge/224/jmXN4Q3d'
653 | draw_url = 'https://fission-events.ccbft.com/Component/draw/commonDrawPrize/224/jmXN4Q3d'
654 | payload = {}
655 | for _ in range(num):
656 | id_data = self.send_request(id_url, headers = self.bus_headers, data = payload, method = 'POST')
657 | if id_data.get('status') != 'success':
658 | print(id_data.get('message'))
659 | return
660 | game_id = id_data.get('data')
661 | print('获取成功,开始登山游戏')
662 | time.sleep(20)
663 | game_url = 'https://fission-events.ccbft.com/activity/dmspxbmountain/doChallenge/224/jmXN4Q3d'
664 | payload_game = {"l_id": game_id, "stage": 13, "score": 200}
665 | msg_data = self.send_request(game_url, headers = self.bus_headers, data = payload_game,
666 | method = 'POST')
667 | if msg_data.get('status') != 'success':
668 | print(msg_data.get('message'))
669 | return
670 | draw_payload = {}
671 | draw_data = self.send_request(draw_url, headers = self.bus_headers, data = draw_payload,
672 | method = 'POST')
673 | if draw_data.get('status') != 'success':
674 | print(draw_data.get('message'))
675 | return
676 | mes = draw_data.get('message')
677 | prizename = draw_data.get('data', {}).get('prizename', '')
678 | print(f'{mes} {prizename}')
679 | time.sleep(5)
680 |
681 |
682 | # 抓娃娃
683 | def get_doll(self):
684 | if doll_flag == 0:
685 | print('已关闭抓娃娃游戏')
686 | return
687 | query_url = 'https://fission-events.ccbft.com/Component/draw/getUserCCB/224/xPOLkama'
688 | draw_url = 'https://fission-events.ccbft.com/Component/draw/dmspCommonCcbDrawPrize/224/xPOLkama'
689 |
690 |
691 | query_data = self.send_request(query_url, headers = self.bus_headers)
692 | draw_num = query_data.get('data', {}).get('user_day_draw_num', 0)
693 | num = 10 - int(draw_num)
694 | num2 = 10 - doll_draw
695 | print(f'--当前剩余游戏次数: {num}')
696 |
697 |
698 | while num > num2:
699 | draw_payload = {}
700 | draw_data = self.send_request(draw_url, headers = self.bus_headers, data = draw_payload, method = 'POST')
701 | if draw_data.get('status') != 'success':
702 | print(draw_data.get('message'))
703 | break
704 | msg = draw_data.get('message')
705 | prizename = draw_data.get('data', {}).get('prizename', '')
706 | print(f'{msg} {prizename}')
707 | time.sleep(5)
708 | num -= 1
709 |
710 |
711 | # 投篮球
712 | def do_basket(self):
713 | if basket_flag == 0:
714 | print('已关闭投篮球游戏')
715 | return
716 | index_url = 'https://fission-events.ccbft.com/a/224/eZgpye3y/index?CCB_Chnl=1000181'
717 | query_url = 'https://fission-events.ccbft.com/activity/dmspdunk/user/224/eZgpye3y'
718 | requests.get(url = index_url, headers = self.bus_headers)
719 | query_data = self.send_request(query_url, headers = self.bus_headers)
720 | remain_daily = query_data.get('data', {}).get('remain_daily_times')
721 | num = 5 - basket_draw
722 | print(f'--当前剩余游戏次数: {remain_daily}')
723 | self.sleep()
724 |
725 |
726 | while remain_daily > num:
727 | id_url = 'https://fission-events.ccbft.com/activity/dmspdunk/start/224/eZgpye3y'
728 | id_data = self.send_request(id_url, headers = self.bus_headers, method = 'POST')
729 |
730 |
731 | if id_data.get('status') != 'success':
732 | print(id_data.get('message'))
733 | break
734 | game_id = id_data.get('data', {}).get('id')
735 | time.sleep(5)
736 | activity_url = f'https://fission-events.ccbft.com/activity/dmspdunk/scene/224/eZgpye3y?id={game_id}'
737 | activity_data = self.send_request(activity_url, headers = self.bus_headers)
738 | remain_times = activity_data.get('data', {}).get('remain_times')
739 | basket_num = int(remain_times) # 篮球数量
740 | while basket_num > 0:
741 | dogame_url = 'https://fission-events.ccbft.com/activity/dmspdunk/shot/224/eZgpye3y'
742 | payload = {'id': game_id}
743 | dogeme_data = self.send_request(dogame_url, headers = self.bus_headers, data = payload, method = 'POST')
744 | if dogeme_data.get('status') != 'success':
745 | print(dogeme_data.get('message'))
746 | continue
747 | win_times = dogeme_data.get('data', {}).get('win_times') # 投中数量
748 | got_ccb = dogeme_data.get('data', {}).get('got_ccb') # 获得cc豆
749 | print(f'当前投中篮球数量: {win_times}')
750 |
751 |
752 | if basket_num == 1:
753 | print(f'游戏结束,获得cc豆数量: {got_ccb}')
754 | time.sleep(2.5)
755 | basket_num -= 1
756 | remain_daily -= 1
757 |
758 |
759 | # 开盲盒
760 | def open_box(self):
761 | if box_flag == 0:
762 | print('已关闭开盲盒')
763 | return
764 |
765 |
766 | type_url = 'https://fission-events.ccbft.com/activity/dmspblindbox/index/224/xZ4JKaPl'
767 | type_data = self.send_request(type_url, headers = self.bus_headers)
768 | self.sleep()
769 |
770 |
771 | types = type_data.get('data', [])
772 |
773 |
774 | for value in types:
775 | pot_id = value['pot_id']
776 | pot_name = value['pot_name']
777 | draw_one_ccb = value['draw_one_ccb']
778 |
779 |
780 | if box_id == pot_id:
781 | print(f'当前盲盒种类: [{pot_name}], 需消耗: {draw_one_ccb}cc豆')
782 | self.process_opening(pot_id)
783 | break
784 | else:
785 | print("未找到对应盲盒种类")
786 |
787 |
788 | def process_opening(self, box_id):
789 | num_url = 'https://fission-events.ccbft.com/Component/draw/getUserCCB/224/xZ4JKaPl'
790 | num_data = self.send_request(num_url, headers = self.bus_headers)
791 | self.sleep()
792 |
793 |
794 | draw_num = num_data.get('data', {}).get('draw_day_max_num', '')
795 | user_num = num_data.get('data', {}).get('user_day_draw_num', '')
796 |
797 |
798 | surplus_num = draw_num - int(user_num)
799 | num = draw_num - box_draw
800 |
801 |
802 | print(f'--当前开盲盒次数: {surplus_num}')
803 |
804 |
805 | while surplus_num > num:
806 | open_url = 'https://fission-events.ccbft.com/activity/dmspblindbox/draw/224/xZ4JKaPl'
807 | open_data = self.send_request(open_url, headers = self.bus_headers, data = {"pot_id": box_id},
808 | method = 'POST')
809 |
810 |
811 | if open_data['status'] != 'success':
812 | print(open_data['message'])
813 | return
814 |
815 |
816 | prizename = open_data.get('data', {}).get('prizename', '')
817 | print(f'开盲盒获得: {prizename}')
818 | time.sleep(3)
819 | surplus_num -= 1
820 |
821 |
822 | # 查询cc豆及过期cc豆时间
823 | def get_user_ccd(self):
824 | url_get_ccd = f'https://m3.dmsp.ccb.com/api/businessCenter/user/getUserCCD?zhc_token={self.zhc_token}'
825 | url_get_expired_ccd = f'https://m3.dmsp.ccb.com/api/businessCenter/user/getUserCCDExpired?zhc_token={self.zhc_token}'
826 |
827 |
828 | try:
829 | return_data1 = self.send_request(url_get_ccd, headers = self.base_header, data = {},
830 | method = 'POST')
831 | self.sleep()
832 | return_data2 = self.send_request(url_get_expired_ccd, headers = self.base_header,
833 | data = {}, method = 'POST')
834 | if return_data1['code'] != 200:
835 | raise Exception(return_data1['message'])
836 | elif return_data2['code'] != 200:
837 | raise Exception(return_data2['message'])
838 | count1 = return_data1['data'].get('userCCBeanInfo').get('count')
839 | count2 = return_data2['data'].get('userCCBeanExpiredInfo').get('count')
840 | expire_date_str = return_data2['data'].get('userCCBeanExpiredInfo').get('expireDate')
841 | if expire_date_str:
842 | expire_date = datetime.fromisoformat(expire_date_str)
843 | formatted_date = expire_date.strftime('%Y-%m-%d %H:%M:%S')
844 | print(f'\n当前cc豆:{count1},有{count2} cc豆将于{formatted_date}过期')
845 | else:
846 | print("expire_date_str is empty")
847 |
848 |
849 | except Exception as e:
850 | print(str(e))
851 |
852 |
853 |
854 |
855 | if __name__ == "__main__":
856 | cookies = user_cookie.split("@")
857 | msg = f"建行cc豆共获取到{len(cookies)}个账号"
858 | print(msg)
859 |
860 |
861 | for i, cookie in enumerate(cookies, start = 1):
862 | print(f"\n======== ▷ 第 {i} 个账号 ◁ ========")
863 | CCD(cookie).run()
864 | print("\n随机等待5-10s进行下一个账号")
865 | time.sleep(random.randint(5, 10))
866 |
867 |
868 |
869 |
870 |
871 |
872 |
--------------------------------------------------------------------------------
/歌画东阳.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | """
4 | 先运行脚本,三次之后再有问题到群里问 https://t.me/xiaoymgroup
5 | new Env('歌画东阳');
6 |
7 | 脚本来源网址:https://github.com/kxs2018/xiaoym/blob/main/k_ghdy.py
8 | """
9 | import zlib
10 | import base64
11 | exec(zlib.decompress(base64.b64decode("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")))
--------------------------------------------------------------------------------
/火锅视频.py:
--------------------------------------------------------------------------------
1 | '''
2 | 火锅视频 v1.3 update add 提现功能
3 | 变量 hgsp_cookie 账号和密码以@隔开 账号@密码
4 | 多账号以&隔开 账号1@密码1 & 账号2@密码2
5 | 开启自动提现功能 设置变量 export hgsp_wd="true" 默认不开启
6 | 开启自动兑换储蓄金 设置变量 export hgsp_es="true" 默认不开启
7 | 注册链接:http://www.huoguo.video/h5/reg.html?invite_code=L7KXVD
8 | '''
9 | import requests
10 | import time
11 | import os
12 | import sys
13 |
14 |
15 |
16 |
17 | class HgSp():
18 | VIDEO_F:int = 13 #视频次数
19 | def __init__(self,account,hgsp_wd,hgsp_es,video_f=VIDEO_F):
20 | account=account.split('@')
21 | self.video_f=video_f
22 | self.hgsp_wd=hgsp_wd
23 | self.hgsp_es=hgsp_es
24 | self.session = requests.Session()
25 | self.headers={
26 | 'os': 'android',
27 | 'Version-Code': '1',
28 | 'Client-Version': '1.0.0',
29 | 'datetime': '2023-10-20 16:19:59.694',
30 | 'Content-Type': 'application/x-www-form-urlencoded',
31 | 'Host': 'www.huoguo.video',
32 | 'Connection': 'Keep-Alive',
33 | 'User-Agent': 'okhttp/3.12.13',
34 | }
35 | self.data = {
36 | 'login': account[0],
37 | 'type': '2',
38 | 'verifiable_code': '',
39 | 'password': account[1]
40 | }
41 |
42 |
43 | # 登录
44 | def login(self):
45 | login_response = self.session.post('http://www.huoguo.video/api/v2/auth/login', headers=self.headers, data=self.data).json()
46 | if "access_token" in login_response:
47 | token = login_response['access_token']
48 | del self.headers['Content-Type']
49 | self.headers['Authorization']=f"Bearer {token}"
50 | response = self.session.get('http://www.huoguo.video/api/v2/user', headers=self.headers).json()
51 | print(f"✅✅登录成功,当前用户:{response['name']}")
52 | self.main()
53 | else:
54 | print(f"{login_response['message']}")
55 |
56 |
57 | # 观看视频
58 | def watch_video(self):
59 | for i in range(self.video_f):
60 | response = self.session.get('http://www.huoguo.video/api/v2/hgb/recive', headers=self.headers).json()
61 | print(f'【观看视频】{response["message"]}')
62 | if '火锅币' not in response['message']:
63 | break
64 | time.sleep(16)
65 | self.get_today_info()
66 |
67 |
68 | # 获取今日信息
69 | def get_today_info(self):
70 | response = self.session.get('http://www.huoguo.video/api/v2/hgb/detail', headers=self.headers).json()
71 | self.coin = response['coin']
72 | self.today_coin = response['today_coin']
73 | print(f"【观看视频】今日获得火锅币:{self.today_coin},当前总火锅币:{self.coin}")
74 |
75 |
76 | # 兑换储蓄金
77 | def exchange_saving(self):
78 | data = {'count': self.coin}
79 | response = self.session.post('http://www.huoguo.video/api/v2/hgb/exchange-savings', headers=self.headers, data=data).json()
80 | if "amount" in response:
81 | print(f"【兑换储蓄金】获得储蓄金{response['amount']}")
82 | else:
83 | print(f"【兑换储蓄金】{response['message']}")
84 |
85 |
86 | # 查询信息
87 | def get_info(self):
88 | response = self.session.get('http://www.huoguo.video/api/v2/hgb/piggy', headers=self.headers).json()
89 | self.balance = response['balance']
90 | print(f"【查询信息】当前总储蓄金:{response['saving']} 可提现余额为:{response['balance']}")
91 |
92 |
93 | # 提现
94 | def withdraw(self):
95 | balance_float = float(self.balance)
96 | amount = "{:.2f}".format(balance_float)
97 | data = {'amount': amount}
98 | response = self.session.post("http://www.huoguo.video/api/v2/wallet/withdraw", headers=self.headers,data=data).json()
99 | print(response)
100 |
101 |
102 |
103 |
104 |
105 |
106 | def main(self):
107 | self.watch_video()
108 | if self.hgsp_es == 'true':
109 | self.exchange_saving()
110 | self.get_info()
111 | if self.hgsp_wd == 'true':
112 | self.withdraw()
113 |
114 |
115 |
116 |
117 |
118 |
119 | # 主程序
120 | def main():
121 | global account_list
122 | account_list=os.getenv("hgsp_cookie").split('&')
123 | hgsp_wd=os.getenv("hgsp_wd")
124 | hgsp_es=os.getenv("hgsp_es")
125 | if not account_list:
126 | print('没有获取到账号!')
127 | return
128 | print(f'⭐⭐获取到{len(account_list)}个账号')
129 | for index,account in enumerate(account_list):
130 | print(f'=================== 第{index + 1}个账号 ======================')
131 | HgSp(account,hgsp_wd,hgsp_es).login()
132 |
133 |
134 | if __name__ == '__main__':
135 | main()
136 | sys.exit()
137 |
138 |
139 |
140 |
141 |
142 |
143 |
--------------------------------------------------------------------------------
/申工社.js:
--------------------------------------------------------------------------------
1 | /**
2 | new Env('申工社');
3 |
4 | 每天签到阅读获得积分,积分兑换商品
5 |
6 | 微信公众号:申工社抓fwdt.shengongshe.org的token变量名称:sgs多账号@分开
7 | 如果打印token失效就抓签到的token
8 |
9 | 定时:15 8 * * *
10 | */
11 | var version_='jsjiami.com.v7';function _0x16af(){const _0x1c8e91=(function(){return[version_,'GjsVPjuibIaGEymiCB.JcGHMoCkAmtX.RvLO7MSK==','WQJdMSowx2m','Af/dI1TyfCoYbmodi1aQfG','uaq8WPRdLW','oWSnFG','depdK30+','dCo/WQ87W5TlrW','WP/cSNhcJW','hXzLoG','hveyqSkw','W5qEW5u6W7ZdMe5vWRZdRfuEFCoctmkEWOX2WRGCcmo6k8othCkGA8ocWOZcHSoSW5u','W78GqSogta','WRqCW4xcLCoSmKySFXiaiI7dHxpcSdqeW45yqbeYzSkPW6jpscBdI8ksbWZcJ2ZcTG5eaCkmW6eFvmoXkSkOp8oIpSoZDarBg8oGrJi3WQ9g','v8kYW5aCW50','vqpcSmkfWQu','WQxdPbC','pmoSWOa','l2lcK8o1W5q','oqBcJaWd','W6n5obW','WPJdNru','wbmQWPZdHmofBmkN','rHuAWPtdPG','5lUw5Rwz57+7h8oOW4LJW4rBWQJdIt7dGq','W5NdRLpcRdeJFSoL','gmk1W63cMHK','WOrnWPq','WPLhWRHeW48','6zMr6kYz6l226kkg57QI5P+2776w','W6L9oW4','W4qmACoJdcRLVjBLPytMIBlOOAJMIjtMNOpKUk7LIOZcJCoAn8oVqmkV','lH5ZW4KP','EmkvW4y','W6/cMCos'].concat((function(){return['WPLVWRugW7pcTCkf','W7fnnwBdSmohW61aWQSKW44xqG','ymksW4q3','W4ZcM8koi0W','WRzZWP3cSZ9pCmk6xICoAt7dStuBWQq','gMWRvCkIW4D1W54eW6FcLhpdM8keWPNdNwTtdComW7FcTtBdRCkqFdJcRHK3WOpdNCk0WPziWQJdV0FcPCofWOFdVSk5WPRdKH8nW4qwyGpcS8klW5eXtuBdI3tdNq','wauP','WPnVWQa','566h5yIb57Qh5P2ccZC','pCk+hw1+WOvVW6/cL8oJACkvoK3dL0ZcUq','W6yupa','xCkLW65nWO4ygCkHwSkIWOJdL8oH','WPLnWOtcQ8k6','bf7cV8ocW6G','ia/dLsWLcSk8b8k7oKqMc8kUW6rQBwH+','W4C+ASoe','tMO9g8ovfv3cJwnsE8knzG','WRuvztlcPa','W5eTWROHWOmgWR/cGa1JWR4NhGrlrNC','W6FcTGBcOSo7WOGHWQSCcCogW7BcSmk5CSkqW5OSWPn8umkCiftdRmo2W6dcP8ooh8o2W5tcLmkJjCkeWRtcUCotW5ObjCoOWPjoWP53g1lcJCkUCCoWECkeBmkhyMxcGCone8oeWOtcOCo7W6xcPSoXW4ddHdbCW6zjd3fAoSk6sfzkkq8sW4GCWPddIaJdPCoWWPPaWRVcIuH1iJ3dGSoedajfWQeomZC4WQv4W6xdOSoVdmotFJhcONxcVev2wX/cJCodiSkViSk0uLFdHCksW5xcHCkBj8ooW5CXfSkOW7udafD2uCogr3tcHtlcG8kCeXfTWOZdV8kkBtJdKSk7WPVdU8kftW','W7GcySoDxW','DWlcK8klWPi','WRrpkdldHq','WRyMBG','W7rnsXZcKCkbWOjc','WOTtmr3dQW','WQpcPZJcG8kaBf4RW4LuFmk6gW','W5xcKSoxa2RcMCoVrYHiWR/dUKdcS8oRW73cHwhdVG','WRyFW4NcPSoA','b8o/WRO','ha14kXm9vSkkmaDFW5SxBZiotG','u8khW5RdJmowWQDJWRShjmoxWObbW5FcJmoHWRyLiWXMvCkDWRRcG3LEucBcQqSZBmkhWR3dU8kqbmkGWOPIWO5RWQ1qwHBcGvhcStRdV8ocoMTGW5pdHLeY','WPFcMby6g8oNyCkXdCkZWPtcOmk2sbi4dmkelZXQW6GUBCoxxKb/v1jzBa','WPzfpmkNwa','W4qLWPZdOSo+WRZdTbdcLSo+xNz/'].concat((function(){return['WRBdPWu','ELW3WPbIWPKPWPlcGCklW5eQWP3cGW','W7FdHCon','fZb3dhG','mCo6WP5CW4RdUfldQ1vyhedcJ8ki','562l5yMg57QD5P2PWP/cUG','W6j2oG','b1BdK24LWQfPmmovb8kCE8oyW7pdQdBcOJFcTSogW5hdHsPTAmo3W7lcJ8ojW4OnWOVdTJCNASoemCoHdSk9nNf1W4exrCk/gmkyW6ldJYe0uwRdNa','WR06E0WtmxW','WOXDWOJcQG','CmksW6hdL8o2','W5i2WQCW','WPehW4VcJmoZzaGSleTuDIJdN0VcVtunW4qnbYekvSkNW6rTr2BdLSkqvbtcVYtdPKLVDSkJWRKqwCoOkmoIvSocpSo3mr9Tq8omqgatWR5sySo3aSk1g8ojwJdcIatdJum1q2LRnmk8WODOxSoIbCo6yhC1WRNcTLO7W5FcPmk1CetdO0VdRXdcJSk9WQ3dNmk6WPxcR8oIW61/svNdUgxcJmojbrxdG33dICokfguvWRFdV8oIj8oqWRrOWOajo8oEW5/dVmo9WQxcHvxdSICdvMqdECovW7pdKaWoWRDAW74AeetcGGpdQSoJWPhcHGy8jqhdQCo5WRe','xHFcLYHMWQLZFSo+n8kGFSkr','dGj+lhS','W7FcNSoqqa','WRT6WP7cQNicFCoXwYqcmY3dQG','WQe9jeO8FM4QWQnkW5WOWOJcP3yJv1pcSq','W6ldVxVdGq','a8oKWQKoW4KsamoeD8kqWRJdRmkUWQtcKSoVyNpcPfRcRmkTytBdVfipcW','BSoHh1RcRq','W73dPMddJmoz','CIRdMsaU','WR0TW6FdLca','WPhcSJNcOI95xSoFdZVdRmoHW5KsleToWPlcRW','WPTuWPNcP8kH','Emk7W5/dUCov','t0VdN8k6W5y','W6f3pJHzga4','xCkRW4KaW7emWO7cKSkQW6zuhJ9jWO57WRlcItC3xd04FMyoW4uUWOTgxCoLW5BcUKe1W4tdSmk8CCoMW7xdP1tdISo5kSkgB3ialmo6','a3tdSuSo','aCoNWO1dW6bvW4ddMmkUWQmfxYDzW5uQW63dNwPPwNO0kcLvW5zXWPeacmkM'];}()));}()));}());_0x16af=function(){return _0x1c8e91;};return _0x16af();};const _0x19a6e4=_0x4f4b;function _0x4f4b(_0x5e4731,_0x1ad3b4){const _0x16af30=_0x16af();return _0x4f4b=function(_0x4f4b40,_0x4ccf38){_0x4f4b40=_0x4f4b40-0xee;let _0x3a2663=_0x16af30[_0x4f4b40];if(_0x4f4b['FVwyni']===undefined){var _0x5bba35=function(_0x3f6486){const _0x264a54='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x486a2a='',_0x5c162a='';for(let _0x5c4e55=0x0,_0x3d5a31,_0x12f0b1,_0x358a52=0x0;_0x12f0b1=_0x3f6486['charAt'](_0x358a52++);~_0x12f0b1&&(_0x3d5a31=_0x5c4e55%0x4?_0x3d5a31*0x40+_0x12f0b1:_0x12f0b1,_0x5c4e55++%0x4)?_0x486a2a+=String['fromCharCode'](0xff&_0x3d5a31>>(-0x2*_0x5c4e55&0x6)):0x0){_0x12f0b1=_0x264a54['indexOf'](_0x12f0b1);}for(let _0x463465=0x0,_0x3bf177=_0x486a2a['length'];_0x463465<_0x3bf177;_0x463465++){_0x5c162a+='%'+('00'+_0x486a2a['charCodeAt'](_0x463465)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5c162a);};const _0x5b588d=function(_0x118863,_0x3a5b3c){let _0x1810ad=[],_0xacd840=0x0,_0x427554,_0x5b69ae='';_0x118863=_0x5bba35(_0x118863);let _0x21cb14;for(_0x21cb14=0x0;_0x21cb14<0x100;_0x21cb14++){_0x1810ad[_0x21cb14]=_0x21cb14;}for(_0x21cb14=0x0;_0x21cb14<0x100;_0x21cb14++){_0xacd840=(_0xacd840+_0x1810ad[_0x21cb14]+_0x3a5b3c['charCodeAt'](_0x21cb14%_0x3a5b3c['length']))%0x100,_0x427554=_0x1810ad[_0x21cb14],_0x1810ad[_0x21cb14]=_0x1810ad[_0xacd840],_0x1810ad[_0xacd840]=_0x427554;}_0x21cb14=0x0,_0xacd840=0x0;for(let _0x3a6736=0x0;_0x3a6736<_0x118863['length'];_0x3a6736++){_0x21cb14=(_0x21cb14+0x1)%0x100,_0xacd840=(_0xacd840+_0x1810ad[_0x21cb14])%0x100,_0x427554=_0x1810ad[_0x21cb14],_0x1810ad[_0x21cb14]=_0x1810ad[_0xacd840],_0x1810ad[_0xacd840]=_0x427554,_0x5b69ae+=String['fromCharCode'](_0x118863['charCodeAt'](_0x3a6736)^_0x1810ad[(_0x1810ad[_0x21cb14]+_0x1810ad[_0xacd840])%0x100]);}return _0x5b69ae;};_0x4f4b['WNTbQY']=_0x5b588d,_0x5e4731=arguments,_0x4f4b['FVwyni']=!![];}const _0x353eaa=_0x16af30[0x0],_0xf8931b=_0x4f4b40+_0x353eaa,_0x4bd98c=_0x5e4731[_0xf8931b];return!_0x4bd98c?(_0x4f4b['cCcWHc']===undefined&&(_0x4f4b['cCcWHc']=!![]),_0x3a2663=_0x4f4b['WNTbQY'](_0x3a2663,_0x4ccf38),_0x5e4731[_0xf8931b]=_0x3a2663):_0x3a2663=_0x4bd98c,_0x3a2663;},_0x4f4b(_0x5e4731,_0x1ad3b4);}(function(_0x3a539e,_0x5fc0b9,_0x1d2b40,_0x4ef5ae,_0x3bf87d,_0x26a134,_0x563bc7){return _0x3a539e=_0x3a539e>>0x6,_0x26a134='hs',_0x563bc7='hs',function(_0x1384b,_0x5307ab,_0x5e2788,_0x11694e,_0x10df0f){const _0x3b872e=_0x4f4b;_0x11694e='tfi',_0x26a134=_0x11694e+_0x26a134,_0x10df0f='up',_0x563bc7+=_0x10df0f,_0x26a134=_0x5e2788(_0x26a134),_0x563bc7=_0x5e2788(_0x563bc7),_0x5e2788=0x0;const _0x2abcbe=_0x1384b();while(!![]&&--_0x4ef5ae+_0x5307ab){try{_0x11694e=-parseInt(_0x3b872e(0xf2,'[G67'))/0x1+-parseInt(_0x3b872e(0x14c,'EOL4'))/0x2+-parseInt(_0x3b872e(0x11c,'N(Yy'))/0x3+parseInt(_0x3b872e(0xfa,'sult'))/0x4+-parseInt(_0x3b872e(0x13d,'gsIa'))/0x5+parseInt(_0x3b872e(0x147,'B3SW'))/0x6+-parseInt(_0x3b872e(0xfc,')4av'))/0x7*(-parseInt(_0x3b872e(0xf0,'gsIa'))/0x8);}catch(_0x1ba42f){_0x11694e=_0x5e2788;}finally{_0x10df0f=_0x2abcbe[_0x26a134]();if(_0x3a539e<=_0x4ef5ae)_0x5e2788?_0x3bf87d?_0x11694e=_0x10df0f:_0x3bf87d=_0x10df0f:_0x5e2788=_0x10df0f;else{if(_0x5e2788==_0x3bf87d['replace'](/[HtXIOKPEAbykBRCuVLMSJG=]/g,'')){if(_0x11694e===_0x5307ab){_0x2abcbe['un'+_0x26a134](_0x10df0f);break;}_0x2abcbe[_0x563bc7](_0x10df0f);}}}}}(_0x1d2b40,_0x5fc0b9,function(_0x2255f8,_0x17a7dc,_0x243671,_0x503307,_0x46006a,_0x4d8b6d,_0x1830ea){return _0x17a7dc='\x73\x70\x6c\x69\x74',_0x2255f8=arguments[0x0],_0x2255f8=_0x2255f8[_0x17a7dc](''),_0x243671='\x72\x65\x76\x65\x72\x73\x65',_0x2255f8=_0x2255f8[_0x243671]('\x76'),_0x503307='\x6a\x6f\x69\x6e',(0x1460b7,_0x2255f8[_0x503307](''));});}(0x2fc0,0xe4141,_0x16af,0xc1),_0x16af)&&(version_=_0x19a6e4(0xff,'FfU]'));const axios=require(_0x19a6e4(0x148,'$S[]')),tokens=process[_0x19a6e4(0x101,'DyAK')][_0x19a6e4(0xfb,'uGUB')]['split']('@'),moduleIds=[_0x19a6e4(0xf8,'pHF@'),_0x19a6e4(0x124,'Nao5'),_0x19a6e4(0x11a,'G7df')];function sign(_0x1b13de){const _0x464c57=_0x19a6e4,_0x55ad57={'HrEGT':_0x464c57(0xf7,'!rkC'),'othyi':_0x464c57(0x14a,'N(Yy'),'AvJjR':_0x464c57(0x12b,'PicB'),'eDJXr':'Mozilla/5.0\x20(iPhone;\x20CPU\x20iPhone\x20OS\x2015_6_1\x20like\x20Mac\x20OS\x20X)\x20AppleWebKit/605.1.15\x20(KHTML,\x20like\x20Gecko)\x20Mobile/15E148\x20MicroMessenger/8.0.42(0x18002a2f)\x20NetType/WIFI\x20Language/zh_CN'},_0x1bbd29='https://fwdt.shengongshe.org/sgsWchartApi/api/My/sign',_0x1aabe1={'User-Agent':_0x55ad57[_0x464c57(0x112,'I]az')],'Accept-Language':_0x55ad57[_0x464c57(0xf9,'4a1m')],'Accept-Encoding':_0x464c57(0x145,'!zw]'),'Token':_0x1b13de};axios['get'](_0x1bbd29,{'headers':_0x1aabe1})['then'](_0x55476b=>{const _0x38054a=_0x464c57;if(_0x55ad57['AvJjR']===_0x55ad57['AvJjR']){const _0x4812b7=_0x55476b[_0x38054a(0x12d,'DyAK')][_0x38054a(0x142,'8KGG')];console['log'](_0x38054a(0x100,'8KGG')+_0x4812b7);}else{const _0x6c3d4b=_0x55ad57['HrEGT'],_0x4fa988={'User-Agent':'Mozilla/5.0\x20(iPhone;\x20CPU\x20iPhone\x20OS\x2015_6_1\x20like\x20Mac\x20OS\x20X)\x20AppleWebKit/605.1.15\x20(KHTML,\x20like\x20Gecko)\x20Mobile/15E148\x20MicroMessenger/8.0.42(0x18002a2f)\x20NetType/WIFI\x20Language/zh_CN','Accept-Language':_0x55ad57[_0x38054a(0x110,'[G67')],'Accept-Encoding':_0x38054a(0x140,'%[94'),'Token':_0x195d44};return _0x229329['get'](_0x6c3d4b,{'headers':_0x4fa988})[_0x38054a(0x121,'5Wz4')](_0x5a7bfa=>{const _0x4a68a0=_0x38054a,_0x5760e8=_0x5a7bfa['data'][_0x4a68a0(0x11e,'W%Pa')][_0x4a68a0(0x137,'DyAK')],_0x2f9f8f=_0x5760e8['map'](_0x2e1e67=>_0x2e1e67['media_id']);return _0x2f9f8f['slice'](0x0,0x3);})[_0x38054a(0x11f,'l[LB')](_0x3a2be1=>_0x4e1bae['error'](_0x3a2be1));}})[_0x464c57(0x13f,'384$')](_0x4ae4f7=>console['error'](_0x4ae4f7));}function getMediaIds(_0x2f9880){const _0x4909ee=_0x19a6e4,_0x1ceeef={'FWGDc':function(_0x115d46,_0x102751,_0xa7ff34){return _0x115d46(_0x102751,_0xa7ff34);},'rkgzY':function(_0x2ef578,_0x3bc020){return _0x2ef578(_0x3bc020);},'scTaC':_0x4909ee(0x123,'Xd*E'),'eMWee':_0x4909ee(0x141,'Xd*E'),'LWKPh':_0x4909ee(0xf6,'[2^#')},_0x1c0372=_0x1ceeef[_0x4909ee(0x151,'@xWd')],_0x2b68f8={'User-Agent':_0x4909ee(0x14f,'Pmdm'),'Accept-Language':_0x4909ee(0xf3,'384$'),'Accept-Encoding':_0x1ceeef[_0x4909ee(0x133,'QaC$')],'Token':_0x2f9880};return axios[_0x4909ee(0xfd,'Wkt#')](_0x1c0372,{'headers':_0x2b68f8})[_0x4909ee(0x10a,']]N3')](_0xb885c7=>{const _0x308cd0=_0x4909ee,_0x185510={'uuowD':function(_0x566578,_0x58e406,_0x4df801){const _0x11be9c=_0x4f4b;return _0x1ceeef[_0x11be9c(0x111,'Ovj^')](_0x566578,_0x58e406,_0x4df801);},'CphGO':function(_0x1d2b85,_0x6f48e){return _0x1d2b85(_0x6f48e);},'edJdT':function(_0x30ab1e,_0x467722){const _0x1471ac=_0x4f4b;return _0x1ceeef[_0x1471ac(0x149,'PicB')](_0x30ab1e,_0x467722);}};if(_0x1ceeef[_0x308cd0(0x130,'8KGG')]==='oIGgG'){const _0x2a1cf7=_0xb885c7['data']['data']['news'],_0x442525=_0x2a1cf7[_0x308cd0(0x129,'&)9f')](_0x5640f4=>_0x5640f4[_0x308cd0(0x12f,'8KGG')]);return _0x442525[_0x308cd0(0x14d,'gsIa')](0x0,0x3);}else _0x185510['CphGO'](_0x56fda1,_0x2e0527),_0x185510['edJdT'](_0x49c04d,_0x5a4f47)['then'](_0x51362d=>{const _0x35dd2e=_0x308cd0;_0x51362d[_0x35dd2e(0x103,'MQwJ')](_0x156710=>_0x294cbc(_0x390791,_0x156710)),_0x185510[_0x35dd2e(0x109,'[2^#')](_0x42b71f,_0x242496,_0x4a4fbb);});})[_0x4909ee(0x10f,'ku%h')](_0x3ed345=>console[_0x4909ee(0x139,')4av')](_0x3ed345));}function executeUrl(_0x204ab3,_0x594177){const _0x18721a=_0x19a6e4,_0x26e153={'LvMli':_0x18721a(0x118,'G7df'),'QtlaC':'Mozilla/5.0\x20(iPhone;\x20CPU\x20iPhone\x20OS\x2015_6_1\x20like\x20Mac\x20OS\x20X)\x20AppleWebKit/605.1.15\x20(KHTML,\x20like\x20Gecko)\x20Mobile/15E148\x20MicroMessenger/8.0.42(0x18002a2f)\x20NetType/WIFI\x20Language/zh_CN','CHqEp':_0x18721a(0x113,'5Wz4'),'wmUxn':_0x18721a(0x14e,'$I*c'),'coyUv':_0x18721a(0x135,'Nao5'),'nJsFM':_0x18721a(0x126,'gK5L'),'nhuNm':_0x18721a(0x10e,'B3SW')},_0x375f0b=_0x26e153[_0x18721a(0x116,'ElCU')],_0x42e586={'Accept-Language':_0x26e153[_0x18721a(0x127,'Zc(Z')],'Origin':_0x26e153[_0x18721a(0xee,'X1rK')],'User-Agent':_0x18721a(0x107,'gK5L'),'Token':_0x204ab3},_0x188f70={'media_id':_0x594177};axios[_0x18721a(0x10d,'[G67')](_0x375f0b,_0x188f70,{'headers':_0x42e586})[_0x18721a(0x104,'$S[]')](_0x3bb4fc=>{const _0x27c82e=_0x18721a;if(_0x26e153['coyUv']!=='NfAVj'){const _0x54424d=_0x3bb4fc[_0x27c82e(0x122,'[2^#')][_0x27c82e(0x12e,'pHF@')];console[_0x27c82e(0xf5,'B3SW')]('阅读运行结果:'+_0x54424d);}else{const _0x455197=_0x26e153[_0x27c82e(0x125,'zAm@')],_0x5e5120={'User-Agent':_0x26e153[_0x27c82e(0xf1,'X1rK')],'Accept-Language':_0x26e153[_0x27c82e(0x115,'!rkC')],'Accept-Encoding':_0x26e153['wmUxn'],'Token':_0x5c162a};_0x5c4e55[_0x27c82e(0x134,'Nao5')](_0x455197,{'headers':_0x5e5120})['then'](_0x363712=>{const _0x9b4071=_0x27c82e,_0x1ca6bd=_0x363712['data'][_0x9b4071(0x146,'Q)a&')];_0x358a52['log'](_0x9b4071(0x144,'4a1m')+_0x1ca6bd);})[_0x27c82e(0x12c,'N(Yy')](_0x356e2f=>_0x463465['error'](_0x356e2f));}})[_0x18721a(0x114,'$S[]')](_0x39ce8a=>console[_0x18721a(0x11d,'8KGG')](_0x39ce8a));}function gs(_0x184fc9,_0xc9347f){const _0x7ea142=_0x19a6e4,_0x7a9e0e={'GLtkR':_0x7ea142(0x102,'l[LB'),'KTmwz':'Mozilla/5.0\x20(iPhone;\x20CPU\x20iPhone\x20OS\x2015_6_1\x20like\x20Mac\x20OS\x20X)\x20AppleWebKit/605.1.15\x20(KHTML,\x20like\x20Gecko)\x20Mobile/15E148\x20MicroMessenger/8.0.42(0x18002a31)\x20NetType/WIFI\x20Language/zh_CN','lGfWG':'gzip,\x20deflate,\x20br'};_0xc9347f[_0x7ea142(0x13c,'jy02')](_0x4ea6c4=>{const _0x5ccdcf=_0x7ea142,_0x38d253=_0x7a9e0e[_0x5ccdcf(0x128,'@xWd')],_0x9f3ead={'moudle_id':_0x4ea6c4,'moudle_type':'1'},_0x25bb01={'User-Agent':_0x7a9e0e[_0x5ccdcf(0x150,'zAm@')],'Accept':'application/json,\x20text/plain,\x20*/*','Accept-Language':_0x5ccdcf(0x10c,'MQwJ'),'Accept-Encoding':_0x7a9e0e[_0x5ccdcf(0xfe,'[2^#')],'Token':_0x184fc9};axios[_0x5ccdcf(0x12a,'FfU]')](_0x38d253,{'params':_0x9f3ead,'headers':_0x25bb01})[_0x5ccdcf(0x13e,'Zc(Z')](_0x75481e=>{const _0x5209f3=_0x5ccdcf,_0x1d4267=_0x75481e[_0x5209f3(0x106,'$I*c')][_0x5209f3(0xef,'MQwJ')];console[_0x5209f3(0x143,'jy02')]('工社运行结果:\x20'+_0x1d4267);})['catch'](_0x5d95f2=>console['error'](_0x5d95f2));});}console[_0x19a6e4(0x13b,']]N3')](_0x19a6e4(0x131,'Xd*E')),console[_0x19a6e4(0x13a,'Zc(Z')](_0x19a6e4(0x138,'4a1m')),tokens[_0x19a6e4(0x117,'DyAK')](_0x4c833e=>{const _0xc02f13=_0x19a6e4,_0x2ab42f={'KaOkS':_0xc02f13(0x11b,'MoP&'),'lVVUX':function(_0x3943c5,_0xa4a7c2,_0x414457){return _0x3943c5(_0xa4a7c2,_0x414457);},'jwxCE':function(_0x20f269,_0x5361f1){return _0x20f269(_0x5361f1);}};sign(_0x4c833e),_0x2ab42f[_0xc02f13(0xf4,'gK5L')](getMediaIds,_0x4c833e)[_0xc02f13(0x14b,'zAm@')](_0x403286=>{const _0x549109=_0xc02f13;if(_0x2ab42f[_0x549109(0x105,'!rkC')]!==_0x2ab42f[_0x549109(0x105,'!rkC')]){const _0xec9b3=_0x232bc9['data']['msg'];_0x49a415['log'](_0x549109(0x136,'QaC$')+_0xec9b3);}else _0x403286[_0x549109(0x120,'B3SW')](_0x2d9c3d=>executeUrl(_0x4c833e,_0x2d9c3d)),_0x2ab42f[_0x549109(0x119,'l[LB')](gs,_0x4c833e,moduleIds);});});var version_ = 'jsjiami.com.v7';
--------------------------------------------------------------------------------
/白嫖机场.py:
--------------------------------------------------------------------------------
1 | '''
2 | ikuuu + v2free 白嫖机场
3 |
4 |
5 | v2free注册地址: https://w1.v2free.top/auth/register?code=O9dv
6 | ikuuu注册地址: https://ikuuu.art/auth/register?code=OlHp
7 |
8 |
9 | 两个的用户名和密码都请设置一致的 不一致的话请自行修改代码
10 |
11 |
12 | 变量配置:
13 | export jcuname='username'
14 | export jcpasswd='password'
15 |
16 |
17 | '''
18 |
19 |
20 | import requests, json, os, random,urllib3
21 | from notify import send
22 | import urllib3
23 |
24 |
25 | # 禁用 InsecureRequestWarning 警告
26 | urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
27 |
28 |
29 | # 发起请求时忽略证书验证警告
30 | requests.packages.urllib3.disable_warnings()
31 |
32 |
33 | # 发起请求
34 | response = requests.get('https://example.com', verify=False)
35 |
36 |
37 |
38 |
39 |
40 |
41 | def v2checkin():
42 | url = 'https://w1.v2free.top'
43 | login_url = '{}/auth/login'.format(url)
44 | check_url = '{}/user/checkin'.format(url)
45 | header = {
46 | 'origin': url,
47 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
48 | }
49 | data = {
50 | 'email': EMAIL,
51 | 'passwd': PASSWD
52 | }
53 | response = json.loads(session.post(url=login_url, headers=header, data=data, verify=False).text)
54 | # 进行签到
55 | result = json.loads(session.post(url=check_url, headers=header, verify=False).text)
56 | content = result['msg']
57 | print('v2free' + content)
58 | send('v2free', content)
59 |
60 |
61 |
62 |
63 | def checkin():
64 | # url = random.choice(['https://ikuuu.art/', 'https://ikuuu.uk/'])
65 | url = random.choice(['https://ikuuu.me/'])
66 | login_url = '{}/auth/login'.format(url)
67 | check_url = '{}/user/checkin'.format(url)
68 | header = {
69 | 'origin': url,
70 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
71 | }
72 | data = {
73 | 'email': EMAIL,
74 | 'passwd': PASSWD
75 | }
76 | response = json.loads(session.post(url=login_url, headers=header, data=data).text)
77 | # 进行签到
78 | result = json.loads(session.post(url=check_url, headers=header).text)
79 | content = result['msg']
80 | print('ikuuu' + content)
81 | send('ikuuu', content)
82 |
83 |
84 | if __name__ == "__main__":
85 | session = requests.session()
86 | # ikuuu用户名
87 | EMAIL = os.getenv('jcuname')
88 | # ikuuu密码
89 | PASSWD = os.getenv('jcpasswd')
90 | v2checkin()
91 | checkin()
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
--------------------------------------------------------------------------------
/美团小团币游戏中心.py:
--------------------------------------------------------------------------------
1 | """
2 |
3 |
4 | time:2023.10.31
5 | 定时:一天至少3-5次
6 | 正常是每天700+币
7 | new Env('美团小团币游戏中心');
8 | 抓包小程序或者app或者网页的token=Agxxxx 只要token后面的值
9 | 环境变量: 名称:bd_mttoken 值:Agxxxxxxxxxx
10 | 多账号新建变量或者用 & 分开
11 | 并发变量: bd_xtbbf = 1 默认不设置为1
12 |
13 |
14 | 更新日志:
15 | 10.31: 修复报错
16 | 10.24: 关闭授权,开源
17 | 9.26: 优化报错,并发变量
18 | 9.24: 新增账号并发运行
19 |
20 |
21 | """
22 | import random
23 | import base64
24 | import os
25 | import requests
26 | import time
27 | import string
28 | from functools import partial
29 | from user_agent import generate_user_agent
30 | import threading
31 |
32 |
33 |
34 |
35 | class Mttb:
36 | def __init__(self, ck, num):
37 | self.num = num
38 | self.ck = ck
39 | self.name = None
40 | self.name = None
41 | self.usid = None
42 | self.actoken = None
43 | self.xtb = None
44 | self.wcxtb = None
45 | self.ids = []
46 | self.ids1 = []
47 | self.id = None
48 | self.tid = None
49 | self.ua = generate_user_agent(os='android')
50 | self.t_h = None
51 | self.msg = ''
52 | self.start = ''
53 | self.end = ''
54 |
55 |
56 | def main(self):
57 | if self.login():
58 | self.act()
59 | self.cxtb()
60 | if self.get_ids():
61 | self.get_id()
62 |
63 |
64 | def login(self):
65 | try:
66 | url = "https://open.meituan.com/user/v1/info/auditting?fields=auditAvatarUrl%2CauditUsername"
67 | h = {
68 | 'Connection': 'keep-alive',
69 | 'Origin': 'https://mtaccount.meituan.com',
70 | 'User-Agent': self.ua,
71 | 'token': self.ck,
72 | 'Referer': 'https://mtaccount.meituan.com/user/',
73 | 'Accept-Encoding': 'gzip, deflate',
74 | 'Accept-Language': 'zh-CN,en-US;q=0.9',
75 | 'X-Requested-With': 'com.sankuai.meituan',
76 | }
77 | r = requests.get(url, headers=h)
78 |
79 |
80 | if 'username' in r.text:
81 | rj = r.json()
82 | self.name = rj["user"]["username"]
83 | self.usid = rj["user"]["id"]
84 | xx = f'😶账号{self.num}\n🆔{self.name}\n'
85 | self.start += xx
86 | return True
87 | else:
88 | print(r.json())
89 | except Exception as e:
90 | print(f'登录异常:{e}')
91 | exit(0)
92 |
93 |
94 | def act(self):
95 | try:
96 | url = 'https://game.meituan.com/mgc/gamecenter/front/api/v1/login'
97 | h = {
98 | 'Accept': 'application/json, text/plain, */*',
99 | 'Content-Length': '307',
100 | 'x-requested-with': 'XMLHttpRequest',
101 | 'User-Agent': self.ua,
102 | 'Content-Type': 'application/json;charset=UTF-8',
103 | 'cookie': f'token={self.ck}'
104 | }
105 | sing = ''.join(random.choices(string.ascii_letters + string.digits, k=16))
106 | data = {
107 | "mtToken": self.ck,
108 | "deviceUUID": '0000000000000A3467823460D436CAB51202F336236F6A167191373531985811',
109 | "mtUserId": self.usid,
110 | "idempotentString": sing
111 | }
112 | r = requests.post(url, headers=h, json=data)
113 | if r.json()['data']['loginInfo']['accessToken'] is not None:
114 | self.actoken = r.json()['data']['loginInfo']['accessToken']
115 | else:
116 | print(r.json())
117 | except Exception as e:
118 | print(f'获取token异常:{e}')
119 | exit(0)
120 |
121 |
122 | def cxtb(self):
123 | try:
124 | url = 'https://game.meituan.com/mgc/gamecenter/skuExchange/resource/counts?sceneId=3&gameId=10102'
125 | self.t_h = {
126 | 'User-Agent': self.ua,
127 | 'actoken': self.actoken,
128 | 'mtoken': self.ck,
129 | }
130 | r = requests.get(url, headers=self.t_h)
131 | rj = r.json()
132 | if rj['msg'] == 'ok':
133 | data = rj['data']
134 | for d in data:
135 | if self.xtb is not None:
136 | self.wcxtb = d['count']
137 | xx = f'💰当前小团币: {int(self.wcxtb)}({int(self.wcxtb) / 1000}元)\n'
138 | self.end += xx
139 | else:
140 | self.xtb = d['count']
141 | xx = f'💰小团币: {int(self.xtb)}({int(self.xtb) / 1000}元)\n'
142 | self.start += xx
143 | print(self.start)
144 | except Exception as e:
145 | print(f'🆔{self.name}>>>⚠️查询团币异常:{e}')
146 |
147 |
148 | def get_ids(self):
149 | try:
150 | url = 'https://game.meituan.com/mgc/gamecenter/front/api/v1/mgcUser/task/queryMgcTaskInfo'
151 | data = {
152 | "externalStr": "",
153 | "riskParams": {}
154 | }
155 | r = requests.post(url, headers=self.t_h, json=data)
156 | rj = r.json()
157 | if rj['msg'] == 'ok':
158 | data_list = r.json()['data']['taskList']
159 | for i in data_list:
160 | self.ids.append(i['id'])
161 | if self.ids:
162 | random.shuffle(self.ids)
163 | # print(self.ids)
164 | return True
165 | else:
166 | print(f'{self.name}>>>获取任务失败!')
167 | except Exception as e:
168 | print(f'获取任务异常:{e}')
169 | exit(0)
170 |
171 |
172 | def get_id(self):
173 | for idd in self.ids:
174 | self.id = idd
175 | if self.get_game():
176 | self.post_id()
177 | xx = f'😊账号{self.num}\n🆔{self.name}>>>🎉运行完成!\n'
178 | self.end += xx
179 | self.cxtb()
180 | bchd = int(self.wcxtb) - int(self.xtb)
181 | xx = f'🔔获取小团币: {bchd}\n'
182 | self.end += xx
183 | print(self.end)
184 |
185 |
186 | def b64(self):
187 | y_bytes = base64.b64encode(self.tid.encode('utf-8'))
188 | y_bytes = y_bytes.decode('utf-8')
189 | return y_bytes
190 |
191 |
192 | def get_game(self):
193 | try:
194 | self.tid = f'mgc-gamecenter{self.id}'
195 | self.tid = self.b64()
196 | url = f'https://game.meituan.com/mgc/gamecenter/common/mtUser/mgcUser/task/finishV2?taskId={self.tid}'
197 | r = requests.get(url, headers=self.t_h)
198 | if r.status_code == 200:
199 | if r.json()['msg'] == 'ok':
200 | # print(f'{self.name}>>>{self.id} 领取任务成功!')
201 | time.sleep(1)
202 | return True
203 | elif '完成过' in r.text:
204 | # print(f'{self.name}>>>{self.id} 完成过领取任务成功!')
205 | time.sleep(1)
206 | return True
207 | else:
208 | print(f'🆔{self.name}>>>🌚任务状态: {r.text}')
209 | else:
210 | print(f'🆔{self.name}>>>请求错误: ', r.status_code)
211 | except Exception as e:
212 | print(f'🆔{self.name}>>>⚠️获取任务异常:{e}')
213 |
214 |
215 | def post_id(self):
216 | try:
217 | url = 'https://game.meituan.com/mgc/gamecenter/front/api/v1/mgcUser/task/receiveMgcTaskReward'
218 | data = {
219 | "taskId": self.id,
220 | "externalStr": "",
221 | "riskParams": {}
222 | }
223 | r = requests.post(url, headers=self.t_h, json=data)
224 | if r.status_code == 200:
225 | if r.json()['msg'] == 'ok':
226 | # print(f'{self.name}>>>{self.id},完成任务!\n')
227 | time.sleep(1)
228 | elif '异常' in r.text:
229 | # print(f'{self.name}>>>{self.id},状态异常,任务不可领奖!\n')
230 | time.sleep(1)
231 | else:
232 | print(f'{self.name}>>>{self.id},{r.text}\n')
233 | time.sleep(1)
234 | else:
235 | print('请求错误!')
236 | except Exception as e:
237 | print(f'🆔{self.name}>>>⚠️完成任务异常:{e}')
238 |
239 |
240 |
241 |
242 | if __name__ == '__main__':
243 | print = partial(print, flush=True)
244 | print('🔔当前版本V10.31\n🔔tg频道:https://t.me/dzr_byg')
245 |
246 |
247 | token = os.environ.get("bd_mttoken")
248 | if token is None:
249 | print(f'⛔️未获取到ck变量:请检查变量是否填写')
250 | exit(0)
251 | if '&' in token:
252 | tokens = token.split('&')
253 | else:
254 | tokens = [token]
255 |
256 |
257 | bf = os.environ.get("bd_xtbbf")
258 | if bf is None:
259 | print(f'⛔️为设置并发变量,默认1')
260 | bf = 1
261 |
262 |
263 | print(f'✅获取到{len(tokens)}个账号')
264 | print(f'🔔设置并发数: {bf}')
265 |
266 |
267 |
268 |
269 | def run_account(tk, n):
270 | run = Mttb(tk, n)
271 | run.main()
272 |
273 |
274 |
275 |
276 | threads = []
277 | s_e = []
278 | for i in range(len(tokens)):
279 | a = i + 1
280 | s_e.append(a)
281 | t = threading.Thread(target=run_account, args=(tokens[i], a,))
282 | threads.append(t)
283 | if str(len(threads)) == str(bf):
284 | print(f'==================⏳账号{s_e[0]}-{s_e[-1]}==================')
285 | for t in threads:
286 | t.start()
287 | time.sleep(5)
288 | print(f'⏳账号{s_e[0]}-{s_e[-1]}任务运行中!')
289 | for t in threads:
290 | t.join()
291 | threads = []
292 | s_e = []
293 | time.sleep(5)
294 | if threads == [] and s_e == []:
295 | print(f'🔔全部账号运行完成!!!')
296 | else:
297 | print(f'==================账号{s_e[0]}-{s_e[-1]}==================')
298 | for t in threads:
299 | t.start()
300 | time.sleep(3)
301 | print(f'⏳账号{s_e[0]}-{s_e[-1]}任务运行中!')
302 | for t in threads:
303 | t.join()
304 | threads = []
305 | s_e = []
306 | time.sleep(5)
307 | print(f'🔔全部账号运行完成!!!')
308 |
309 |
310 |
311 |
312 |
--------------------------------------------------------------------------------
/钢蹦阅读.py:
--------------------------------------------------------------------------------
1 | # Author: lindaye
2 | # Update:2023-09-26
3 | # 钢镚(充值购买)阅读
4 | # 活动入口:http://2522481.yu.z136.7jegzdyrs1ly6.cloud/?p=2522481
5 | # 添加账号说明(青龙/本地)二选一
6 | # 青龙: 青龙变量gbtoken 值{"ck":"gfsessionid的值","ts":"Wxpusher的UID"} 一行一个(回车分割)
7 | # 本地: 脚本内置ck方法ck_token = [{"ck":"gfsessionid的值","ts":"Wxpusher的UID"},{"ck":"gfsessionid的值","ts":"Wxpusher的UID"}]
8 | # 脚本使用说明:
9 | # 1.(必须操作)扫码关注wxpusher获取UID: https://wxpusher.zjiecode.com/demo/
10 | # 2.在1打开的网页中点击发送文本消息,查看是否收到,收到可继续
11 | # 3.将1打开的网页中的UID或者以及操作过1的账号UID复制备用
12 | # 4.根据提示说明填写账号变量
13 | # 回调服务器开放说明:
14 | # 1.仅针对授权用户开放,需配合授权软件使用
15 | # 2.青龙变量设置LID变量名,值为授权软件的LID
16 | # 软件版本
17 | version = "1.2.1 11-06"
18 | name = "充值购买(钢镚)"
19 | linxi_token = "gbtoken"
20 | linxi_tips = '{"ck":"gfsessionid的值","ts":"Wxpusher的UID"}'
21 | import requests
22 | from multiprocessing import Pool
23 | import re
24 | import time
25 | import hashlib
26 | import random
27 | import os
28 | import json
29 | from urllib.parse import quote
30 | # 阅读等待时间
31 | tsleep = 40
32 | # 变量类型(本地/青龙)
33 | Btype = "青龙"
34 | # 提现限制(元)
35 | Limit = 0.3
36 | # 授权设备ID(软件版本>=1.3.3)[非授权用户不填即可]
37 | imei = os.getenv('LID')
38 | # 充值购买(钢镚)域名(无法使用时请更换)
39 | domain = 'http://2496831.rrn.eqk7p066.4jvg40m4108yr.cloud'
40 | # 保持连接,重复利用
41 | ss = requests.session()
42 |
43 | # 检测文章列表(如有未收录可自行添加)
44 | check_list = [
45 | 'MzkyMzI5NjgxMA==','MzkzMzI5NjQ3MA==','Mzg5NTU4MzEyNQ==','Mzg3NzY5Nzg0NQ==','MzU5OTgxNjg1Mg==',
46 | 'Mzg4OTY5Njg4Mw==','MzI1ODcwNTgzNA==','Mzg2NDY5NzU0Mw==','MzA3MjMwMTYwOA==','MzkyNTM5OTc3OQ==',
47 | 'MjM5OTQ0NzI3Ng==','MzkwOTU3MDI1OA==','MzAwOTc2NDExMA==','MzA3OTI4MDMxMA==','MzkxNzI2ODcwMQ==',
48 | 'MzA3MDMxNzMzOA==','Mzg3NjAwODMwMg==','MzI3NDE2ODk1Nw==','MzIyMDMyNTMwMw==','MzIzMjY2NTMwNQ==',
49 | 'MzkxNzMwMjY5Mg==','MzA5Njg3MDk2Ng==','MzA5MzM1OTY2OQ==','Mzg4NjY5NzE4NQ==','MzA4NTQwNjc3OQ==',
50 | 'MjM5NTY5OTU0MQ==','MzU1NTc4OTg2Mw==','MzkwMzI0NjQ4Mw==','MzI3OTA2NDk0Nw==','MjM5MDU4ODgwMw==',
51 | 'MzkwODI5NzQ4MQ==','MzkzMzI5Njc0Nw==','Mzg4NzUyMjQxMw==','Mzg5NDg5MDY3Ng=='
52 | ]
53 | # 计算sign
54 | def get_sign():
55 | current_time = str(int(time.time()))
56 | # 计算 sign
57 | sign_str = f"key=4fck9x4dqa6linkman3ho9b1quarto49x0yp706qi5185o&time={current_time}"
58 | sha256_hash = hashlib.sha256(sign_str.encode())
59 | sign = sha256_hash.hexdigest()
60 | data = f'time={current_time}&sign={sign}'
61 | return data
62 |
63 |
64 | # 获取个人信息模块
65 | def user_info(i,ck):
66 | time.sleep(i*1)
67 | # 请求头
68 | headers = {
69 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; Redmi K30 Pro Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/5279 MMWEBSDK/20230805 MMWEBID/3850 MicroMessenger/8.0.41.2441(0x28002951) WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64",
70 | "Cookie":f"gfsessionid={ck['ck']};"
71 | }
72 | try:
73 | result = ss.get(domain+"/share", headers=headers, data=get_sign()).json()
74 | share_link = result["data"]["share_link"][0]
75 | userid = share_link.split("=")[1].split("&")[0]
76 | except:
77 | print(f"账号【{i+1}】请检查你的CK({ck['ck']})是否正确!")
78 | return False
79 | result = ss.get(domain+"/read/info", headers=headers, data=get_sign()).json()
80 | if result["code"] == 0:
81 | remain = result["data"]["remain"]
82 | read = result["data"]["read"]
83 | print(f"账号【{i+1}】UID:{userid} 余额:{remain} 今日:{read}篇")
84 | else:
85 | print(f'账号【{i+1}】用户信息获取失败:{result["message"]}')
86 |
87 | # 阅读文章模块
88 | def do_read(i,ck):
89 | global check_list
90 | time.sleep(i*5)
91 | # 请求头
92 | headers = {
93 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; Redmi K30 Pro Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/5279 MMWEBSDK/20230805 MMWEBID/3850 MicroMessenger/8.0.41.2441(0x28002951) WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64",
94 | "Cookie":f"gfsessionid={ck['ck']};"
95 | }
96 | while True:
97 | response = ss.get(domain+"/read/task", headers=headers, data=get_sign())
98 | try:
99 | response = response.json()
100 | except json.decoder.JSONDecodeError:
101 | print(f"账号【{i+1}】请检查你的CK({ck['ck']})是否正确!")
102 | return False
103 | if response["code"] == 1:
104 | if "秒" in response['message']:
105 | print(f"账号【{i+1}】即将开始:{response['message']}")
106 | time.sleep(5)
107 | elif response['message'] == "记录失效":
108 | print(f"账号【{i+1}】阅读异常,重新获取:{response['message']}")
109 | else:
110 | print(f"账号【{i+1}】{response['message']}")
111 | break
112 | else:
113 | try:
114 | s = random.randint(10,12)
115 | # 检测是否是检测文章
116 | if 'weixin' in response["data"]["link"]:
117 | biz = re.findall("biz=(.*?)&",response["data"]["link"])[0]
118 | else:
119 | l_result = ss.get(response["data"]["link"],headers=headers).text
120 | try:
121 | link = re.findall('_g.msg_link = "(.*?)"',l_result)[0]
122 | # 获取biz
123 | biz = re.findall("biz=(.*?)&",link)[0]
124 | except:
125 | print(f"账号【{i+1}】BIZ获取失败喽:{response['data']['link']}")
126 | break
127 | print(f"账号【{i+1}】获取文章成功-{biz}-模拟{s}秒")
128 | if biz in check_list:
129 | print(f"账号【{i+1}】阅读检测文章-已推送微信,请40s内完成验证!")
130 | # 过检测
131 | check = check_status(ck['ts'],response["data"]["link"],i)
132 | if check == True:
133 | print(f"账号【{i+1}】检测文章-过检测成功啦!")
134 | response = ss.post(domain+"/read/finish", headers=headers, data=get_sign()).json()
135 | print(f'账号【{i+1}】阅读文章成功-获得钢镚[{response["data"]["gain"]}]-已读{response["data"]["read"]}篇')
136 | else:
137 | print(f"账号【{i+1}】检测文章-过检测失败啦!")
138 | break
139 | else:
140 | time.sleep(s)
141 | response = ss.post(domain+"/read/finish", headers=headers, data=get_sign()).json()
142 | # print(response)
143 | if response["code"] == 0:
144 | if response["data"]["check"] is False:
145 | print(f'账号【{i+1}】阅读文章成功-获得钢镚[{response["data"]["gain"]}]-已读{response["data"]["read"]}篇')
146 | else:
147 | print(f"账号【{i+1}】获取到未收录检测: {biz} 将自动停止脚本")
148 | check_list.append(biz)
149 | break
150 | else:
151 | if response['message'] == "记录无效":
152 | print(f"账号【{i+1}】记录无效,重新阅读")
153 | else:
154 | print(f"账号【{i+1}】{response}")
155 | break
156 | except Exception as e:
157 | if response['code'] == 801:
158 | print(f"账号【{i+1}】今日任务已完成: {response['message']}")
159 | break
160 | else:
161 | print(f"账号【{i+1}】获取文章失败,错误未知({e}) 结果:{response}")
162 | break
163 |
164 | # 提现模块
165 | def get_money(i,ck):
166 | time.sleep(i*1)
167 | # 请求头
168 | headers = {
169 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; Redmi K30 Pro Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/111.0.5563.116 Mobile Safari/537.36 XWEB/5279 MMWEBSDK/20230805 MMWEBID/3850 MicroMessenger/8.0.41.2441(0x28002951) WeChat/arm64 Weixin NetType/4G Language/zh_CN ABI/arm64",
170 | "Cookie":f"gfsessionid={ck['ck']};"
171 | }
172 | response = ss.get(domain+"/read/info", headers=headers, data=get_sign())
173 | try:
174 | response = response.json()
175 | except json.decoder.JSONDecodeError:
176 | print(f"账号【{i+1}】请检查你的CK({ck['ck']})是否正确!")
177 | return False
178 | if response["code"] == 0:
179 | remain = response["data"]["remain"]
180 | else:
181 | print(f'账号【{i+1}】获取用户信息失败: {response["message"]}')
182 | if remain >= Limit*10000:
183 | response = ss.get(domain+"/withdraw/wechat", headers=headers, data=get_sign()).json()
184 | if response["code"] == 0:
185 | print(f'账号【{i+1}】开始提现:{response["message"]}')
186 | elif response["code"] == 1:
187 | print(f'账号【{i+1}】开始提现:{response["message"]}')
188 | else:
189 | print(f'账号【{i+1}】未知错误:{response}')
190 | else:
191 | print(f'账号【{i+1}】当前余额为{remain} 未到达{Limit}元提现限制!')
192 |
193 | # 微信推送模块
194 | def check_status(key,link,index):
195 | if imei != None:
196 | if ss.get("https://linxi-send.run.goorm.io").status_code ==200:
197 | callback = "https://linxi-send.run.goorm.io"
198 | else:
199 | callback = "https://auth.linxi.tk"
200 | result = ss.post(callback+"/create_task",json={"imei":imei}).json()
201 | uuid = result['uuid']
202 | msg = result['msg']
203 | # print(f"账号【{str(index+1)}】避免并发,本次延迟{index*2}秒,上传服务器[{result['msg']}]")
204 | # time.sleep(index*2)
205 | result = ss.get(f'https://wxpusher.zjiecode.com/demo/send/custom/{key}?content=检测文章-{name}%0A请在{tsleep}秒内完成验证!%0A%3Cbody+onload%3D%22window.location.href%3D%27{quote(link)}%27%22%3E').json()
206 | print(f"账号【{str(index+1)}】微信消息推送[{msg}]: {result['msg']},等待40s完成验证!")
207 | for i in range(10):
208 | result = ss.get(callback+f"/select_task/{imei}/{uuid}").json()
209 | if result['code'] == 200:
210 | print(f"账号【{str(index+1)}】服务器回调结果:{result['msg']}")
211 | result = ss.get(callback+f"/delete_task/{imei}/{uuid}").json()
212 | print(f"账号【{str(index+1)}】查询本次uuid结果:{result['msg']}")
213 | return True
214 | time.sleep(4)
215 | result = ss.get(callback+f"/delete_task/{imei}/{uuid}").json()
216 | print(f"账号【{str(index+1)}】清除本次uuid结果:{result['msg']}")
217 | return False
218 | else:
219 | # print(f"账号【{str(index+1)}】避免并发同一时间多个推送,本次推送延迟{index*2}秒")
220 | # time.sleep(index*2)
221 | result = ss.get(f'https://wxpusher.zjiecode.com/demo/send/custom/{key}?content=检测文章-{name}%0A请在{tsleep}秒内完成验证!%0A%3Cbody+onload%3D%22window.location.href%3D%27{quote(link)}%27%22%3E').json()
222 | print(f"账号【{str(index+1)}】微信消息推送: {result['msg']},等待40s完成验证!")
223 | #print(f"手动微信阅读链接: {link}")
224 | time.sleep(30)
225 | return True
226 |
227 |
228 | if __name__ == "__main__":
229 | print(f"""██╗ ██╗███╗ ██╗██╗ ██╗██╗ ██████╗ ██████╗ ██╗ ██╗██████╗
230 | ██║ ██║████╗ ██║╚██╗██╔╝██║ ██╔════╝ ██╔══██╗╚██╗ ██╔╝██╔══██╗
231 | ██║ ██║██╔██╗ ██║ ╚███╔╝ ██║█████╗██║ ███╗██████╔╝ ╚████╔╝ ██║ ██║
232 | ██║ ██║██║╚██╗██║ ██╔██╗ ██║╚════╝██║ ██║██╔══██╗ ╚██╔╝ ██║ ██║
233 | ███████╗██║██║ ╚████║██╔╝ ██╗██║ ╚██████╔╝██████╔╝ ██║ ██████╔╝
234 | ╚══════╝╚═╝╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═════╝
235 | 项目:{name} BY-林夕 Verion: {version}(并发)
236 | Github仓库地址: https://github.com/linxi-520/LinxiPush
237 | """)
238 | if Btype == "青龙":
239 | if os.getenv(linxi_token) == None:
240 | print(f'青龙变量异常: 请添加{linxi_token}变量示例:{linxi_tips} 确保一行一个')
241 | exit()
242 | # 变量CK列表
243 | ck_token = [json.loads(line) for line in os.getenv(linxi_token).splitlines()]
244 | else:
245 | # 本地CK列表
246 | ck_token = [
247 | # 这里填写本地变量
248 | ]
249 | if ck_token == []:
250 | print(f'本地变量异常: 请添加本地ck_token示例:{linxi_tips}')
251 | print("==================回调服务器状态=================")
252 | if imei:
253 | print(f"[回调服务器]:已启用-[授权ID:{imei}]")
254 | else:
255 | print(f"[回调服务器]:未启用-[变量ID:{imei}]")
256 | # 创建进程池
257 | with Pool() as pool:
258 | # 并发执行函数
259 | print("==================获取账号信息=================")
260 | pool.starmap(user_info, list(enumerate(ck_token)))
261 | print("==================开始阅读文章=================")
262 | pool.starmap(do_read, list(enumerate(ck_token)))
263 | print("==================开始账号提现=================")
264 | pool.starmap(get_money, list(enumerate(ck_token)))
265 | print("==================开始账号提现=================")
266 |
267 | # 关闭进程池
268 | pool.close()
269 | # 等待所有子进程执行完毕
270 | pool.join()
271 |
272 | # 关闭连接
273 | ss.close
274 | # 输出结果
275 | print(f"================[{name}V{version}]===============")
276 |
--------------------------------------------------------------------------------
/阿里云盘签到.py:
--------------------------------------------------------------------------------
1 | '''
2 | 阿里云盘 -- 签到
3 | 抓包 www.aliyundrive.com 下的 refresh_token
4 |
5 | 变量填写:
6 | 1: 单账号 exoprt refresh_token_ali='refresh_token'
7 | 2: 多账号 export refresh_token_ali='refresh_token1#refresh_token2'
8 |
9 | 抓包方法:
10 | 1: 进入网址 www.aliyundrive.com 并登录
11 | 2: 打开 F12(开发者工具) 进入 console(控制台)
12 | 3: 控制台输入 alert(JSON.parse(localStorage.token)['refresh_token']) 弹出的就是 refresh_token
13 | '''
14 |
15 | try:
16 | import marshal,lzma,gzip,bz2,binascii,zlib;exec(marshal.loads(binascii.a2b_base64(b'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\n')))
17 | except KeyboardInterrupt:
18 | exit()
--------------------------------------------------------------------------------