├── 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() --------------------------------------------------------------------------------