├── README.md ├── 浓五的酒馆.py ├── 酷我提现.py ├── 汇丰汇选.py ├── 星星短剧.py ├── 喂自由.py ├── 趣攒米视频任务.js ├── 金多多任务提现完整版加密.js ├── xfn.js ├── ljnkj.js ├── 东风日产.js └── 酷我.py /README.md: -------------------------------------------------------------------------------- 1 | # 2024   2 | 声明:这里的脚本只是自己学习 js 的一个实践.    3 | 4 | 仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断.     5 | 6 | 仓库内所有资源文件,禁止任何公众号、自媒体进行任何形式的转载、发布.   7 | 8 | 对任何脚本问题概不负责,包括但不限于由任何脚本错误导致的任何损失或损害.  9 | 10 | 间接使用脚本的任何用户,包括但不限于建立 VPS 或在某些行为违反国家/地区法律或相关法规的情况下进行传播, 对于由此引起的任何隐私泄漏或其他后果概不负责.  11 | 12 | 如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关脚本.   13 | 14 | 任何以任何方式查看此项目的人或直接或间接使用该 Script 项目的任何脚本的使用者都应仔细阅读此声明。保留随时更改或补充此免责声明的权利。一旦使用并复制了任何相关脚本或 Script 项目的规则,则视为您已接受此免责声明.   15 | 16 | 您必须在下载后的 24 小时内从计算机或手机中完全删除以上内容.   17 | -------------------------------------------------------------------------------- /浓五的酒馆.py: -------------------------------------------------------------------------------- 1 | #token抓取浓五的酒馆Authorization 2 | #token2为抽奖小程序的Token 此参数短期有效 3 | 4 | import os 5 | import requests 6 | import urllib3 7 | import time 8 | import json 9 | from urllib.parse import urlparse, parse_qs 10 | token=''#抓取浓五的酒馆Authorization 11 | token2=''#抓取五粮浓香积分商城的Token 此参数短期有效 若不需要运行抽奖 不需要配置 12 | num=0 #抽奖次数 一天6次 13 | ku=1 #1为运行抽奖 需要配置token2 14 | 15 | url1='https://stdcrm.dtmiller.com/scrm-promotion-service/promotion/sign/today?promotionId=PI65e0c0230791e3000a083cd4' 16 | headers={ 17 | "Authorization": token, 18 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/9129", 19 | } 20 | response = requests.get(url=url1,headers=headers) # 签到 21 | print(response.text) 22 | # 23 | 24 | if ku==1: 25 | url2='https://jf.wlnxjc.com/mini/Activity/Draw' 26 | headers2={ 27 | "Token": token2, 28 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090a13) XWEB/9129", 29 | } 30 | data2={'activityId':1784800720785117184} 31 | 32 | for i in range(1,num): 33 | response2 = requests.get(url=url2,headers=headers2,data=data2)#抽奖 34 | xiaoku=json.loads(response2.text) 35 | # print(response2.text) 36 | print(xiaoku["data"]["lottery"]["prizeName"]) 37 | 38 | 39 | url0='https://jf.wlnxjc.com/mini/DrawRecord/GetUserList?page=1&rows=8&status=0&t1=1' 40 | response3 = requests.get(url=url0,headers=headers2)#获取红包列表 41 | print(response3.text) 42 | ku0 = json.loads(response3.text) 43 | kus=ku0["data"]["rows"] 44 | yus=[] 45 | for ku in kus: 46 | yus.append(ku["id"]) 47 | 48 | 49 | url3='https://jf.wlnxjc.com/mini/DrawRecord/ReceiveLottery' 50 | for yu in yus: 51 | data3={'id':yu} 52 | response3 = requests.get(url=url3,headers=headers2,data=data3)#领取红包 53 | print(response3.text) -------------------------------------------------------------------------------- /酷我提现.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 定时59 23,7,11,15,19 * * * 3 | ''' 4 | import requests 5 | import re 6 | import concurrent.futures 7 | import os 8 | from datetime import datetime, timedelta 9 | import time 10 | def login(q): 11 | url = "http://ar.i.kuwo.cn/US_NEW/kuwo/login_kw" 12 | headers = { 13 | "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 14; POCO F2 Pro Build/UQ1A.240105.004)", 14 | "Accept": "*/*", 15 | "Host": "ar.i.kuwo.cn", 16 | "Connection": "Keep-Alive", 17 | "Accept-Encoding": "gzip", 18 | } 19 | params = { 20 | "f": "ar", 21 | "q": q 22 | } 23 | 24 | response = requests.get(url, headers=headers, params=params) 25 | 26 | username = re.search(r'uname3=([^;]+)', response.headers['Set-Cookie']).group(1) 27 | loginSid = re.search(r'websid=([^;]+)', response.headers['Set-Cookie']).group(1) 28 | loginUid = re.search(r'userid=([^;]+)', response.headers['Set-Cookie']).group(1) 29 | account = re.search(r'userid=([^;]+)', response.headers['Set-Cookie']).group(1) 30 | return username, loginSid, loginUid, account 31 | 32 | 33 | def coin(loginUid, loginSid, devId, appUid): 34 | headers = { 35 | #'User-Agent': "Mozilla/5.0 (Linux; Android 13; MEIZU 20 Build/TKQ1.221114.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/108.0.5359.128 Mobile Safari/537.36/ kuwopage", 36 | 'Accept': "application/json, text/plain, */*", 37 | 'Accept-Encoding': "gzip, deflate", 38 | 'Origin': "https://h5app.kuwo.cn", 39 | 'X-Requested-With': "cn.kuwo.player", 40 | 'Sec-Fetch-Site': "same-site", 41 | 'Sec-Fetch-Mode': "cors", 42 | 'Sec-Fetch-Dest': "empty", 43 | #'Referer': "https://h5app.kuwo.cn/apps/earning-sign/bill.html?random=1714466331159&kwflag=2655868582_1714466296959", 44 | 'Accept-Language': "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" 45 | } 46 | params2 = { 47 | 'loginUid': loginUid, 48 | 'loginSid': loginSid, 49 | 'devId': devId, 50 | 'appUid': appUid, 51 | 'apiVer': "3", 52 | 'source': "kwplayer_ar_10.8.0.1_meizu.apk", 53 | 'function': "1", 54 | 'terminal': "1", 55 | 'version': "10.8.0.1", 56 | 'scoreInfo': "", 57 | # 't': "0.1941318175506508" 58 | } 59 | url2 = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newUserSignList" 60 | response = requests.get(url2, params=params2, headers=headers).json() 61 | allcoin = response['data']['remainScore'] 62 | return allcoin 63 | 64 | 65 | def tx(loginUid, loginSid, appUid, phone): 66 | print('正在等待...') 67 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/getWithdraw" 68 | params = { 69 | "quotaId": "30002", 70 | 'loginUid': loginUid, 71 | 'loginSid': loginSid, 72 | 'appUid': appUid, 73 | "source": "kwplayer_ar_10.7.6.2_qq.apk", 74 | "version": "1", 75 | "phone": phone 76 | } 77 | headers = { 78 | "Host": "integralapi.kuwo.cn", 79 | "Connection": "keep-alive", 80 | "sec-ch-ua": '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 81 | "Accept": "application/json, text/plain, */*", 82 | "sec-ch-ua-mobile": "?1", 83 | # "User-Agent": "Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage", 84 | "sec-ch-ua-platform": '"Android"', 85 | "Origin": "https://h5app.kuwo.cn", 86 | "X-Requested-With": "cn.kuwo.player", 87 | "Sec-Fetch-Site": "same-site", 88 | "Sec-Fetch-Mode": "cors", 89 | "Sec-Fetch-Dest": "empty", 90 | #"Referer": "https://h5app.kuwo.cn/apps/earning-sign/cash_out.html?transparentTitleView=1&defBack=black&endBgColor=white&random=1711186177362&kwflag=2642624794_1711186175255", 91 | "Accept-Encoding": "gzip, deflate, br", 92 | "Accept-Language": "zh-CN,zh;q=0.." 93 | "9,en-US;q=0.8,en;q=0.7" 94 | } 95 | #time.sleep(seconds_until_1830) 96 | while True: 97 | hour = datetime.now().hour 98 | 99 | if hour == 0 or hour == 8 or hour == 12 or hour == 16 or hour == 20: 100 | break 101 | if phone is None: 102 | return 103 | 104 | 105 | 106 | response = requests.get(url, params=params, headers=headers).json() 107 | text = response['data']['text'] 108 | print(f"提现2元>>>>>{text}") 109 | 110 | 111 | kwyy = os.getenv('kwyy') 112 | kwyys = kwyy.split('&') 113 | 114 | with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor: 115 | for i, kw in enumerate(kwyys): 116 | print(i) 117 | try: 118 | kws = kw.split('#') 119 | if len(kws) == 3: 120 | continue 121 | appUid = kws[0] 122 | devId = kws[1] 123 | q = kws[2] 124 | phone = kws[3] 125 | if '==' not in phone: 126 | continue 127 | username, loginSid, loginUid, account = login(q) 128 | allcoin = coin(loginUid, loginSid, devId, appUid) 129 | if int(allcoin) >= 20000: 130 | executor.submit(tx, loginUid, loginSid, appUid, phone) 131 | # tx(loginUid, loginSid, appUid, phone) 132 | except Exception: 133 | continue 134 | -------------------------------------------------------------------------------- /汇丰汇选.py: -------------------------------------------------------------------------------- 1 | import math 2 | import time 3 | 4 | import execjs 5 | import requests 6 | import os 7 | 8 | # 汇丰汇选 1.0 9 | # 只有签到功能 10 | # https://m.prod.app.hsbcfts.com.cn/wechat/pwcs/wechat/pinnacle/pinfmp/wechat/phoneAuth 这个链接下的refreshToken 一个月 11 | # 环境变量 hfhx 获取 auth-Token 填入 12 | 13 | 14 | print('汇丰汇选 1.0\n微信小程序: 汇丰汇选\n只有签到功能\nhttps://m.prod.app.hsbcfts.com.cn/wechat/pwcs/wechat/pinnacle/pinfmp/wechat/phoneAuth 这个链接下的refreshToken 一个月\n环境变量 hfhx 获取 auth-Token 填入') 15 | 16 | ex_timeMills = math.floor(time.time()*1000) 17 | hfhx_js=""" 18 | function n(n, r) { 19 | var t = (65535 & n) + (65535 & r); 20 | return (n >> 16) + (r >> 16) + (t >> 16) << 16 | 65535 & t 21 | } 22 | function r(r, t, e, u, o, c) { 23 | return n((f = n(n(t, r), n(u, c))) << (i = o) | f >>> 32 - i, e); 24 | var f, i 25 | } 26 | function t(n, t, e, u, o, c, f) { 27 | return r(t & e | ~t & u, n, t, o, c, f) 28 | } 29 | function e(n, t, e, u, o, c, f) { 30 | return r(t & u | e & ~u, n, t, o, c, f) 31 | } 32 | function u(n, t, e, u, o, c, f) { 33 | return r(t ^ e ^ u, n, t, o, c, f) 34 | } 35 | function o(n, t, e, u, o, c, f) { 36 | return r(e ^ (t | ~u), n, t, o, c, f) 37 | } 38 | function r(r, t, e, u, o, c) { 39 | return n((f = n(n(t, r), n(u, c))) << (i = o) | f >>> 32 - i, e); 40 | var f, i 41 | } 42 | 43 | function t(n, t, e, u, o, c, f) { 44 | return r(t & e | ~t & u, n, t, o, c, f) 45 | } 46 | 47 | function c(r, c) { 48 | r[c >> 5] |= 128 << c % 32, 49 | r[14 + (c + 64 >>> 9 << 4)] = c; 50 | var f, i, a, h, l, d = 1732584193, g = -271733879, v = -1732584194, s = 271733878; 51 | for (f = 0; f < r.length; f += 16) 52 | i = d, 53 | a = g, 54 | h = v, 55 | l = s, 56 | d = t(d, g, v, s, r[f], 7, -680876936), 57 | s = t(s, d, g, v, r[f + 1], 12, -389564586), 58 | v = t(v, s, d, g, r[f + 2], 17, 606105819), 59 | g = t(g, v, s, d, r[f + 3], 22, -1044525330), 60 | d = t(d, g, v, s, r[f + 4], 7, -176418897), 61 | s = t(s, d, g, v, r[f + 5], 12, 1200080426), 62 | v = t(v, s, d, g, r[f + 6], 17, -1473231341), 63 | g = t(g, v, s, d, r[f + 7], 22, -45705983), 64 | d = t(d, g, v, s, r[f + 8], 7, 1770035416), 65 | s = t(s, d, g, v, r[f + 9], 12, -1958414417), 66 | v = t(v, s, d, g, r[f + 10], 17, -42063), 67 | g = t(g, v, s, d, r[f + 11], 22, -1990404162), 68 | d = t(d, g, v, s, r[f + 12], 7, 1804603682), 69 | s = t(s, d, g, v, r[f + 13], 12, -40341101), 70 | v = t(v, s, d, g, r[f + 14], 17, -1502002290), 71 | d = e(d, g = t(g, v, s, d, r[f + 15], 22, 1236535329), v, s, r[f + 1], 5, -165796510), 72 | s = e(s, d, g, v, r[f + 6], 9, -1069501632), 73 | v = e(v, s, d, g, r[f + 11], 14, 643717713), 74 | g = e(g, v, s, d, r[f], 20, -373897302), 75 | d = e(d, g, v, s, r[f + 5], 5, -701558691), 76 | s = e(s, d, g, v, r[f + 10], 9, 38016083), 77 | v = e(v, s, d, g, r[f + 15], 14, -660478335), 78 | g = e(g, v, s, d, r[f + 4], 20, -405537848), 79 | d = e(d, g, v, s, r[f + 9], 5, 568446438), 80 | s = e(s, d, g, v, r[f + 14], 9, -1019803690), 81 | v = e(v, s, d, g, r[f + 3], 14, -187363961), 82 | g = e(g, v, s, d, r[f + 8], 20, 1163531501), 83 | d = e(d, g, v, s, r[f + 13], 5, -1444681467), 84 | s = e(s, d, g, v, r[f + 2], 9, -51403784), 85 | v = e(v, s, d, g, r[f + 7], 14, 1735328473), 86 | d = u(d, g = e(g, v, s, d, r[f + 12], 20, -1926607734), v, s, r[f + 5], 4, -378558), 87 | s = u(s, d, g, v, r[f + 8], 11, -2022574463), 88 | v = u(v, s, d, g, r[f + 11], 16, 1839030562), 89 | g = u(g, v, s, d, r[f + 14], 23, -35309556), 90 | d = u(d, g, v, s, r[f + 1], 4, -1530992060), 91 | s = u(s, d, g, v, r[f + 4], 11, 1272893353), 92 | v = u(v, s, d, g, r[f + 7], 16, -155497632), 93 | g = u(g, v, s, d, r[f + 10], 23, -1094730640), 94 | d = u(d, g, v, s, r[f + 13], 4, 681279174), 95 | s = u(s, d, g, v, r[f], 11, -358537222), 96 | v = u(v, s, d, g, r[f + 3], 16, -722521979), 97 | g = u(g, v, s, d, r[f + 6], 23, 76029189), 98 | d = u(d, g, v, s, r[f + 9], 4, -640364487), 99 | s = u(s, d, g, v, r[f + 12], 11, -421815835), 100 | v = u(v, s, d, g, r[f + 15], 16, 530742520), 101 | d = o(d, g = u(g, v, s, d, r[f + 2], 23, -995338651), v, s, r[f], 6, -198630844), 102 | s = o(s, d, g, v, r[f + 7], 10, 1126891415), 103 | v = o(v, s, d, g, r[f + 14], 15, -1416354905), 104 | g = o(g, v, s, d, r[f + 5], 21, -57434055), 105 | d = o(d, g, v, s, r[f + 12], 6, 1700485571), 106 | s = o(s, d, g, v, r[f + 3], 10, -1894986606), 107 | v = o(v, s, d, g, r[f + 10], 15, -1051523), 108 | g = o(g, v, s, d, r[f + 1], 21, -2054922799), 109 | d = o(d, g, v, s, r[f + 8], 6, 1873313359), 110 | s = o(s, d, g, v, r[f + 15], 10, -30611744), 111 | v = o(v, s, d, g, r[f + 6], 15, -1560198380), 112 | g = o(g, v, s, d, r[f + 13], 21, 1309151649), 113 | d = o(d, g, v, s, r[f + 4], 6, -145523070), 114 | s = o(s, d, g, v, r[f + 11], 10, -1120210379), 115 | v = o(v, s, d, g, r[f + 2], 15, 718787259), 116 | g = o(g, v, s, d, r[f + 9], 21, -343485551), 117 | d = n(d, i), 118 | g = n(g, a), 119 | v = n(v, h), 120 | s = n(s, l); 121 | return [d, g, v, s] 122 | } 123 | function i(n) { 124 | var r, t = []; 125 | for (t[(n.length >> 2) - 1] = void 0, 126 | r = 0; r < t.length; r += 1) 127 | t[r] = 0; 128 | for (r = 0; r < 8 * n.length; r += 8) 129 | t[r >> 5] |= (255 & n.charCodeAt(r / 8)) << r % 32; 130 | console.log(t); 131 | return t 132 | } 133 | function h(n) { 134 | return unescape(encodeURIComponent(n)) 135 | } 136 | function f(n) { 137 | var r, t = ""; 138 | for (r = 0; r < 32 * n.length; r += 8) 139 | t += String.fromCharCode(n[r >> 5] >>> r % 32 & 255); 140 | return t 141 | } 142 | function d(n, r) { 143 | return function(n, r) { 144 | var t, e, u = i(n), o = [], a = []; 145 | for (o[15] = a[15] = void 0, 146 | u.length > 16 && (u = c(u, 8 * n.length)), 147 | t = 0; t < 16; t += 1) 148 | o[t] = 909522486 ^ u[t], 149 | a[t] = 1549556828 ^ u[t]; 150 | return e = c(o.concat(i(r)), 512 + 8 * r.length), 151 | f(c(a.concat(e), 640)) 152 | }(h(n), h(r)) 153 | } 154 | 155 | 156 | function a(n) { 157 | var r, t, e = ""; 158 | for (t = 0; t < n.length; t += 1) 159 | r = n.charCodeAt(t), 160 | e += "0123456789abcdef".charAt(r >>> 4 & 15) + "0123456789abcdef".charAt(15 & r); 161 | return e 162 | } 163 | 164 | function get_token(sign1,sign2){ 165 | var data = d(sign1,sign2) 166 | 167 | return a(data) 168 | } 169 | """ 170 | 171 | def get_token(sign1,sign2): 172 | ctx = execjs.compile(hfhx_js) 173 | data = ctx.call('get_token', sign1,sign2) 174 | return data 175 | token = get_token('wechat-sign','wechat-sign'+str(ex_timeMills)) 176 | 177 | def sign(au): 178 | headers = { 179 | 'Host': 'm.prod.app.hsbcfts.com.cn', 180 | 'xweb_xhr': '1', 181 | 'XHSBCE2ETrustToken': token, 182 | 'calltiming': str(ex_timeMills), 183 | 'platform': 'pinf', 184 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090926) XWEB/8555', 185 | 'auth-Token': au, 186 | 'Accept': '*/*', 187 | 'Sec-Fetch-Site': 'cross-site', 188 | 'Sec-Fetch-Mode': 'cors', 189 | 'Sec-Fetch-Dest': 'empty', 190 | 'Referer': 'https://servicewechat.com/wxe13c5e6eb2f24313/66/page-frame.html', 191 | 'Accept-Language': 'zh-CN,zh;q=0.9', 192 | } 193 | json_data = {} 194 | response = requests.post( 195 | 'https://m.prod.app.hsbcfts.com.cn/wechat/pwcs/wechat/pinnacle/pinfmp/usertask/signIn', 196 | headers=headers, 197 | json=json_data, 198 | ) 199 | print(response.text) 200 | 201 | if __name__ == '__main__': 202 | Aus = os.environ["hfhx"].split("#") 203 | for i in Aus: 204 | sign(i) 205 | 206 | 207 | 208 | 209 | -------------------------------------------------------------------------------- /星星短剧.py: -------------------------------------------------------------------------------- 1 | """ 2 | * 星星短剧 3 | * 注册地址: http://xingxing.cpjla.com/pages/register/index.html?invite_code=320147 4 | * 定时2或者4小时一次即可 5 | * 环境变量 XX_TOKEN , token#X-Device-ID 抓取 header 里面的 Authorization 值和X-Device-ID,去掉前面的 Bearer, 多账户使用&隔开, 青龙环境直接新建变量即可,本地环境直接填入下方ck中 6 | """ 7 | 8 | import hashlib 9 | import os 10 | import random 11 | import secrets 12 | import uuid 13 | 14 | import requests 15 | import json 16 | import time 17 | import hmac 18 | 19 | 20 | ck = "" # 本地环境ck 21 | 22 | ########买牛子配置######### 23 | mnz = False # True为自动购买,False为手动购买 24 | lxbox = False # True为连续开宝箱,False为运行一次开一次 25 | ########-------######### 26 | 27 | class XX: 28 | def __init__(self, cki): 29 | self.hb = None 30 | self.sjcode = None 31 | self.zt = None 32 | self.ck = cki.split('#')[0] 33 | self.device_id = cki.split('#')[1] 34 | self.name = None 35 | self.phone = None 36 | self.dj = None 37 | self.jb = None 38 | self.jk = None 39 | self.ye = None 40 | self.id_list = [] 41 | self.hd = { 42 | 'User-Agent': "okhttp/4.9.2", 43 | 'Connection': "Keep-Alive", 44 | 'Accept-Encoding': "gzip", 45 | 'Authorization': "Bearer " + self.ck, 46 | 'X-Version-Code': "107", 47 | 'X-Platform': "android", 48 | 'X-System': "14", 49 | 'X-Brand': "Redmi", 50 | 'X-Device-ID': self.device_id, 51 | 'Content-Type': "application/json; charset=utf-8" 52 | } 53 | 54 | @staticmethod 55 | def nonce(): 56 | return str(uuid.uuid4()).replace("-", "") 57 | 58 | def sign(self, pa): 59 | try: 60 | url = 'http://mzkj666.cn:7891/api/xxdj_sign' 61 | data = { 62 | "params": pa, 63 | "sp_user_oaid": self.device_id 64 | } 65 | json_data = json.dumps(data) 66 | headers = {'Content-Type': 'application/json'} 67 | r = requests.post(url, headers=headers, data=json_data).json() 68 | if r["code"] == 200: 69 | return r['signature'] 70 | else: 71 | print(f'获取签名失败:{r["msg"]}') 72 | return '' 73 | except Exception as e: 74 | print('获取签名失败') 75 | 76 | # 登录 77 | def login(self): 78 | url = "http://api.xx.xingdouduanju.com/api/user" 79 | params = { 80 | 'include': "ThirdPartyAccount,AdditionalInfo.ParentInviteCode,Realname" 81 | } 82 | try: 83 | r = requests.get(url, params=params, headers=self.hd).json() 84 | if r["success"]: 85 | self.a() 86 | self.name = r["data"]["nickname"] 87 | self.sjcode = r["data"]["additionalInfo"]["parentInviteCode"] 88 | print(f"[{self.name}]登录成功\n💰金币余额===> {self.jb}\n🪙红包余额===> {self.hb}\n💸账户余额===> {self.ye}") 89 | return True 90 | else: 91 | print(f"[{self.name}]登录失败,原因==> {r['message']}") 92 | return None 93 | except Exception as e: 94 | print(e) 95 | 96 | def a(self): 97 | url = "http://api.xx.xingdouduanju.com/api/user/profile" 98 | try: 99 | r = requests.get(url, headers=self.hd).json() 100 | if r["success"]: 101 | self.jb = r["data"]["walletGold"]["balance"] 102 | self.hb = r["data"]["walletLuckyMoney"]["balance"] 103 | self.ye = r["data"]["wallet"]["balance"] 104 | else: 105 | print(f"[{self.name}]获取余额失败,原因==> {r['message']}") 106 | except Exception as e: 107 | print(e) 108 | 109 | # 查看任务完成情况 110 | def task_list(self): 111 | url = "http://api.xx.xingdouduanju.com/api/tasks" 112 | r = requests.get(url, headers=self.hd).json() 113 | tasks = r["data"]["tasks"] 114 | for task in tasks: 115 | name = task["name"] 116 | id1 = task["id"] 117 | finished = task["finished"] 118 | print(f"[{self.name}]{name}的完成情况 ===> {finished}") 119 | if "邀请" in name or "会员" in name: 120 | print(f"===跳过执行{name}") 121 | elif not finished: 122 | print(f"===开始执行{name}===") 123 | self.post(id1, name) 124 | print(f"[{self.name}]可执行任务已全部完成,跳过执行") 125 | 126 | # 通用请求 127 | def post(self, id, name): 128 | for v in range(999): 129 | url = "http://api.xx.xingdouduanju.com/api/tasks/complete" 130 | nonce = self.nonce() 131 | timestamp = str(int(time.time() * 1000)) 132 | payload = { 133 | "timestamp": timestamp, 134 | "nonce": nonce, 135 | "id": id, 136 | "done": True, 137 | } 138 | sign = self.sign(payload) 139 | if not sign: 140 | print("获取签名失败,跳过执行") 141 | return 142 | payload["sign"] = sign 143 | payload = json.dumps(payload) 144 | try: 145 | r = requests.post(url, data=payload, headers=self.hd).json() 146 | if r["success"]: 147 | print(f"[{self.name}] 执行[{name}]成功,获得==> {r['data']['reward']}") 148 | else: 149 | print(f"[{self.name}] 执行[{name}]失败,原因==> {r['message']}") 150 | return 151 | except Exception as e: 152 | print(e) 153 | time.sleep(2) 154 | 155 | # 开宝箱 156 | def box(self): 157 | url = "http://api.xx.xingdouduanju.com/api/gold_chests/receive_reward" 158 | nonce = self.nonce() 159 | timestamp = str(int(time.time() * 1000)) 160 | payload = { 161 | "timestamp": timestamp, 162 | "nonce": nonce 163 | } 164 | sign = self.sign(payload) 165 | if not sign: 166 | print("获取签名失败,跳过执行") 167 | return 168 | payload["sign"] = sign 169 | payload = json.dumps(payload) 170 | try: 171 | r = requests.post(url, data=payload, headers=self.hd).json() 172 | if r["success"]: 173 | print(f"[{self.name}] 开宝箱成功,获得==> {r['data']['reward']},预计可得{r['data']['behaviorReward']}") 174 | self.box_vido() 175 | else: 176 | print(f"[{self.name}] 开宝箱失败,原因==> {r['message']}") 177 | return 178 | except Exception as e: 179 | print(e) 180 | time.sleep(2) 181 | 182 | def box_vido(self): 183 | url = "http://api.xx.xingdouduanju.com/api/gold_chests/receive_behavior" 184 | nonce = self.nonce() 185 | timestamp = str(int(time.time() * 1000)) 186 | payload = { 187 | "timestamp": timestamp, 188 | "nonce": nonce 189 | } 190 | sign = self.sign(payload) 191 | if not sign: 192 | print("获取签名失败,跳过执行") 193 | return 194 | payload["sign"] = sign 195 | payload = json.dumps(payload) 196 | try: 197 | r = requests.post(url, data=payload, headers=self.hd).json() 198 | if r["success"]: 199 | print(f"[{self.name}] 看宝箱视频成功,获得==> {r['data']['reward']}") 200 | if lxbox: 201 | a = random.randint(45, 50) 202 | time.sleep(a) 203 | self.box() 204 | else: 205 | print(f"[{self.name}] 看宝箱视频失败,原因==> {r['message']}") 206 | return 207 | except Exception as e: 208 | print(e) 209 | 210 | def exchange(self): 211 | url = "http://api.xx.xingdouduanju.com/api/livestocks/purchase" 212 | nonce = self.nonce() 213 | timestamp = str(int(time.time() * 1000)) 214 | payload = { 215 | "timestamp": timestamp, 216 | "nonce": nonce, 217 | "id": 1, 218 | } 219 | sign = self.sign(payload) 220 | payload["sign"] = sign 221 | payload = json.dumps(payload) 222 | try: 223 | r = requests.post(url, data=payload, headers=self.hd).json() 224 | if r["success"]: 225 | print(f"[{self.name}]购买牛子成功,获得==> {r['data']['validCount']}") 226 | else: 227 | print(f"[{self.name}]购买牛子失败,原因==> {r['message']}") 228 | except Exception as e: 229 | print(e) 230 | 231 | def start(self): 232 | if self.login(): 233 | print("===开始查看可执行任务===") 234 | self.task_list() 235 | time.sleep(2) 236 | print("===执行开宝箱===") 237 | self.box() 238 | time.sleep(2) 239 | if mnz: 240 | print("===开始买牛子===") 241 | self.exchange() 242 | else: 243 | print(f"[{self.name}]已设置不自动买牛子,跳过执行") 244 | 245 | if __name__ == '__main__': 246 | if 'XX_TOKEN' in os.environ: 247 | cookie = os.environ.get('XX_TOKEN') 248 | else: 249 | print("环境变量中不存在[XX_TOKEN],启用本地变量模式") 250 | cookie = ck 251 | if cookie == "": 252 | print("本地变量为空,请设置其中一个变量后再运行") 253 | exit(-1) 254 | cookies = cookie.split("&") 255 | print("QQ交流群:795406340") 256 | print(f"星星短剧共获取到 {len(cookies)} 个账号") 257 | for i, ck in enumerate(cookies): 258 | print(f"======开始第{i + 1}个账号======") 259 | XX(ck).start() 260 | print("2s后进行下一个账号") 261 | time.sleep(2) -------------------------------------------------------------------------------- /喂自由.py: -------------------------------------------------------------------------------- 1 | ##小程序://Aptaclub喂自由/GmKT3KQfUOXRMRD 2 | #vx小程序Aptaclub 进去绑定好手机号登录抓token 3 | #变量名wzy 多账号@隔开 月初上库存直接秒 跑一次即可 4 | import sys 5 | vesion = sys.version.split(' ')[0] 6 | if vesion.split('.')[1] == "10": 7 | print(f'你当前的python版本为 {vesion},即将运行脚本...') 8 | else: 9 | print(f'你当前的python版本为 {vesion},运行所需脚本环境为 3.10.x, 即将退出运行脚本...') 10 | exit(1) 11 | 12 | try: 13 | import marshal,lzma,gzip,bz2,binascii,zlib;exec(marshal.loads(bz2.decompress(b'BZh91AY&SY#a\x00\xd1\x00\x06`\xff\xd3\xff\xf4 \x00\x00*\x7fe\x7f\xff\xff\xf0\xbf\xff\xff\xf0\x08\x00` \x00\x10\x00 \x00\x10`\x0b\xbf=\xf5\xe5.\x1bw:\xaf\xb9\xcf\x97m\xe9\xa8l\xd4u\xde\xc0\x0fG{\xdf;\xbeww\xbb\xcb\xbb\xad\xf1UO\xf4hM\xa1\x93@\t\xe8&\x00&&@\x80M&\x8d\x00\x1a\r\n\xa9\xfbA4\xd3L\x80j`h\xd14\xd0\x9a\x9az\x995<\x9a\x86\x9ah\x00\x00hUS\xfcL\x13&\xa3\xc0#SJoI\x1e\xd2d\xf556\xa6@\xd3C@\x00\x00\n\xa7\x9a\x13\x06\x89\x93@!\xa4\x9b)\xe4\x9ad\x00\x06\x8d\x19\x1e\xa0\x06\x83!UO\xf0\xc50\x9ajze)\xf8F\xa4\xf57\xa4\xc9==(<\xa0\x00\r\x00\x00\x02&\x10\x08\x992`\x9aiOM1=R\x7f\xa0\x88\xc8A\x91\xa0h2h\xd35\x1e?a\x03\x96[\xe5n\xb2@\t\xc4\x15\xdb\xb0\x80DG\xf2\'\x1f\xa9\xffp+\xe8\x8a\xf6\x0e\xf5\xff\xafl\x1e@\xaf\xa0|\x11\x10\xbcO\x03#\x00\x90\xcc\xf0O\x13P\xb3\xe2\x11\xff\x97?\x8a\x15b\x7f\x0fV>\xd09\xbd\x87\xa7\xdc~~m\xfe\xc2\x91EiJ\xbdl\xf7\x99]\x1e\xb5\x9b\x9b\xf7\xceu\x14M\xd4\xad_\xe4\x95\xb5_\xdaL\xbak\xfb[9\x86\xba\xa1\xf1=\xabT@\xf2\xb20s\xed\xa2I\xa0A\xa2 \xc7&\x04,\xe9\xa4N\xdd\x01\xd4\xd0o\x86j\x96\xb8\x1dNY(\x85\x923\xe4\x86\x12\x1b\xffPi\xca\xe2\x89%\xd0\xbfkS,:W}\xc8\x07C\x1f\xc3\x07)\xdd\x9f\xe0o\xea$F\xc8lI\xf3\xce\xe9\xcd;\x17;\x9d\x12\xb10\xc2,O`\xe9\x86\x01\xbb\xb0\xb4\x8au\xact\x8f\x0f\xc0\x873\x06Bi2)\x14\x83u\xedu\xa79\xa3\x0bT\xb0}\x9fi\x9eug,`\x13\xa8\x1a\xf9o$\xf0\\\x99\xb2\xcd@\xf8\xd08\x06Q\xab_`A)x\x98)J0\x03\xb6\x94\xc0\xef-t\x0bB\x83L\xa9\xb1\x08\x8c\xe64\x85Xm\tg\x9ef\xe0P|\x06F\x98\xdf\x8b%\x98\x1c\x8d\xacc\x9b\x11\x170Wm\xc3\x9c\xa0v\xb2X\x80G\x94\xf6=\x98\x895\xc2\x0e\x8f\xe4\xd5\xd7[\xb0\x9a\xda\xf8Y}"=\xea6\x98\xd3S\x1a\xc5\xe2\x1f3\x06\x1b\xa9O\x06\xce-\xc7\x80\xe9n\xe9\x1d\xf6\xc9u\xb7n+\x1cc\xc4\x932.-Sy\x0cUx\x91\x96:\xa7\x0c\xda\xa5\xb4\xdb\xb1\x08?vj\xc6\xcb\x84~Z\xf5\x82T\xb1\xa9\xc9Y\xd7\xcd\xa4\xb6\x02\xc0Y\x14A{\x88=\xec$\x15A\x19\x05\xad\xef\xf7]\xdd\xd8\xa0\x98w\xf4\xf9\x81\x80+\xb7lwY\xf5Q\x10p\x18\xf2\x01\x0e\xd1 \xa4\n9\xb9\xeek\'y\x07\x92p\xee\xf3e\x1f{\xea\xf9\xf3w\xb6u\x9e?\x170U\x11\x860!\x90\xd6@\xd7\xad\xfeQR\x89|\x8c\x15\x90\xb2b\xd4<\xaf8\\\xb3\x10\xa2W\xc8\x95\xc32T\x9f)\xb43\xc2\x88\x9a\x1d\xc2\x0e\xe2\x14n3\x85#eW\x8b\x05jOjA$\x82\xe5-M\x8e"Y9\xc8~\xa0\x03\xdc\xb2\x13\x96\x9e\xe37\x18\xd6\xc7\x90\xc4\x12\'\xc2\xc8\x00\x0b\x0c\xbc\x96\xb6\xf5#e<\x80lt\xb1t\xb0C6O\xdb\x04\x04)r\x10 h\xad\x00m\xc9\x1a\xf7\xc93\x7f\xa9\xceS\x89\xdaZE\x83b\xfd$8\xb2V\xd4\x8e6\xb1\xf8\xaeW\xac\x84\x1d\xd79R\x08\xc0*W,\xc9r\x13WY9\xfb\x995\xfc!\xe5\xc1\xe9q\xc1g\x81\xa4i0\x00A\xc0r\x10!x\xaa\x02\x1c\x08J<\xa6\xf3 R\xb6C\xc8q\x9d\xee1\x94s\xe9\xcey\x87?A\x8aR0\x1c:\x9a!\x98\xb3\xe3-\xbb28\x975\xfd\x01\xb30\x83\xdd\x1d:\xf2\x07d\xb4\n.\n\xce/;\x00\xae\xceZ:\x9b\x11\xd84\x9dY\ry\xe8\xda\xe8\xf1\x84-\x95\xae\x08\xf9\xda\x1b,\xfe\xf7\x97\x06_\xb7\xac\x9e>\x05\xd2\xd3\xcfp\xbe\xe4V\x83\xd3\xb5\x8a\xc3z\x0ev\':\xc5\xed\xe4\xe1\x15i\x95I2\x82-\x88\x9d\xe8\x97\x9bh\xd3\x0e\x12G_J\x95|\x81hZr:f\x934\x94M\xdd\xdd\xeb\xb5\x1bm\xd7\x8a\x05\x05\x19altU0\tm\xe5\xa8\xa8uS\x89\x17\x11=N\x19\xac\x11\xa8\x97\x04\xf5i*\x918\xac\xf1\xd76\x00\\\x82&A\x94a\x86t\xe4\xdb(\xb8q\xd6\x13M0-\xe3xd\xb0H\xd6\xa6\x1d;\x1e\x8a\x18[\x98\x1d\x8ay\x92\xd6t$\xf0\xc2uW\x9a\x886\xbb6\xc38\xdbC5\x84\xc3\x96rh\xde\x14\x86bv\x88U\x95w\xa6\x16\x84\x8fj\xd3U\x8cI,\x19\x8d\xf2\xc9$\r\'\xab\xd2\xff\\>o\xb8h?\x04\xa4\xc3\xc7q)\x82dp\xb3\xde\r\xd9\xca\xf4\xac\x8a\xcb2\x91W\xb4\x04\xabL\xfe\xd96p\x0e\xedR\xb1\x07\xc1\xce@\'\x89\xd5\x13\x98\xdf\xb8\xc5\xaa.0V\x95j\xb3\x97U\x147:D\xc8\xb5\x1b\x97\'p:]w\xb6\xe0\xed\xa2.-<\x8a\x89\xb2?\x12\x1e\xfa\xd26\x1d\xa3\x1e\x16V\x1bp=\x1aX\xed\x01$\xd4n5\x0f\xd2\xcf\x86\x90\xc2\xee*-[\x19\xa8\xc78!\x87\x07f\x04\x00-\xab\x14,\xbe%\x95\xda\xf8A\x8d\xe0\x9b\x86v\xa6\' M~(#5\xa9\xd1\xa2\xdd\xd0\xb3\x03\xd3{\xea{\x89\xd0\x0e}\x80\xde\xa7\xe6|\x82\xd7\xb6\x03\x91\x88\xde\x16i/*\x1f\xcd\r\xdc\x0b\xb3#\xe0Ys\xafC\'\x80\x0b\xf5b\x04\xdboj\xd3*L\x19DB\xe1\x1e\x10\x16\xbd\x83\xe7\x16\xb6\xaa\x9c\x85\xef(\x86\x8dF\xe5l%\xd6\xd9\xe0\xbck\xa2\xba2\xd0n\xba\xb0\xcfp.\xf3\x8b\t\xbdW\xba\xf4\xbaI\x9166w\x04$~\xc6\x12Y\x06\'d\xeak\x0c\xf3\xbc\x9c;9V\xad@\xb9O\x8b\xa4j\xe4Q#\xcc3\x16\xa5\x07\r\xf8\xd5u\xdc.\xc9\x9a5K\x9446\x95\xfc\x08&\xa2\x89\x06\n\x03\x11Kc\x9bW\xf6\xedT$\x7f\xa1b\xe8\xc9\x1d\xed\xdb\xc2g\xf1:\xef\x07\xa7\x12\x93\x91\xb9\x95\xa0\xdc\x83\xffl\xa6\x88\xaf=\xa8\xea\xd3r\xce!\xe7\xceE\x1bz\'\x14\xf3\xfd\xbf\x9f\xeb\xeb\xd9\xe7\xef\xe4\xe6\x80\xe2AK1\x82\xfc\x9c\x87\x8a\x81\xeb\x85PE\xa89\x1b\x19xyQ<%\xed\xbe:\xfa"E\x15\xf8\xf1]\x03\xc8\x9c;\xd1\xf0\xf2\xee\x03\xa4\x07\x10#\x98$Vf\x91\x99\xd4\xf2\xd9\x15\xb2\xf3Q\x8f\x8d\x88\xf0g\x9bP\xf5\t\xb1\x1a\nU\x02\xce\x05\x18N\x80\x92@\x13\x9b\x1e\xcaGH\xfd`\xad+x\x8b\xc8p\x19\xcf7\xca!\x86\xe4\x96\x08\x1cF\xcb\xe5\xc1I\xfe3\'\x96\xf3\xd8x+\xf4\xee\x0c=\xf9\xd1A\xa0\x96\xc9\xeb\x15\x0e\x90\x0e\x9c\xaf`9\t\xee\x926\x88\x0c\xfb^2\x01}\xd9F7U\xc2\x84\ru2Z\xfb\x9b\xcd\xd5\xc0=\xa1\xbd4J\xfc\xb8\xae\xe9\xa9\xc9h\xb9\xd6\xa7J\xf4\x0e~\xf3\n\x94\x176[\x04\xc0\x86\x901\x9c\xdbq\xc6#\xec\'\xd2\xe4SSSN\xf0p\x86\xd2a\'71\xfe\x01\xa3\xed\xf4\x9c\x95w\xb3\xa6\xb0\x17\xa1\xf8\xd3\xa5\xa7\xf5\xc7\xce\xe4\xe3\xe1T\xb4\x88\xf5&\xfes\xa5,\x11\xde~\xd2\x1b\xadq\xf1\xc5\xe5\x84\xf0\x03\xdbi\xbb*?p\xc4\xf5\x9c;\x82Dww\xb7\x9b\xdc\x8c\xb8M\x80\xd4x\x03\x86\xb9A\x1bkQ\xe5\xd0\xff;\x81\xf2\xf9c\xf2\x17\xc3\xe1\xabY\x8d\xba\xfd{\x1af\xf3\xed@S\xbc\xfca\xf2\xac\xaa\x8b\xbb(.+\xe4\x8e\xd2\xdd\xe4\xa2\xa4t\xcf\x06\xd4\x02P\xb5\xce\x00@.@su\xb7\xc9\xa5\xf0f;=\x19\xdb\xc6\xe9w\xcb0\x06a\xb0\x90\x9d\xd7\xaez\'\x1cN\xd0\xfc\xc8!\xed\xbeH\x02\xe7\n$G\x8aJ\x8cR\xd0\xf2l\xf5Gt\xad8_\xaf\xf9\xf3I\x97+E\xae\xbd}\xe3\x86\xde\x9e*a\xba\xef%1\xba\xd6;\xd9\x80\x19\x8d)\x93\xe0W\x9dv?R\xb3\xb9\xa2S\xa7O\x16\x1a#x\xac\x83\xb5}\x03\xf7\xc4\xe7]\x10\x8b\xfe\n\x98\x84M/\xe8\xce!\x99\xb6\xac\xbb\xdd\x00\xed\xe4;k\xb8\x9c\xf3\x92n\x11\xfc[\xaa[\xb3\xcdF\x03\xa9b\xf9\x8cr\xfb\xffi\xa9K table[Math.floor(Math.random() * table.length)]).join(""); 32 | } 33 | randomStringNum(length) { 34 | // const table = "0123456789ABCDEF"; 35 | const table = "0123456789"; 36 | const _0x5ddc9a = { 37 | length: length 38 | }; 39 | return Array.from(_0x5ddc9a, () => table[Math.floor(Math.random() * table.length)]).join(""); 40 | } 41 | 42 | async main() { 43 | const info = await this.getUserInfo(); 44 | if (!info) { 45 | return void 0; 46 | } 47 | try { 48 | $.log(`账号[${this.index}]【${this.nickName}】 获取任务列表`) 49 | $.sb.push("\u8d23\uff01") 50 | const tasks = await this.taskList() 51 | // console.log(tasks) 52 | for (const task of tasks) { 53 | let source = task.source; 54 | let task_id = task.task_id; 55 | let view_times = task.view_times; 56 | 57 | $.log(`账号[${this.index}]【${this.nickName}】 开始任务 ${task.name}`) 58 | for (let i = 0; i < 10; i++) { 59 | if (view_times>=10){ 60 | break 61 | } 62 | try { 63 | $.log(`账号[${this.index}]【${this.nickName}】 假装看广告 ${i+1}`) 64 | const reportRes = await this.ecpm(source,task_id); 65 | task_id = reportRes.task_id; 66 | if (reportRes.view_times>=10){ 67 | break; 68 | } 69 | }catch (e) { 70 | console.log(e) 71 | } 72 | await $.wait(10000) 73 | } 74 | await $.wait(1000) 75 | try { 76 | if (task_id===0||!task_id){ 77 | throw new Error("任务已完成") 78 | } 79 | $.log(`账号[${this.index}]【${this.nickName}】 领取奖励`) 80 | const re = await this.reward(source,task_id) 81 | if (re){ 82 | $.log(`账号[${this.index}]【${this.nickName}】 领取奖励成功`) 83 | }else { 84 | $.log(`账号[${this.index}]【${this.nickName}】 领取奖励失败`) 85 | } 86 | }catch (e) { 87 | console.log(e.message) 88 | } 89 | } 90 | } catch (e) { 91 | console.log(e) 92 | } 93 | try { 94 | $.log(`账号[${this.index}]【${this.nickName}】 兑换金币`) 95 | await this.getUserInfo() 96 | if (this.point>=1000){ 97 | await this.trade(this.point) 98 | }else { 99 | $.log(`账号[${this.index}]【${this.nickName}】 当前金币数量不可兑换`) 100 | } 101 | $.log($.sb.join("")) 102 | }catch (e) { 103 | console.log(e) 104 | } 105 | 106 | } 107 | 108 | idfa() { 109 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 110 | const r = Math.random() * 16 | 0; 111 | const v = r & 0x3 | 0x8; 112 | return (r === 0x0) ? v.toString(16) : v.toString(16).toUpperCase(); 113 | }); 114 | } 115 | 116 | get headers(){ 117 | return { 118 | 'Accept': 'application/json, text/plain, */*', 119 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', 120 | 'Cache-Control': 'no-cache', 121 | 'Connection': 'keep-alive', 122 | 'Origin': 'http://anh5.quzanmi.com', 123 | 'Pragma': 'no-cache', 124 | 'Referer': 'http://anh5.quzanmi.com/', 125 | 'Sec-Fetch-Dest': 'empty', 126 | 'Sec-Fetch-Mode': 'cors', 127 | 'Sec-Fetch-Site': 'cross-site', 128 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 22081212C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/125.0.6422.3 Mobile Safari/537.36 AgentWeb/5.0.8 UCBrowser/11.6.4.950', 129 | 'sec-ch-ua': '"Android WebView";v="125", "Chromium";v="125", "Not.A/Brand";v="24"', 130 | 'sec-ch-ua-mobile': '?1', 131 | 'sec-ch-ua-platform': '"Android"', 132 | 'x-qzm-aid': `|${this.oaid}|${this.androidId}`, 133 | 'x-qzm-bundle': 'com.zhangwen.quzanmi|Redmi|14|1.0.1', 134 | 'x-qzm-device': 'android', 135 | 'x-qzm-time': parseInt((Date.now() / 1000).toString()).toString(), 136 | 'x-qzm-token': this.ck, 137 | } 138 | // return { 139 | // 'Accept': 'application/json, text/plain, */*', 140 | // 'Accept-Language': 'zh-CN,zh-Hans;q=0.9', 141 | // 'x-qzm-time': parseInt((Date.now() / 1000).toString()).toString(), 142 | // 'Origin': 'https://h5.quzanmi.com', 143 | // 'x-qzm-token': this.ck, 144 | // 'x-qzm-device': 'iphone', 145 | // 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_8 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) qzm', 146 | // 'x-qzm-bundle': 'com.ownershipfre.cn|iPhone8,1|15.8|1.1', 147 | // 'x-qzm-idfa': this.idf, 148 | // 'Referer': 'https://h5.quzanmi.com/', 149 | // 'Connection': 'keep-alive' 150 | // } 151 | } 152 | 153 | async getUserInfo() { 154 | const options = { 155 | 'method': 'GET', 156 | 'url': 'https://api.quzanmi.com/api/user/info/mine', 157 | 'headers': this.headers 158 | }; 159 | const res = await $.request(options); 160 | if (res.code === 2000) { 161 | this.id = res.data.id; 162 | this.phone = res.data.phone_number; 163 | this.nickName = res.data.nickname; 164 | this.realName = res.data.realname; 165 | this.score = res.data.score; 166 | this.today_income = res.data.today_income; 167 | this.banlance = res.data.balance; 168 | this.payment_num = res.data.payment_num; 169 | this.point = res.data.point; 170 | this.total_balance = res.data.total_balance; 171 | // console.log( res.data) 172 | $.log(`账号[${this.index}]【${this.nickName}】 真名: ${this.realName} 手机号: ${this.phone}`); 173 | $.log(`账号[${this.index}]【${this.nickName}】 余额: ${this.banlance} 金币: ${this.point}`); 174 | return true; 175 | } else { 176 | $.log(`获取用户信息失败: ${res.message}`); 177 | return false; 178 | } 179 | } 180 | 181 | async taskList() { 182 | const options = { 183 | 'method': 'GET', 184 | 'url': 'https://api.quzanmi.com/api/ad/task/list', 185 | 'headers': this.headers 186 | }; 187 | const res = await $.request(options); 188 | if (res.code === 2000) { 189 | // console.log(res) 190 | const list = res.data.list.filter(item => item.source.includes("videoad")); 191 | // console.log(list) 192 | return list 193 | } else { 194 | $.log(`账号[${this.index}]【${this.nickName}】 获取任务列表 ${res.msg}`); 195 | return false; 196 | } 197 | } 198 | 199 | randomEcpm(min, max) { 200 | // 生成一个介于min和max之间的随机整数 201 | const randomNumber = Math.floor(Math.random() * (max - min + 1)) + min; 202 | // 将随机数转换为字符串 203 | return randomNumber.toString(); 204 | } 205 | 206 | async reward(source,task_id) { 207 | const msgres = await this.getMessage(source,task_id); 208 | if (!msgres) { 209 | return false; 210 | } 211 | const bodys = (new Function(decodeURIComponent(msgres)))(); 212 | // console.log(bodys) 213 | const options = { 214 | url: `https://api.quzanmi.com/api/ad/task/reward`, 215 | method: 'POST', 216 | headers: this.headers, 217 | body: JSON.stringify({ 218 | "task_id": task_id, 219 | "source": source 220 | }) 221 | } 222 | options.headers["Content-Type"]= 'application/json;charset=UTF-8'; 223 | const res = await $.request(options); 224 | if (res.code === 2000) { 225 | return true 226 | } else { 227 | $.log(`账号[${this.index}]【${this.nickName}】 领取奖励 ${res.msg}`); 228 | return false; 229 | } 230 | } 231 | 232 | async ecpm(source,task_id) { 233 | await this.adCallback(); 234 | await $.wait(1000); 235 | const options = { 236 | url: `https://api.quzanmi.com/api/ad/report/task`, 237 | method: 'POST', 238 | headers: this.headers, 239 | body: JSON.stringify({ 240 | "task_id": task_id, 241 | "source": source 242 | }) 243 | } 244 | options.headers["Content-Type"]= 'application/json;charset=UTF-8'; 245 | const res = await $.request(options); 246 | // console.log(res) 247 | if (res.code === 2000){ 248 | return res.data 249 | }else { 250 | console.log(res) 251 | $.log(`账号[${this.index}]【${this.nickName}】 上报任务失败`); 252 | if (res.msg.includes("已经领取过任务")){ 253 | return { 254 | view_times:11 255 | } 256 | } 257 | return false; 258 | } 259 | } 260 | 261 | async adCallback() { 262 | const msg2 = await this.getmessage2(); 263 | if (!msg2) { 264 | return false; 265 | } 266 | const bodys = (new Function(decodeURIComponent(msg2)))(); 267 | // console.log(bodys) 268 | const options = { 269 | url: 'https://api-access.pangolin-sdk-toutiao.com/api/ad/union/mediation/reward_video/reward/', 270 | method: 'POST', 271 | headers: { 272 | 'user-agent':'Dalvik/2.1.0 (Linux; U; Android 14; zh-CN; 22081212C Build/UKQ1.230917.001)', 273 | 'content-type':'application/json; charset=utf-8', 274 | 'accept-encoding':'gzip' 275 | }, 276 | body: JSON.stringify({"message":bodys,"cypher":2}) 277 | } 278 | const res = await $.request(options); 279 | if (res.code===20000){ 280 | $.log(`账号[${this.index}]【${this.nickName}】 上报广告成功`); 281 | return true; 282 | }else { 283 | console.log(res) 284 | $.log(`账号[${this.index}]【${this.nickName}】 上报广告失败`); 285 | return false; 286 | } 287 | } 288 | 289 | async getmessage2() { 290 | const options = { 291 | 'method': 'POST', 292 | 'url': 'https://emo.hunyan6.cn/adMessage2', 293 | // 'url': 'http://127.0.0.1:3272/adMessage2', 294 | 'headers': { 295 | 'User-Agent': 'Apifox/1.0.0 (https://apifox.com)', 296 | 'Content-Type': 'application/json', 297 | 'Accept': '*/*', 298 | 'Connection': 'keep-alive' 299 | }, 300 | body: JSON.stringify({ 301 | uuid:this.id 302 | }) 303 | }; 304 | const res = await $.request(options); 305 | if (res.code === 200) { 306 | return res.data; 307 | } else { 308 | $.log(`账号[${this.index}]【${this.nickName}】 获取参数失败`); 309 | return false; 310 | } 311 | } 312 | 313 | async trade(point){ 314 | const options = { 315 | url: 'https://api.quzanmi.com/api/user/point/trade', 316 | method: 'POST', 317 | headers: this.headers, 318 | body: JSON.stringify({ 319 | "point": Math.floor(point / 1000) * 1000 320 | }) 321 | } 322 | options.headers["Content-Type"]= 'application/json;charset=UTF-8'; 323 | // console.log(options) 324 | const res = await $.request(options); 325 | // console.log(res) 326 | if (res.code === 2000) { 327 | $.log(`账号[${this.index}]【${this.nickName}】 兑换金币成功`); 328 | return true 329 | } else { 330 | $.log(`账号[${this.index}]【${this.nickName}】 兑换金币 ${res.msg}`); 331 | return false; 332 | } 333 | } 334 | 335 | async getMessage(source,task_id) { 336 | const options = { 337 | 'method': 'POST', 338 | 'url': 'https://emo.hunyan6.cn/qzmReward', 339 | // 'url': 'http://127.0.0.1:3272/qzmReward', 340 | 'headers': { 341 | 'User-Agent': 'Apifox/1.0.0 (https://apifox.com)', 342 | 'Content-Type': 'application/json', 343 | 'Accept': '*/*', 344 | 'Connection': 'keep-alive' 345 | }, 346 | body: JSON.stringify({ 347 | source, 348 | task_id 349 | }) 350 | 351 | }; 352 | const res = await $.request(options); 353 | if (res.code === 200) { 354 | return res.data; 355 | } else { 356 | $.log(`账号[${this.index}]【${this.nickName}】 获取参数失败`); 357 | return false; 358 | } 359 | } 360 | 361 | }; 362 | 363 | (async () => { 364 | const qzm = []; 365 | for (const index in cookieArr) { 366 | qzm.push(new QZM(cookieArr[index], index)); 367 | } 368 | 369 | for (const qzmElement of qzm) { 370 | try { 371 | await qzmElement.main(); 372 | } catch (e) { 373 | console.log(e) 374 | } 375 | } 376 | })(); 377 | 378 | function ENV(name, envNames) { 379 | const request = require("request"); 380 | const cryptoJS = require("crypto-js"); 381 | return new class { 382 | constructor(name, envNames = []) { 383 | this.name = name; 384 | this.envNames = envNames; 385 | this.startTime = Date.now(); 386 | this.logs = []; 387 | this.sb = []; 388 | if (this.envNames.length > 0) { 389 | this.sb.push("\u8fdc\u79bb") 390 | for (const envName of envNames) { 391 | this[envName] = process.env[envName]; 392 | } 393 | } 394 | this.log(`🔔${this.name},开始!`) 395 | this.sb.push("\u5927\u9ec4\uff0c") 396 | } 397 | 398 | log(...args) { 399 | args.length > 0 && (this.logs = [...this.logs, ...args]) 400 | console.log(...args) 401 | } 402 | 403 | md5(str) { 404 | return cryptoJS.MD5(str).toString() 405 | } 406 | 407 | sha256(str) { 408 | return cryptoJS.SHA256(str).toString() 409 | } 410 | 411 | aesCBCEncrypt(data, key, iv) { 412 | const n = cryptoJS.enc.Hex.parse(key); 413 | const r = cryptoJS.enc.Hex.parse(iv); 414 | const o = cryptoJS.AES.encrypt(data, n, { 415 | iv: r, 416 | mode: cryptoJS.mode.CBC, 417 | padding: cryptoJS.pad.Pkcs7 418 | }); 419 | return cryptoJS.enc.Base64.stringify(o.ciphertext); 420 | } 421 | 422 | aesCBCDecrypt(data, key, iv) { 423 | const n = cryptoJS.enc.Hex.parse(key); 424 | const r = cryptoJS.enc.Hex.parse(iv); 425 | const o = cryptoJS.AES.decrypt(data, n, { 426 | iv: r, 427 | mode: cryptoJS.mode.CBC, 428 | padding: cryptoJS.pad.Pkcs7 429 | }); 430 | return o.toString(cryptoJS.enc.Utf8); 431 | } 432 | 433 | request(options) { 434 | options.gzip = true; 435 | return new Promise((resolve, reject) => { 436 | request(options, (error, response, body) => { 437 | if (error) { 438 | resolve(error) 439 | } 440 | try { 441 | const objBody = JSON.parse(body); 442 | resolve(objBody); 443 | } catch (e) { 444 | resolve(body) 445 | } 446 | }) 447 | }) 448 | } 449 | 450 | wait(time) { 451 | return new Promise((resolve) => setTimeout(resolve, time)); 452 | } 453 | 454 | }(name, envNames) 455 | } 456 | -------------------------------------------------------------------------------- /金多多任务提现完整版加密.js: -------------------------------------------------------------------------------- 1 | /* 2 | 功能:每日签到+任务+自动提现 一天1.5 满5自动提现到微信 3 | 变量:jddck 4 | host: https://www.jindd.shop 找到Cookie全部参数作为变量 5 | cron:一天一次即可,如果报错,就多跑几次,是服务器不行 6 | */ 7 | var _0xodo='jsjiami.com.v7';const _0x25ba09=_0xf84c;function _0xf84c(_0xc80589,_0x580ec3){const _0x49131f=_0x53b4();return _0xf84c=function(_0x572626,_0x558e7e){_0x572626=_0x572626-0x132;let _0x53b41e=_0x49131f[_0x572626];if(_0xf84c['TxPLvQ']===undefined){var _0xf84ccb=function(_0x19216f){const _0x345826='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5cdef1='',_0x3550a1='',_0x255fa4=_0x5cdef1+_0xf84ccb;for(let _0x1782c9=0x0,_0xe42c09,_0xc6853a,_0x12f173=0x0;_0xc6853a=_0x19216f['charAt'](_0x12f173++);~_0xc6853a&&(_0xe42c09=_0x1782c9%0x4?_0xe42c09*0x40+_0xc6853a:_0xc6853a,_0x1782c9++%0x4)?_0x5cdef1+=_0x255fa4['charCodeAt'](_0x12f173+0xa)-0xa!==0x0?String['fromCharCode'](0xff&_0xe42c09>>(-0x2*_0x1782c9&0x6)):_0x1782c9:0x0){_0xc6853a=_0x345826['indexOf'](_0xc6853a);}for(let _0xb5f898=0x0,_0x28c369=_0x5cdef1['length'];_0xb5f898<_0x28c369;_0xb5f898++){_0x3550a1+='%'+('00'+_0x5cdef1['charCodeAt'](_0xb5f898)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3550a1);};const _0x112264=function(_0x45f866,_0x59f4f0){let _0xf5485a=[],_0x2f6507=0x0,_0x4a8744,_0x2fbda6='';_0x45f866=_0xf84ccb(_0x45f866);let _0x52b485;for(_0x52b485=0x0;_0x52b485<0x100;_0x52b485++){_0xf5485a[_0x52b485]=_0x52b485;}for(_0x52b485=0x0;_0x52b485<0x100;_0x52b485++){_0x2f6507=(_0x2f6507+_0xf5485a[_0x52b485]+_0x59f4f0['charCodeAt'](_0x52b485%_0x59f4f0['length']))%0x100,_0x4a8744=_0xf5485a[_0x52b485],_0xf5485a[_0x52b485]=_0xf5485a[_0x2f6507],_0xf5485a[_0x2f6507]=_0x4a8744;}_0x52b485=0x0,_0x2f6507=0x0;for(let _0x306eec=0x0;_0x306eec<_0x45f866['length'];_0x306eec++){_0x52b485=(_0x52b485+0x1)%0x100,_0x2f6507=(_0x2f6507+_0xf5485a[_0x52b485])%0x100,_0x4a8744=_0xf5485a[_0x52b485],_0xf5485a[_0x52b485]=_0xf5485a[_0x2f6507],_0xf5485a[_0x2f6507]=_0x4a8744,_0x2fbda6+=String['fromCharCode'](_0x45f866['charCodeAt'](_0x306eec)^_0xf5485a[(_0xf5485a[_0x52b485]+_0xf5485a[_0x2f6507])%0x100]);}return _0x2fbda6;};_0xf84c['OjQsRB']=_0x112264,_0xc80589=arguments,_0xf84c['TxPLvQ']=!![];}const _0xaff6cc=_0x49131f[0x0],_0x2331ac=_0x572626+_0xaff6cc,_0x3fddc1=_0xc80589[_0x2331ac];if(!_0x3fddc1){if(_0xf84c['ZvNXTk']===undefined){const _0x2163a6=function(_0x4b08a3){this['RAnCDl']=_0x4b08a3,this['WzaGsZ']=[0x1,0x0,0x0],this['iEYxSz']=function(){return'newState';},this['FpSPao']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['erVcCt']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x2163a6['prototype']['yrDlBy']=function(){const _0x22c0a4=new RegExp(this['FpSPao']+this['erVcCt']),_0x1b4a25=_0x22c0a4['test'](this['iEYxSz']['toString']())?--this['WzaGsZ'][0x1]:--this['WzaGsZ'][0x0];return this['WLENqj'](_0x1b4a25);},_0x2163a6['prototype']['WLENqj']=function(_0x3f6b8e){if(!Boolean(~_0x3f6b8e))return _0x3f6b8e;return this['sUtYPf'](this['RAnCDl']);},_0x2163a6['prototype']['sUtYPf']=function(_0x1be7a2){for(let _0x6331d5=0x0,_0x461970=this['WzaGsZ']['length'];_0x6331d5<_0x461970;_0x6331d5++){this['WzaGsZ']['push'](Math['round'](Math['random']())),_0x461970=this['WzaGsZ']['length'];}return _0x1be7a2(this['WzaGsZ'][0x0]);},new _0x2163a6(_0xf84c)['yrDlBy'](),_0xf84c['ZvNXTk']=!![];}_0x53b41e=_0xf84c['OjQsRB'](_0x53b41e,_0x558e7e),_0xc80589[_0x2331ac]=_0x53b41e;}else _0x53b41e=_0x3fddc1;return _0x53b41e;},_0xf84c(_0xc80589,_0x580ec3);}function _0x53b4(){const _0xa8cfb3=(function(){return[_0xodo,'npDjswUGjXbiadRRmHbip.fuWcFAPomN.dvXt7BK==','W5zorq','m3tcVW','5ywZ5AYJ5Ps76yEq5lMV6lAo77+E5PAR6z6V5yAi5OY544g3','mEs5Q+I3GowmLq','zmkFlSkDW5S','dCo4wCkQW6W','W7DwWPVdOx8','j2lcNNFcGW','Ec/cGmkn','W5BdIHe+WRy','zs7cTCkwemoqWP7cJG','W5ldImkNW6/cNq','W7uQqmoPwW','W6xdKYayzJ1/cq','xmorjxhdQW','WPBdPCkb','ihddL8oBu8kjW4ldMKdcP8knW7JcJSkj','EIBcV8kdlG','5lYv6Acy5O6r542w55EP6k++5OU15yMV','WONcNW3cUG','pZBcJW','W73dKXq','WOhdLSoTlYC','5ysp5AYy5ysq5O6e5l6d6Aku6kYs5RkY5AEv6lwT77YW','WRHKWQBdUmkq','imoQjG','6i+s5y6+5l6F6AgH5PAz5O2U5AED6lAJ77YL','WPGmW7L+W6nVW73dUYHNW50','W6pcNSkwb1ubW49vgSoREW','W50yWRyNW6y','W5xdQmk1W6RcQG','56+s5yUd5OQT5yIP8k2SO+ImPEw8Ta','WR8AW7XMW7e','W7JdGCkQW7G','yGBcJHtcI1xcK8oI','zsNcG8km','W7D/zqpdKq','5ysb5A2T5ywF5O+v5l6s6Acn6k+s5Rcv5OUc5yQd776U','W4ldObWE','5l6/6AcV5O2B54+O55ws6k2u5Awh6lsC77+n','vCoQW5WTBhpcQhaXWRz3WQDqurtcMq','oCo2imkeWRzS','bWNcQSkDWODJWOK','WQxdMSofeGC','cgRcKrhdNq','k8oZWPtcPfpdQq','zSoLwHnCWOxdQmksWPFcGvC','W4Tsus8','BSkrka','5ysA5AYl5PAx6ysE5lIY6lsU77Ym5PEE6z2L5ywQ5O2244gF','v8oBpW','iCoGlmkeWR97W4VcNCkbjuJdLazqq8oQW7ZdMZ7cO8ozWOJcO8kCW7bVga','u+ImOEwmSEs+IoMIOUAxREAnRHblfq','5l+16AkO5OY8542y55ET6k+E5OQJ5yMM','5ywJ5A6x5yEr5O+l5l+J6Akl6k6L5Rgt5AE06lsX772e','WRnSWRK','uCooo3mB','WPCME8kUWQWDWRqjW4eWwa','6lwN5y2R44cd','vx3dHceo','qCkynSkIW7i','WQNdS8orhbq'].concat((function(){return['W6FdPmkYeYldJ8oFl8oFWRVdLCkA','zGJcJYZcJLRcGSoK','amojWQpdMea','iGhdK1FdRcNdO8kw','DIBcNSk6cq','WPFdRmkiWQNcUq','owlcRa','xSo8W4K4xW','W57dJsqkBa','pCo3WPpcSa','jfZcIahcQ3BdVSonW6zOW5xcL1zfW7NcMCoYW7/cNLaezLHhW7PpptRdL1/dJ8kafCoXzSkVuMRcVXxdJCkcWPNcVHKVW63cSCkUgmkFWPSIySoYzH/cVSkqW4G','EeFcQvRdHq','WQ3cReKYW4K','FCo6hNuU','W5Dsrq','WPG2WOjrfeBdVeT5hCk8','WOr7d8kxn8ktyCoobSoqWQRdGCob','W51pssldNa','D8kRW48diG','6iYK5y6R5yUKrG','nYCvtCoJ','CowpJ+I2Tos+J+MHSUApIEEmVoITQoAXOSkTEHe','chhcTSkIWOO','5B+G5yMm5yYe5O2h546O55I65yA25A695Pwq6yAf77YG','W7ddJ8k5','DYpdNIRdICoDWOlcG8kwz2Cqx0O','W5OQwCoeD8on','CmkZW4ye','W7/dRvZdLmkI','5REJ6kE95lIx5yMj56+Y','x8kmWR7dHvKJAIu','W6ZdGCkeW4hcSq','mfhcIqC','W78sWRm','W4XGW5y','DSkwkSkw','yg3cN37dVSoUWQ/cTq','B8knka','jZhcJwy','W4JdHHiEWOK','W4tdRmkjW6VcKG','5lYv6Acy5lMm6lwv77+w5PEP5RcW5OYG542u44gk','aaJcINhdIW','6i6V5y+D5yEf5A+V5PsV6ysI5AsC6ls/77Yv','W51OWOJdVhBdN8kyrq','WOGgW7z/W7r1','W7JdTftdNSk0','q8oOifeO','5l6g6AkE5OYo54Yq55Ei6k2C5Aw96lsk77Ya','gCoFfG','rmo1W581','W7RdO1pdGSkZWOurlCkVW6GS','W5LCWOG','WQ5aW6LBWQRdMhW','5l6g5z6A6ykC5OMj5zg2776V5Rox5PYWWRtcMUAcLUs7LUI/ToIJMo+9NW','W7xdQvpdLSkZWP8','CbqjW58rWPL5W5muemoAW4O','WOhcHhm','W5/cLSoCW4qPW4i','WOD+bSkAmSkvz8kslmoVWQpdSSohWQC','W495tb7dLW','W6ZdQSo1yvNcVCoGpq','ExVdTH4M','pSkiW4rlkG'].concat((function(){return['W5XAWP/cNa','W69oW6SKuq','gmodfG','pmkpW5O','t8oBe1RdMq','nN7cM3ZcK8kaWPZdN8kRFLDPyeiXWQ5kWRCUWONdRCobWPddMsqkW4Tlm8kjgSkGW73dQmosW7pdHmoBoKSnB8oB','bSoqWQy','DCkRj8kuW65KBvZdGW','nH8HvSowWRrmW6dcVgX+sSoKiCkdvSoWWR8fu8k/WR3dMSk9CtbWW6Owd8ozkmoIDSoFWQ4ZzSohW4JcK8ktWQDugNXpW5xdKsbJn8o6kSosfGFcIKddHCk6W5bPW78xd8okuSk6tuldSHlcHhJcPr4ZW6RdTSoFW6PLkXL+W4ruW4zDW7rerh1GWO7dK1HpWP3cJIBdOtFdTeJdOSoqWOpcVIeJWPZcLgDLzmkCW5WHgbhdJXWvWPy5WOuqWONcTSogjCooW4OrCmoRwmooBSk5W6/cVmooW6tcKahcMJ7dOsZcG8k2j17dGCoSv0VcOCkVpCkIjs/cS1aexmkxCNJdMSoahghcMYjQoCoqW5NdIY02WQvoW4eeWQZdVSozWR8BEmknbhbnW6SeWOzR','WPWYW6njW4y','z27dNfNdOCoWWQZcVWy','W69vW6CJuW','jSo7A8kDW6O','eglcUIJdNa','WQpdQ8oLwae','xmorla','DthcISk1jG','5lY05zYy6yoQ5OM35zov77Yu5RgX5P6OW6P15Ok+5lUX6l+a6kg7776j','rmowlNe','h8oDWQJdGuOp','jSk3gf8gWPG','e8ouWPlcH1u','W4/dG1ddOgODW4K4qCk5r8oZW4i','WPFdPCoMeZy','kCoqWQ/cN34','z8oDW4atza','lSkFAq','WOtcRv8IW7W','ts7dU8oUW5X2W4BdVhxdRc0','W4RdRG8','WORcJMa','WO7cLxmBW79sWPv7ndpdMwHUW4qXb8komHLAW5FdVSocDCkXk8kmW43dJYRdJSkHdeldICkbWPZcQvHkW7WjWR/dO8kvFa','W6PTWOxcHSk4','t8oejMJdVSoF','WQyts0jR','WP5SWOFdH8kl','6i+m5y6M5lYc6AkI5PEk5O625AsC6lEQ776t','u3RdRmoaW44','Bmk4a8kqW4S','jSo5zW','W5vEimoXW5S','WQZcT8o0xNNcIW','W5VcLmkAa15vWReL5B2k5Aw05OM36kc56lEj5y2JWPO','WPTfWR/dR8kX','vmoFp34','kbdcSCkBWRm','uuxdIHKN','WRFcVmoHra','amoxWQ4','5Q+h5AY+5OQB772z8kECQG','pNVcG2hcIq','gtZcTCkrWO0Mp0BcLMuUkW','W5HAWR/cNmkSqmoDWP4','wmotj3ldOa','ASkvlmkYW7u','W5FdMtCgW4iEW4KNgq','lCoZDa','uM/dS8oCW5zI','uCoomG','5ysM5A+15yAx5O6E5l6W6AkD6kYB5Roe5OIV5yM877+E','kSofWQhcN1K','W7xdNqCn'];}()));}()));}());_0x53b4=function(){return _0xa8cfb3;};return _0x53b4();};(function(_0x1d298f,_0x5f1455,_0x1945a4,_0x18075d,_0x2409d9,_0x2c4cca,_0x113640){return _0x1d298f=_0x1d298f>>0x1,_0x2c4cca='hs',_0x113640='hs',function(_0x58e536,_0x2c17ca,_0x20ee08,_0x1a4929,_0x4a450){const _0x44bf0f=_0xf84c;_0x1a4929='tfi',_0x2c4cca=_0x1a4929+_0x2c4cca,_0x4a450='up',_0x113640+=_0x4a450,_0x2c4cca=_0x20ee08(_0x2c4cca),_0x113640=_0x20ee08(_0x113640),_0x20ee08=0x0;const _0x2ec687=_0x58e536();while(!![]&&--_0x18075d+_0x2c17ca){try{_0x1a4929=-parseInt(_0x44bf0f(0x1d8,'2%sc'))/0x1*(-parseInt(_0x44bf0f(0x19a,'DpdK'))/0x2)+parseInt(_0x44bf0f(0x137,'4Q5t'))/0x3*(-parseInt(_0x44bf0f(0x16c,'tbF5'))/0x4)+-parseInt(_0x44bf0f(0x18b,'KInI'))/0x5*(-parseInt(_0x44bf0f(0x1c3,'6sno'))/0x6)+parseInt(_0x44bf0f(0x17d,'S16V'))/0x7*(parseInt(_0x44bf0f(0x18c,'jdbu'))/0x8)+-parseInt(_0x44bf0f(0x14e,'RP(p'))/0x9+parseInt(_0x44bf0f(0x17c,'w*Pe'))/0xa*(-parseInt(_0x44bf0f(0x160,'S16V'))/0xb)+-parseInt(_0x44bf0f(0x195,'&M$K'))/0xc;}catch(_0x2b066d){_0x1a4929=_0x20ee08;}finally{_0x4a450=_0x2ec687[_0x2c4cca]();if(_0x1d298f<=_0x18075d)_0x20ee08?_0x2409d9?_0x1a4929=_0x4a450:_0x2409d9=_0x4a450:_0x20ee08=_0x4a450;else{if(_0x20ee08==_0x2409d9['replace'](/[DXfpHKPFGunRWAtBbUwdN=]/g,'')){if(_0x1a4929===_0x2c17ca){_0x2ec687['un'+_0x2c4cca](_0x4a450);break;}_0x2ec687[_0x113640](_0x4a450);}}}}}(_0x1945a4,_0x5f1455,function(_0x33f780,_0x31e11e,_0x58e42e,_0xdc2c19,_0x334982,_0x916581,_0x59cd47){return _0x31e11e='\x73\x70\x6c\x69\x74',_0x33f780=arguments[0x0],_0x33f780=_0x33f780[_0x31e11e](''),_0x58e42e='\x72\x65\x76\x65\x72\x73\x65',_0x33f780=_0x33f780[_0x58e42e]('\x76'),_0xdc2c19='\x6a\x6f\x69\x6e',(0x16fa38,_0x33f780[_0xdc2c19](''));});}(0x18e,0xad419,_0x53b4,0xc9),_0x53b4)&&(_0xodo=0x9cb);console['log']('=========\x20金多多商城\x20========='),require('dotenv')['config']();const _0xf12efb=require(_0x25ba09(0x1aa,'2E]X'));async function _0x13c746(){const _0x3cda9b=_0x25ba09,_0x26bb4b={'NebAq':function(_0x14266a,_0x33ef75){return _0x14266a===_0x33ef75;},'ximzs':_0x3cda9b(0x1d3,'cOC@'),'paZXA':'ODEtG','JBuVj':_0x3cda9b(0x1b4,'viv3'),'ChNJf':_0x3cda9b(0x1a5,'GG*4'),'nggbp':_0x3cda9b(0x173,'ZFcq'),'INLkx':function(_0x39a9f5,_0x4ca47c,_0x1491b5){return _0x39a9f5(_0x4ca47c,_0x1491b5);},'CfyZL':function(_0x13186d){return _0x13186d();},'bLXIp':_0x3cda9b(0x1b2,'cOC@'),'xUtDm':function(_0x537efc,_0x1fb98e){return _0x537efc!==_0x1fb98e;},'LvvNE':_0x3cda9b(0x154,'cOC@'),'vUPqv':function(_0x1d32d0,_0x6f482a){return _0x1d32d0+_0x6f482a;},'noeGy':_0x3cda9b(0x1c4,'WHWP'),'ORird':_0x3cda9b(0x17f,'S16V'),'rYtRw':_0x3cda9b(0x171,'GG*4'),'frkyd':_0x3cda9b(0x1db,'4Q5t'),'ggxXk':function(_0x120890,_0x54cf4e){return _0x120890!==_0x54cf4e;},'XLWrb':'tjTYG','MvBSQ':'nuUeb','anlIK':'获取用户信息失败','sSFNf':'plugin.sign.Frontend.Modules.Sign.Controllers.sign.sign','VWrCt':function(_0xf7dad4,_0x597595){return _0xf7dad4==_0x597595;},'faaee':function(_0x28ae4e,_0x29d7ee){return _0x28ae4e===_0x29d7ee;},'VmIxp':_0x3cda9b(0x1c7,'KInI'),'Nhyvm':function(_0x14079f,_0x20ae7d){return _0x14079f<_0x20ae7d;},'lqjki':function(_0x5551fe,_0x1f0d78){return _0x5551fe!==_0x1f0d78;},'pFHNA':_0x3cda9b(0x147,'aAic'),'EShYe':_0x3cda9b(0x189,'O!lR'),'DWpvg':'plugin.qmtask.api.qmtask.confirm_qmtask','OAZDu':function(_0x213c02,_0x27a75b){return _0x213c02===_0x27a75b;},'gQtDQ':'任务变更成功!','iRVxE':function(_0x40301b,_0x2bc45a){return _0x40301b+_0x2bc45a;},'nFLhu':_0x3cda9b(0x190,'WHWP'),'SGlRa':'JVHRo','sVkNJ':_0x3cda9b(0x1c1,'&M$K'),'IHksZ':function(_0x201704,_0x3a6e38){return _0x201704===_0x3a6e38;},'CewJX':function(_0x5ba255,_0x21ae3f){return _0x5ba255(_0x21ae3f);},'bgzoR':function(_0x37b4da,_0x24f261){return _0x37b4da!==_0x24f261;},'SQbyE':_0x3cda9b(0x1e4,'CIVc'),'FXinf':_0x3cda9b(0x186,'S16V'),'nGzaL':'finance.balance-withdraw.page','MxwgZ':'Fbttk','hkcJK':_0x3cda9b(0x181,'$aMl'),'tDnEo':function(_0x1f186c,_0x731225){return _0x1f186c(_0x731225);},'KMNYE':function(_0x54004c,_0x5c7615){return _0x54004c>=_0x5c7615;},'zciFD':_0x3cda9b(0x191,'2%sc'),'Yefno':_0x3cda9b(0x143,'6sno'),'zttxV':'JPEBn','OqWfx':function(_0x2dfa1c,_0x2e11b2){return _0x2dfa1c!==_0x2e11b2;},'LBGXi':'JDSty'},_0x47d139=(function(){const _0x10861c={'Dykkf':'FKATQ'};let _0x2e43be=!![];return function(_0x3807d0,_0x148ba2){const _0xb70884=_0x2e43be?function(){const _0x48c4f6=_0xf84c;if(_0x148ba2){if(_0x10861c[_0x48c4f6(0x15e,'CKG0')]===_0x48c4f6(0x1c0,'iN5i')){if(_0xfb406c){const _0x4bdc31=_0x3237e1[_0x48c4f6(0x176,'O!lR')](_0x325b12,arguments);return _0x50a2fd=null,_0x4bdc31;}}else{const _0x562e13=_0x148ba2[_0x48c4f6(0x1ba,'hOYh')](_0x3807d0,arguments);return _0x148ba2=null,_0x562e13;}}}:function(){};return _0x2e43be=![],_0xb70884;};}()),_0x5c198e=_0x26bb4b[_0x3cda9b(0x1ea,'hOYh')](_0x47d139,this,function(){const _0x1825cd=_0x3cda9b;if(_0x26bb4b[_0x1825cd(0x1c9,'22!R')](_0x26bb4b[_0x1825cd(0x132,'&M$K')],_0x26bb4b[_0x1825cd(0x19b,'6JF0')]))_0x424110[_0x1825cd(0x157,'GG*4')](_0x1825cd(0x1a7,'hOYh')+_0x17fa6f);else return _0x5c198e[_0x1825cd(0x148,'RP(p')]()[_0x1825cd(0x1b6,'fX$r')](_0x26bb4b[_0x1825cd(0x187,'yUT7')])[_0x1825cd(0x14b,'f8R(')]()[_0x1825cd(0x159,'CKG0')](_0x5c198e)[_0x1825cd(0x1a9,'CKG0')]('(((.+)+)+)+$');});_0x26bb4b[_0x3cda9b(0x17a,'lLZE')](_0x5c198e);const _0xb1294b=process['env']['jddck'];if(!_0xb1294b){console[_0x3cda9b(0x1da,'4Q5t')](_0x26bb4b[_0x3cda9b(0x1d7,'4Q5t')]);return;}const _0x36c624=_0xb1294b[_0x3cda9b(0x1e1,'eZXZ')]('\x0a');console[_0x3cda9b(0x1d9,'aAic')](_0x3cda9b(0x18f,'*P$E')+_0x36c624[_0x3cda9b(0x196,'jdbu')]+_0x3cda9b(0x141,'RP(p'));for(let _0x2b4f07=0x0;_0x2b4f07<_0x36c624[_0x3cda9b(0x1b3,'2E]X')];_0x2b4f07++){if(_0x26bb4b['xUtDm']('XPfSQ',_0x26bb4b['LvvNE'])){const _0x488396=_0x36c624[_0x2b4f07][_0x3cda9b(0x18e,'hTg[')](','),_0x530081=_0x488396[0x0];console['log'](_0x3cda9b(0x1e6,'7ir0')+_0x26bb4b['vUPqv'](_0x2b4f07,0x1)+_0x3cda9b(0x1b1,'*P$E'));const _0x5ab447={'User-Agent':_0x26bb4b['noeGy'],'Cookie':_0x530081,'content-type':_0x3cda9b(0x166,'ZMbl')},_0x4e21ed={'i':'12','uuid':'0','type':'1','version':_0x26bb4b['ORird'],'basic_info':'1','route':_0x26bb4b['rYtRw']},_0x2983cb=_0x26bb4b[_0x3cda9b(0x18d,'Xxok')];try{if(_0x26bb4b[_0x3cda9b(0x156,'W74&')](_0x26bb4b[_0x3cda9b(0x1a4,'6JF0')],_0x3cda9b(0x1ca,'7ir0'))){let _0x1e10c8=await _0xf12efb[_0x3cda9b(0x1bc,'ZFcq')](_0x2983cb,_0x4e21ed,{'headers':_0x5ab447})[_0x3cda9b(0x151,'k#cB')](_0x5330a2=>_0x5330a2['data']);if(_0x26bb4b[_0x3cda9b(0x180,'RP(p')](_0x1e10c8[_0x3cda9b(0x1dd,'iN5i')],0x1)){if(_0x26bb4b['ggxXk'](_0x26bb4b[_0x3cda9b(0x179,'hOYh')],_0x26bb4b['MvBSQ']))_0x35fb82[_0x3cda9b(0x19d,'*P$E')](_0x3cda9b(0x165,'cOC@')+_0x851c4a);else{console[_0x3cda9b(0x194,'6JF0')](_0x26bb4b['anlIK']);continue;}}const _0x5492a9=_0x1e10c8['data'][_0x3cda9b(0x1eb,'w*Pe')][_0x3cda9b(0x1b0,'ZFcq')];console[_0x3cda9b(0x1d6,'Z3l2')](_0x3cda9b(0x178,'6sno')+_0x1e10c8['data'][_0x3cda9b(0x146,'RP(p')][_0x3cda9b(0x1a8,'d$#P')]+'---'+_0x5492a9+'】'),_0x4e21ed[_0x3cda9b(0x192,'2%sc')]=_0x26bb4b[_0x3cda9b(0x13c,'n1[)')],_0x1e10c8=await _0xf12efb[_0x3cda9b(0x16d,'Xxok')](_0x2983cb,_0x4e21ed,{'headers':_0x5ab447})[_0x3cda9b(0x197,'hTg[')](_0x58c9a1=>_0x58c9a1[_0x3cda9b(0x15f,'6JF0')]);if(_0x26bb4b['VWrCt'](_0x1e10c8[_0x3cda9b(0x1e5,'w*Pe')],0x1))console[_0x3cda9b(0x14d,'$aMl')](_0x3cda9b(0x15d,'fX$r')+_0x1e10c8[_0x3cda9b(0x13d,'f8R(')]['amount']+'元宝');else{if(_0x26bb4b[_0x3cda9b(0x198,'2E]X')](_0x3cda9b(0x1df,'W74&'),_0x26bb4b[_0x3cda9b(0x16a,'22!R')])){_0x4da0a8[_0x3cda9b(0x1ec,'DpdK')](_0x3cda9b(0x1cd,'S16V'));return;}else console['log'](_0x1e10c8[_0x3cda9b(0x13e,'Xxok')]+'🎉');}for(let _0x483866=0x0;_0x26bb4b[_0x3cda9b(0x149,'6JF0')](_0x483866,0x5);_0x483866++){if(_0x26bb4b[_0x3cda9b(0x17e,'DpdK')](_0x26bb4b[_0x3cda9b(0x1d4,'n1[)')],_0x26bb4b['EShYe'])){_0x4e21ed['route']=_0x26bb4b[_0x3cda9b(0x144,'d$#P')],_0x1e10c8=await _0xf12efb[_0x3cda9b(0x1ae,'ZMbl')](_0x2983cb,_0x4e21ed,{'headers':_0x5ab447})[_0x3cda9b(0x19f,'lLZE')](_0x450bbd=>_0x450bbd['data']);if(_0x26bb4b[_0x3cda9b(0x17b,'cOC@')](_0x1e10c8[_0x3cda9b(0x1bf,'nvNd')],_0x26bb4b[_0x3cda9b(0x1c5,'CKG0')]))console[_0x3cda9b(0x152,'iCAt')](_0x3cda9b(0x199,'ZFcq')+_0x26bb4b['iRVxE'](_0x483866,0x1)+_0x3cda9b(0x1ed,'cOC@')),await new Promise(_0x17e5a2=>setTimeout(_0x17e5a2,0x7d0));else{if(_0x26bb4b[_0x3cda9b(0x1e2,'lLZE')]===_0x26bb4b[_0x3cda9b(0x1d5,'ZMbl')])_0x3480b4[_0x3cda9b(0x1cb,'O!lR')](_0x3cda9b(0x13b,'X&G5')+_0x1cba24['msg']);else{console[_0x3cda9b(0x16e,'lLZE')](_0x1e10c8[_0x3cda9b(0x1ad,'lBda')]);break;}}}else return _0x35fa13[_0x3cda9b(0x134,'ZFcq')]()[_0x3cda9b(0x1cf,'DpdK')]('(((.+)+)+)+$')[_0x3cda9b(0x148,'RP(p')]()[_0x3cda9b(0x1af,'2E]X')](_0x542b23)['search'](aenAEF[_0x3cda9b(0x1d1,'n1[)')]);}_0x4e21ed['route']=_0x26bb4b[_0x3cda9b(0x1ab,'O!lR')],_0x1e10c8=await _0xf12efb[_0x3cda9b(0x1b5,'4Q5t')](_0x2983cb,{'headers':_0x5ab447,'params':_0x4e21ed})['then'](_0x1d4e0a=>_0x1d4e0a['data']);if(_0x26bb4b[_0x3cda9b(0x15c,'6JF0')](_0x1e10c8[_0x3cda9b(0x139,'eZXZ')],0x1)){if(_0x3cda9b(0x183,'ZMbl')===_0x3cda9b(0x1cc,'RP(p'))_0x2f6ec3[_0x3cda9b(0x18a,'Xxok')](_0x5c20ab[_0x3cda9b(0x13f,'22!R')]+'🎉');else{const _0x3aabbc=_0x26bb4b[_0x3cda9b(0x14a,'jdbu')](parseFloat,_0x1e10c8[_0x3cda9b(0x1e8,'O!lR')][_0x3cda9b(0x167,'GG*4')]);console[_0x3cda9b(0x13a,'iN5i')](_0x3cda9b(0x193,'d$#P')+_0x3aabbc);if(_0x3aabbc>=0x5){if(_0x26bb4b['bgzoR'](_0x26bb4b[_0x3cda9b(0x1a6,'iCAt')],_0x3cda9b(0x1e7,'W74&'))){let _0x4864e4={..._0x4e21ed,'change_value':_0x3aabbc,'withdraw_type':'4'};_0x4864e4['route']=_0x26bb4b[_0x3cda9b(0x1dc,'ZFcq')];const _0x3d56d3=await _0xf12efb[_0x3cda9b(0x182,'22!R')](_0x2983cb,{'headers':_0x5ab447,'params':_0x4864e4})[_0x3cda9b(0x1ce,'O!lR')](_0x70ccf2=>_0x70ccf2[_0x3cda9b(0x185,'n1[)')]);_0x26bb4b[_0x3cda9b(0x1bd,'KInI')](_0x3d56d3['result'],0x1)?console['log'](_0x3cda9b(0x163,'Z3l2')+_0x3d56d3[_0x3cda9b(0x1a1,'lLZE')]):console['log'](_0x3cda9b(0x174,'eZXZ')+_0x3d56d3);}else{const _0x41443c=_0x12f173?function(){const _0x5566d2=_0x3cda9b;if(_0x2f6507){const _0x3cb850=_0x306eec[_0x5566d2(0x145,'&M$K')](_0x2163a6,arguments);return _0x4b08a3=null,_0x3cb850;}}:function(){};return _0xf5485a=![],_0x41443c;}}else console[_0x3cda9b(0x1d6,'Z3l2')](_0x3cda9b(0x140,'O!lR'));}}else console[_0x3cda9b(0x1be,'lBda')]('获取元宝数量失败:'+_0x1e10c8);console[_0x3cda9b(0x14d,'$aMl')](_0x3cda9b(0x172,'n1[)')),_0x4e21ed['route']=_0x26bb4b[_0x3cda9b(0x1a3,'aAic')],_0x4e21ed['mid']=_0x5492a9,_0x1e10c8=await _0xf12efb[_0x3cda9b(0x170,'O!lR')](_0x2983cb,{'headers':_0x5ab447,'params':_0x4e21ed})[_0x3cda9b(0x1a2,'iCAt')](_0x2af93e=>_0x2af93e[_0x3cda9b(0x164,'aAic')]);if(_0x26bb4b['faaee'](_0x1e10c8[_0x3cda9b(0x16b,'n1[)')],0x1)){if(_0x26bb4b[_0x3cda9b(0x1e9,'X&G5')]===_0x26bb4b[_0x3cda9b(0x136,'lLZE')])_0xe34ae9[_0x3cda9b(0x175,'W74&')](_0x3cda9b(0x16f,'n1[)'));else{const _0x579003=_0x26bb4b[_0x3cda9b(0x1b8,'Xxok')](parseFloat,_0x1e10c8['data'][_0x3cda9b(0x168,'X&G5')]);console[_0x3cda9b(0x138,'6sno')]('获取余额数据成功:当前余额为'+_0x579003+'元');if(_0x26bb4b[_0x3cda9b(0x188,'4Q5t')](_0x579003,0x5)){console[_0x3cda9b(0x14d,'$aMl')](_0x26bb4b['zciFD']);let _0x4a2e4f={..._0x4e21ed,'withdraw_type':'1','withdraw_money':_0x579003,'route':'finance.balance-withdraw.withdraw'};const _0x1ae67f=await _0xf12efb[_0x3cda9b(0x1e3,'6sno')](_0x2983cb,{'headers':_0x5ab447,'params':_0x4a2e4f})[_0x3cda9b(0x161,'RP(p')](_0x625cca=>_0x625cca[_0x3cda9b(0x19c,'S16V')]);_0x26bb4b[_0x3cda9b(0x142,'lLZE')](_0x1ae67f[_0x3cda9b(0x1d0,'tbF5')],0x1)?_0x26bb4b[_0x3cda9b(0x15b,'*P$E')](_0x26bb4b['Yefno'],_0x26bb4b['zttxV'])?_0x36f865['log'](_0x3cda9b(0x158,'X&G5')+_0x2d9e77):console[_0x3cda9b(0x1c2,'Mg(9')](_0x3cda9b(0x150,'GG*4')):_0x26bb4b[_0x3cda9b(0x1c8,'6sno')](_0x3cda9b(0x1bb,'nvNd'),_0x3cda9b(0x14f,'RP(p'))?console[_0x3cda9b(0x153,'f8R(')](_0x3cda9b(0x1ac,'W74&')+_0x1ae67f):_0x23c208['log'](_0x26bb4b[_0x3cda9b(0x169,'cOC@')]);}else console[_0x3cda9b(0x19d,'*P$E')]('余额不足,无法提现。');}}else console[_0x3cda9b(0x1be,'lBda')](_0x3cda9b(0x1e0,'WHWP')+_0x1e10c8);}else _0x165688['log'](_0x3cda9b(0x155,'GG*4')+_0x50584d);}catch(_0x198361){if(_0x26bb4b[_0x3cda9b(0x184,'f8R(')](_0x26bb4b[_0x3cda9b(0x162,'Xxok')],_0x26bb4b[_0x3cda9b(0x1de,'BU4%')])){const _0x576323=_0x29656c[_0x3cda9b(0x14c,'iN5i')](_0x524c6c,arguments);return _0x5bd0ae=null,_0x576323;}else{console[_0x3cda9b(0x135,'iN5i')]('请求错误:'+_0x198361);continue;}}}else _0x59c5a7[_0x3cda9b(0x19e,'KInI')](_0x26bb4b['nggbp']);}}_0x13c746();var version_ = 'jsjiami.com.v7'; -------------------------------------------------------------------------------- /xfn.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ========= 青龙 ========= 3 | * 变量格式:export xfn_data='手机号&密码' 多个账号用 换行分割 4 | */ 5 | 6 | const jsname = "先锋鸟"; 7 | const $ = Env(jsname); 8 | const notify = $.isNode() ? require("./sendNotify") : ""; 9 | const Notify = 1; 10 | const debug = 0; 11 | ////////////////////// 12 | let xfn_data = process.env.xfn_data; 13 | let xfn_dataArr = []; 14 | let data = ''; 15 | let msg = ''; 16 | //if (process.env.WP_APP_TOKEN_ONE) { 17 | //WP_APP_TOKEN_ONE = process.env.WP_APP_TOKEN_ONE; 18 | //} 19 | 20 | 21 | !(async () => { 22 | 23 | if (!(await Envs())) 24 | return; 25 | else { 26 | 27 | console.log(`羊毛时间开始 `); 28 | 29 | console.log(`\n\n========================================= \n脚本执行 - 北京时间(UTC+8):${new Date( 30 | new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 31 | 8 * 60 * 60 * 1000).toLocaleString()} \n=========================================\n`); 32 | 33 | //await wyy(); 34 | 35 | console.log(`\n=================== 共找到 ${xfn_dataArr.length} 个账号 ===================`) 36 | msg += `==== 共找到 ${xfn_dataArr.length} 个账号 ====` 37 | if (debug) { 38 | console.log(`【debug】 这是你的全部账号数组:\n ${xfn_dataArr}`); 39 | } 40 | 41 | 42 | for (let index = 0; index < xfn_dataArr.length; index++) { 43 | 44 | 45 | let num = index + 1 46 | console.log(`\n========= 开始【第 ${num} 个账号】=========\n`) 47 | msg += `\n=== 开始【第 ${num} 个账号】===\n\n` 48 | data = xfn_dataArr[index].split('&'); 49 | 50 | if (debug) { 51 | console.log(`\n 【debug】 这是你第 ${num} 账号信息:\n ${data}\n`); 52 | } 53 | 54 | 55 | console.log('开始登录'); 56 | await denglu(); 57 | await $.wait(5 * 1000); 58 | 59 | if(dlzt==0){ 60 | 61 | console.log('开始查询签到状态'); 62 | await chaxunqiandaozhuangtai(); 63 | await $.wait(5 * 1000); 64 | 65 | if(qdzt=="立即签到"){ 66 | console.log(`【签到天数】${tsmessage}\n【签到状态】今日未签到\n`); 67 | msg += `【签到天数】${tsmessage}\n【签到状态】今日未签到\n` 68 | 69 | console.log('开始签到'); 70 | await qiaodao(); 71 | await $.wait(5 * 1000); 72 | 73 | }else{ 74 | 75 | console.log(`【签到状态】今日已签到\n【签到天数】${tsmessage}\n`); 76 | msg += `【签到状态】今日已签到\n【签到天数】${tsmessage}\n` 77 | 78 | } 79 | 80 | console.log('开始查询基本信息'); 81 | await chaxunjibenjinxi(); 82 | await $.wait(5 * 1000); 83 | 84 | 85 | }else{ 86 | 87 | console.log(`【登录状态】失败,${errormsg}\n`); 88 | msg += `【登录状态】失败,${errormsg}\n` 89 | 90 | } 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | } 100 | await SendMsg(msg); 101 | } 102 | 103 | })() 104 | .catch((e) => console.logErr(e)) 105 | .finally(() => $.done()) 106 | 107 | function denglu(timeout = 3 * 1000) { 108 | return new Promise((resolve) => { 109 | 110 | let account = data[0]; 111 | let password = data[1]; 112 | let bodyStr = `{"mobile":"${encodeURIComponent(account)}","password":"${encodeURIComponent(password)}"}`; 113 | let bodyLength = bodyStr.length; 114 | 115 | let url = { 116 | url: `https://api.xianfengniao.com/api/auth/login`, 117 | headers: { 118 | "Host": "api.xianfengniao.com", 119 | "Content-Length": bodyLength, 120 | "Content-Type": "application/json; charset=UTF-8" 121 | }, 122 | body: bodyStr, 123 | 124 | } 125 | 126 | if (debug) { 127 | console.log(`\n【debug】=============== 这是 登录 请求 url ===============`); 128 | console.log(JSON.stringify(url)); 129 | } 130 | 131 | $.post(url, async (error, response, data) => { 132 | try { 133 | if (debug) { 134 | console.log(`\n\n【debug】===============这是 登录 返回data==============`); 135 | console.log(data) 136 | } 137 | 138 | let result = JSON.parse(data); 139 | 140 | dlzt=result.code; 141 | 142 | 143 | if (result.code==0) { 144 | 145 | token=result.data.token; 146 | phone=result.data.mobile; 147 | let maskedPhoneNumber=maskPhoneNumber(phone); 148 | 149 | console.log(`【登录状态】登录成功\n【用户账号】${dmphone}\n`); 150 | msg += `【登录状态】登录成功\n【用户账号】${dmphone}\n` 151 | 152 | }else{ 153 | 154 | errormsg=result.msg; 155 | } 156 | 157 | } catch (e) { 158 | console.log(e) 159 | } finally { 160 | resolve(); 161 | } 162 | }, timeout) 163 | }) 164 | } 165 | 166 | function chaxunqiandaozhuangtai(timeout = 3 * 1000) { 167 | return new Promise((resolve) => { 168 | let url = { 169 | url: `https://api.xianfengniao.com/api/score/sign-task/detail`, 170 | headers: { 171 | "Host": "api.xianfengniao.com", 172 | "Authorization": token 173 | }, 174 | //body: '', 175 | 176 | } 177 | 178 | if (debug) { 179 | console.log(`\n【debug】=============== 这是 查询签到状态 请求 url ===============`); 180 | console.log(JSON.stringify(url)); 181 | } 182 | 183 | $.get(url, async (error, response, data) => { 184 | try { 185 | if (debug) { 186 | console.log(`\n\n【debug】===============这是 查询签到状态 返回data==============`); 187 | console.log(data) 188 | } 189 | 190 | let result = JSON.parse(data); 191 | 192 | qdzt=result.data.entry_summary; 193 | tsmessage=result.data.message; 194 | 195 | } catch (e) { 196 | console.log(e) 197 | } finally { 198 | resolve(); 199 | } 200 | }, timeout) 201 | }) 202 | } 203 | 204 | function qiaodao(timeout = 3 * 1000) { 205 | return new Promise((resolve) => { 206 | let url = { 207 | url: `https://api.xianfengniao.com/api/score/daily/sign`, 208 | headers: { 209 | "Host": "api.xianfengniao.com", 210 | "Authorization": token 211 | }, 212 | body: '', 213 | 214 | } 215 | 216 | if (debug) { 217 | console.log(`\n【debug】=============== 这是 签到 请求 url ===============`); 218 | console.log(JSON.stringify(url)); 219 | } 220 | 221 | $.post(url, async (error, response, data) => { 222 | try { 223 | if (debug) { 224 | console.log(`\n\n【debug】===============这是 签到 返回data==============`); 225 | console.log(data) 226 | } 227 | 228 | let result = JSON.parse(data); 229 | 230 | console.log(`【签到任务】成功,获得金币数:${result.data.score}\n`) 231 | msg += `【签到任务】成功,获得金币数:${result.data.score}\n` 232 | 233 | } catch (e) { 234 | console.log(e) 235 | } finally { 236 | resolve(); 237 | } 238 | }, timeout) 239 | }) 240 | } 241 | 242 | 243 | function chaxunjibenjinxi(timeout = 3 * 1000) { 244 | return new Promise((resolve) => { 245 | let url = { 246 | url: `https://api.xianfengniao.com/api/user/account/info/detail`, 247 | headers: { 248 | "Host": "api.xianfengniao.com", 249 | "Authorization": token 250 | }, 251 | //body: '', 252 | 253 | } 254 | 255 | if (debug) { 256 | console.log(`\n【debug】=============== 这是 查询基本信息 请求 url ===============`); 257 | console.log(JSON.stringify(url)); 258 | } 259 | 260 | $.get(url, async (error, response, data) => { 261 | try { 262 | if (debug) { 263 | console.log(`\n\n【debug】===============这是 查询基本信息 返回data==============`); 264 | console.log(data) 265 | } 266 | 267 | let result = JSON.parse(data); 268 | 269 | console.log(`【金币余额】${result.data.score}\n`) 270 | msg += `【金币余额】${result.data.score}\n` 271 | 272 | 273 | } catch (e) { 274 | console.log(e) 275 | } finally { 276 | resolve(); 277 | } 278 | }, timeout) 279 | }) 280 | } 281 | 282 | //#region 固定代码 可以不管他 283 | // ============================================变量检查============================================ \\ 284 | async function Envs() { 285 | if (xfn_data) { 286 | if (xfn_data.indexOf("\n") != -1) { 287 | xfn_data.split("\n").forEach((item) => { 288 | xfn_dataArr.push(item); 289 | }); 290 | } else { 291 | xfn_dataArr.push(xfn_data); 292 | } 293 | } else { 294 | console.log(`\n 【${$.name}】:未填写变量 xfn_data`) 295 | return; 296 | } 297 | 298 | return true; 299 | } 300 | 301 | // ============================================发送消息============================================ \\ 302 | async function SendMsg(message) { 303 | if (!message) 304 | return; 305 | 306 | if (Notify > 0) { 307 | if ($.isNode()) { 308 | var strTitle=jsname; 309 | var notify = require('./sendNotify'); 310 | await notify.sendNotify($.name,message); 311 | //await notify.sendNotifybyWxPucher(strTitle, `${msg}`); 312 | } else { 313 | $.msg(message); 314 | } 315 | } else { 316 | console.log(message); 317 | } 318 | } 319 | 320 | /** 321 | * 时间戳转换成日期 322 | */ 323 | function getTime(timestamp) { 324 | var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 325 | let Y = date.getFullYear(), 326 | M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1), 327 | D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()), 328 | h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()), 329 | m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()), 330 | s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); 331 | return Y + '-' + M + '-' + D + ' ' + h + ':' + m + ':' + s 332 | } 333 | 334 | /** 335 | * 打码手机号 336 | */ 337 | function maskPhoneNumber(phoneNumber) { 338 | // 判断参数是否为字符串类型 339 | if (typeof phoneNumber !== 'string') { 340 | throw new Error('Invalid phone number'); 341 | } 342 | 343 | // 判断手机号是否合法 344 | if (!/^1\d{10}$/.test(phoneNumber)) { 345 | throw new Error('Invalid phone number'); 346 | } 347 | 348 | dmphone=phoneNumber.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2'); 349 | return dmphone; 350 | } 351 | 352 | /** 353 | * 时间戳提取星期 354 | */ 355 | function getWeekdayFromTimestampBEijing(timestamp) { 356 | const date = new Date(timestamp * 1000); // 将时间戳转换为毫秒级 357 | const hours = date.getHours(); // 获取当前小时数 358 | //const offset = hours >= 8 && hours < 16 ? 8 : -16; // 计算时区偏移量(北京时间偏移8小时) 359 | const adjustedDate = new Date(date.getTime()); // 调整日期时间 360 | const days = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; // 星期数组 361 | return days[adjustedDate.getDay()]; // 返回对应的星期字符串 362 | } 363 | 364 | /** 365 | * 判断字符串是否为html格式数据 366 | */ 367 | function isHTML(str) { 368 | const htmlTagRegex = /<[^>]+>/g; 369 | if (htmlTagRegex.test(str)) { 370 | dlzt = "yes"; 371 | return "yes"; 372 | } else { 373 | dlzt = "no"; 374 | return "no"; 375 | } 376 | } 377 | 378 | /** 379 | * 随机数生成 380 | */ 381 | function randomString(e) { 382 | e = e || 32; 383 | var t = "QWERTYUIOPASDFGHJKLZXCVBNM1234567890", 384 | a = t.length, 385 | n = ""; 386 | for (i = 0; i < e; i++) 387 | n += t.charAt(Math.floor(Math.random() * a)); 388 | return n 389 | } 390 | 391 | /** 392 | * 随机整数生成 393 | */ 394 | function randomInt(min, max) { 395 | return Math.round(Math.random() * (max - min) + min) 396 | } 397 | 398 | //每日网抑云 399 | function wyy(timeout = 3 * 1000) { 400 | return new Promise((resolve) => { 401 | let url = { 402 | url: `https://keai.icu/apiwyy/api` 403 | } 404 | $.get(url, async (err, resp, data) => { 405 | try { 406 | data = JSON.parse(data) 407 | console.log(`\n 【网抑云时间】: ${data.content} by--${data.music}`); 408 | 409 | } catch (e) { 410 | console.logErr(e, resp); 411 | } finally { 412 | resolve() 413 | } 414 | }, timeout) 415 | }) 416 | } 417 | 418 | //#endregion 419 | 420 | 421 | // prettier-ignore 固定代码 不用管他 422 | function Env(t, e) { "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0); 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, i) => { s.call(this, t, (t, s, r) => { t ? i(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.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.startTime = (new Date).getTime(), Object.assign(this, e), this.log("", `🔔${this.name}, 开始!`) } isNode() { return "undefined" != typeof module && !!module.exports } isQuanX() { return "undefined" != typeof $task } isSurge() { return "undefined" != typeof $httpClient && "undefined" == typeof $loon } isLoon() { return "undefined" != typeof $loon } 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 i = this.getdata(t); if (i) 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, i) => e(i)) }) } runScript(t, e) { return new Promise(s => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let r = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); r = r ? 1 * r : 20, r = e && e.timeout ? e.timeout : r; const [o, h] = i.split("@"), n = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(n, (t, e, i) => s(i)) }).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), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)) } 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), i = !s && this.fs.existsSync(e), r = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, r) : i ? this.fs.writeFileSync(e, r) : this.fs.writeFileSync(t, r) } } lodash_get(t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let r = t; for (const t of i) 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, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}, t)[e[e.length - 1]] = s, t) } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), r = s ? this.getval(s) : ""; if (r) try { const t = JSON.parse(r); e = t ? this.lodash_get(t, i, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, i, r] = /^@(.*?)\.(.*?)$/.exec(e), o = this.getval(i), h = i ? "null" === o ? null : o || "{}" : "{}"; try { const e = JSON.parse(h); this.lodash_set(e, r, t), s = this.setval(JSON.stringify(e), i) } catch (e) { const o = {}; this.lodash_set(o, r, t), s = this.setval(JSON.stringify(o), i) } } else s = this.setval(t, e); return s } getval(t) { return this.isSurge() || this.isLoon() ? $persistentStore.read(t) : this.isQuanX() ? $prefs.valueForKey(t) : this.isNode() ? (this.data = this.loaddata(), this.data[t]) : this.data && this.data[t] || null } setval(t, e) { return this.isSurge() || this.isLoon() ? $persistentStore.write(t, e) : this.isQuanX() ? $prefs.setValueForKey(t, e) : this.isNode() ? (this.data = this.loaddata(), this.data[e] = t, this.writedata(), !0) : 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 = (() => { })) { t.headers && (delete t.headers["Content-Type"], delete t.headers["Content-Length"]), this.isSurge() || this.isLoon() ? (this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.get(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) })) : this.isQuanX() ? (this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t))) : this.isNode() && (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: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) })) } post(t, e = (() => { })) { if (t.body && t.headers && !t.headers["Content-Type"] && (t.headers["Content-Type"] = "application/x-www-form-urlencoded"), t.headers && delete t.headers["Content-Length"], this.isSurge() || this.isLoon()) this.isSurge() && this.isNeedRewrite && (t.headers = t.headers || {}, Object.assign(t.headers, { "X-Surge-Skip-Scripting": !1 })), $httpClient.post(t, (t, s, i) => { !t && s && (s.body = i, s.statusCode = s.status), e(t, s, i) }); else if (this.isQuanX()) t.method = "POST", this.isNeedRewrite && (t.opts = t.opts || {}, Object.assign(t.opts, { hints: !1 })), $task.fetch(t).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => e(t)); else if (this.isNode()) { this.initGotEnv(t); const { url: s, ...i } = t; this.got.post(s, i).then(t => { const { statusCode: s, statusCode: i, headers: r, body: o } = t; e(null, { status: s, statusCode: i, headers: r, body: o }, o) }, t => { const { message: s, response: i } = t; e(s, i, i && i.body) }) } } time(t, e = null) { const s = e ? new Date(e) : new Date; let i = { "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 i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); return t } msg(e = t, s = "", i = "", r) { const o = t => { if (!t) return t; if ("string" == typeof t) return this.isLoon() ? t : this.isQuanX() ? { "open-url": t } : this.isSurge() ? { url: t } : void 0; if ("object" == typeof t) { if (this.isLoon()) { let e = t.openUrl || t.url || t["open-url"], s = t.mediaUrl || t["media-url"]; return { openUrl: e, mediaUrl: s } } if (this.isQuanX()) { let e = t["open-url"] || t.url || t.openUrl, s = t["media-url"] || t.mediaUrl; return { "open-url": e, "media-url": s } } if (this.isSurge()) { let e = t.url || t.openUrl || t["open-url"]; return { url: e } } } }; if (this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))), !this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), 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) { const s = !this.isSurge() && !this.isQuanX() && !this.isLoon(); s ? this.log("", `❗️${this.name}, 错误!`, t.stack) : this.log("", `❗️${this.name}, 错误!`, t) } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `🔔${this.name}, 结束! 🕛 ${s} 秒`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) } -------------------------------------------------------------------------------- /ljnkj.js: -------------------------------------------------------------------------------- 1 | /************************************** 2 | 3 | @Name:绿巨能科技小程序 签到 4 | @Author:原模板作者LangKe 5 | @Date:2024年4月1日 6 | 7 | ************************* 8 | 【 签到脚本使用教程 】: 9 | ************************* 10 | 11 | 青龙: 12 | 1.抓包 https://h5.youzan.com , 找到 请求头中的extra-data,填写到jlb,多账号用 换行符 分割 13 | 14 | ************************* 15 | 【 青龙--配置文件 】: 16 | ************************* 17 | 18 | const $ =new Env("绿巨能科技") 19 | cron 15 9 * * * 20 | 21 | export ljnkj='{"is_weapp":1,"sid":"****************","version":"****************","client":"****************","bizEnv":"****************","uuid":"****************","ftime":****************}' 22 | 23 | ⚠️【免责声明】 24 | ------------------------------------------ 25 | 1、此脚本仅用于学习研究,不保证其合法性、准确性、有效性,请根据情况自行判断,本人对此不承担任何保证责任。 26 | 2、由于此脚本仅用于学习研究,您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除,若违反规定引起任何事件本人对此均不负责。 27 | 3、请勿将此脚本用于任何商业或非法目的,若违反规定请自行对此负责。 28 | 4、此脚本涉及应用与本人无关,本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。 29 | 5、本人对任何脚本引发的问题概不负责,包括但不限于由脚本错误引起的任何损失和损害。 30 | 6、如果任何单位或个人认为此脚本可能涉嫌侵犯其权利,应及时通知并提供身份证明,所有权证明,我们将在收到认证文件确认后删除此脚本。 31 | 7、所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本,即视为您已接受此免责声明。 32 | 33 | ******************************************/ 34 | 35 | 36 | // env.js 全局 37 | const $ = new Env("绿巨能科技"); 38 | const ckName = "ljnkj"; 39 | //-------------------- 一般不动变量区域 ------------------------------------- 40 | var Notify = 0;//0为关闭通知,1为打开通知,默认为0 //默认出签到失败提示 41 | const notify = $.isNode() ? require('./sendNotify') : ''; 42 | let envSplitor = ["\n"]; //多账号分隔符 43 | let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ''; 44 | let userList = []; 45 | let userIdx = 0; 46 | let userCount = 0; 47 | // 为通知准备的空数组 48 | $.notifyMsg = []; 49 | //bark推送 50 | $.barkKey = ($.isNode() ? process.env["bark_key"] : $.getdata("bark_key")) || ''; 51 | //---------------------- 自定义变量区域 ----------------------------------- 52 | 53 | //脚本入口函数main() 54 | async function main() { 55 | console.log('\n============= 签到 =============\n'); 56 | let taskall = []; 57 | for (let user of userList) { 58 | DoubleLog(`🔷账号${user.index} >> 开始签到`) 59 | console.log(`随机延迟${user.getRandomTime()}ms`); 60 | taskall.push(await user.signin()); 61 | await $.wait(user.getRandomTime()); 62 | taskall.push(await user.points()); 63 | await $.wait(user.getRandomTime()); 64 | } 65 | await Promise.all(taskall); 66 | } 67 | 68 | class UserInfo { 69 | constructor(str) { 70 | this.index = ++userIdx; 71 | this.token = str; 72 | this.body ="" 73 | this.headers = { 74 | 'Host': 'h5.youzan.com', 75 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 13; 22021211RC Build/TKQ1.220807.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/122.0.6261.120 Mobile Safari/537.36 XWEB/1220033 MMWEBSDK/20230504 MMWEBID/3007 MicroMessenger/8.0.37.2380(0x28002537) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android', 76 | 'content-type': 'application/json', 77 | 'extra-data': str 78 | } 79 | } 80 | getRandomTime() { 81 | return randomInt(5000, 9000) 82 | } 83 | //签到函数 84 | async signin() { 85 | try { 86 | const options = { 87 | //签到任务调用签到接口 88 | url: `https://h5.youzan.com/wscump/checkin/checkinV2.json?checkinId=4534808`, 89 | //请求头, 所有接口通用 90 | headers: this.headers, 91 | }; 92 | let result = await httpRequest(options,'get'); 93 | if (result?.code == 0) { 94 | //obj.error是0代表完成 95 | DoubleLog(`✅签到成功!`); 96 | } else { 97 | Notify = 1 98 | DoubleLog(`🔶${result?.msg}`) 99 | console.log(result); 100 | } 101 | } catch (e) { 102 | console.log(e); 103 | } 104 | } 105 | 106 | //查询积分函数 107 | async points() { 108 | try { 109 | const options = { 110 | //查询积分任务调用签到接口 111 | url: `https://h5.youzan.com/wscuser/membercenter/stats.json`, 112 | //请求头, 所有接口通用 113 | headers: this.headers, 114 | }; 115 | let result = await httpRequest(options,'get'); 116 | if (result?.code == 0) { 117 | //obj.error是0代表查询成功 118 | DoubleLog(`🔷积分余额:${result?.data.stats.points}\n`); 119 | } else { 120 | Notify = 1 121 | DoubleLog(`🔶${result?.msg}`) 122 | console.log(result); 123 | } 124 | } catch (e) { 125 | console.log(e); 126 | } 127 | } 128 | 129 | } 130 | 131 | 132 | //获取Cookie 133 | async function getCookie() { 134 | if ($request && $request.method != 'OPTIONS') { 135 | const bodyValue = $request.body; 136 | const tokenValue = $request.headers['Qm-User-Token'] || $.request.headers['qm-user-token'] || $.request.headers['QM-USER-TOKEN']; 137 | if (bodyValue && tokenValue) { 138 | $.setdata(tokenValue, env_token); 139 | $.setjson(bodyValue, env_body) 140 | $.msg($.name, "", "获取签到Cookie成功🎉"); 141 | } else { 142 | $.msg($.name, "", "错误获取签到Cookie失败"); 143 | } 144 | } 145 | } 146 | 147 | //主程序执行入口 148 | !(async () => { 149 | //没有设置变量,执行Cookie获取 150 | if (typeof $request != "undefined") { 151 | await getCookie(); 152 | return; 153 | } 154 | //未检测到ck,退出 155 | if (!(await checkEnv())) {throw new Error(`❌未检测到ck,请添加环境变量`)}; 156 | if (userList.length > 0) { 157 | await main(); 158 | } 159 | })() 160 | .catch((e) => $.notifyMsg.push(e.message || e))//捕获登录函数等抛出的异常, 并把原因添加到全局变量(通知) 161 | .finally(async () => { 162 | if ($.barkKey) { //如果已填写Bark Key 163 | await BarkNotify($, $.barkKey, $.name, $.notifyMsg.join('\n')); //推送Bark通知 164 | }; 165 | await SendMsg($.notifyMsg.join('\n'))//带上总结推送通知 166 | $.done(); //调用Surge、QX内部特有的函数, 用于退出脚本执行 167 | }); 168 | 169 | /** --------------------------------辅助函数区域------------------------------------------- */ 170 | 171 | // 双平台log输出 172 | function DoubleLog(data) { 173 | if ($.isNode()) { 174 | if (data) { 175 | console.log(`${data}`); 176 | $.notifyMsg.push(`${data}`); 177 | } 178 | } else { 179 | console.log(`${data}`); 180 | $.notifyMsg.push(`${data}`); 181 | } 182 | } 183 | 184 | //把json 转为以 ‘&’ 连接的字符串 185 | function toParams(body) { 186 | var params = Object.keys(body).map(function (key) { 187 | return encodeURIComponent(key) + "=" + encodeURIComponent(body[key]); 188 | }).join("&"); 189 | return params; 190 | } 191 | 192 | //检查变量 193 | async function checkEnv() { 194 | if (userCookie) { 195 | // console.log(userCookie); 196 | let e = envSplitor[0]; 197 | for (let o of envSplitor) 198 | if (userCookie.indexOf(o) > -1) { 199 | e = o; 200 | break; 201 | } 202 | for (let n of userCookie.split(e)) n && userList.push(new UserInfo(n)); 203 | userCount = userList.length; 204 | } else { 205 | console.log("未找到CK"); 206 | return; 207 | } 208 | return console.log(`共找到${userCount}个账号`), true;//true == !0 209 | } 210 | 211 | /** 212 | * 随机整数生成 213 | */ 214 | function randomInt(min, max) { 215 | return Math.round(Math.random() * (max - min) + min); 216 | } 217 | // 发送消息 218 | async function SendMsg(message) { 219 | if (!message) return; 220 | if (Notify > 0) { 221 | if ($.isNode()) { 222 | await notify.sendNotify($.name, message) 223 | } else { 224 | $.msg($.name, '', message) 225 | } 226 | } else { 227 | console.log(message) 228 | } 229 | } 230 | 231 | /** ---------------------------------固定不动区域----------------------------------------- */ 232 | // prettier-ignore 233 | 234 | //请求函数函数二次封装 235 | function httpRequest(options, method) { typeof (method) === 'undefined' ? ('body' in options ? method = 'post' : method = 'get') : method = method; return new Promise((resolve) => { $[method](options, (err, resp, data) => { try { if (err) { console.log(`${method}请求失败`); $.logErr(err) } else { if (data) { typeof JSON.parse(data) == 'object' ? data = JSON.parse(data) : data = data; resolve(data) } else { console.log(`请求api返回数据为空,请检查自身原因`) } } } catch (e) { $.logErr(e, resp) } finally { resolve() } }) }) } 236 | //From chavyleung's Env.js 237 | 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, i) => { s.call(this, t, ((t, s, o) => { t ? i(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.logLevels = { debug: 0, info: 1, warn: 2, error: 3 }, this.logLevelPrefixs = { debug: "[DEBUG] ", info: "[INFO] ", warn: "[WARN] ", error: "[ERROR] " }, this.logLevel = "info", 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, ...s) { try { return JSON.stringify(t, ...s) } catch { return e } } getjson(t, e) { let s = e; if (this.getdata(t)) 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, i) => e(i))) })) } runScript(t, e) { return new Promise((s => { let i = this.getdata("@chavy_boxjs_userCfgs.httpapi"); i = i ? i.replace(/\n/g, "").trim() : i; let o = this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout"); o = o ? 1 * o : 20, o = e && e.timeout ? e.timeout : o; const [r, a] = i.split("@"), n = { url: `http://${a}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: o }, headers: { "X-Key": r, Accept: "*/*" }, timeout: o }; this.post(n, ((t, e, i) => s(i))) })).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), i = !s && this.fs.existsSync(e); if (!s && !i) return {}; { const i = s ? t : e; try { return JSON.parse(this.fs.readFileSync(i)) } 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), i = !s && this.fs.existsSync(e), o = JSON.stringify(this.data); s ? this.fs.writeFileSync(t, o) : i ? this.fs.writeFileSync(e, o) : this.fs.writeFileSync(t, o) } } lodash_get(t, e, s) { const i = e.replace(/\[(\d+)\]/g, ".$1").split("."); let o = t; for (const t of i) if (o = Object(o)[t], void 0 === o) return s; return o } lodash_set(t, e, s) { return Object(t) !== t || (Array.isArray(e) || (e = e.toString().match(/[^.[\]]+/g) || []), e.slice(0, -1).reduce(((t, s, i) => Object(t[s]) === t[s] ? t[s] : t[s] = Math.abs(e[i + 1]) >> 0 == +e[i + 1] ? [] : {}), t)[e[e.length - 1]] = s), t } getdata(t) { let e = this.getval(t); if (/^@/.test(t)) { const [, s, i] = /^@(.*?)\.(.*?)$/.exec(t), o = s ? this.getval(s) : ""; if (o) try { const t = JSON.parse(o); e = t ? this.lodash_get(t, i, "") : e } catch (t) { e = "" } } return e } setdata(t, e) { let s = !1; if (/^@/.test(e)) { const [, i, o] = /^@(.*?)\.(.*?)$/.exec(e), r = this.getval(i), a = i ? "null" === r ? null : r || "{}" : "{}"; try { const e = JSON.parse(a); this.lodash_set(e, o, t), s = this.setval(JSON.stringify(e), i) } catch (e) { const r = {}; this.lodash_set(r, o, t), s = this.setval(JSON.stringify(r), i) } } 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 : {}, t && (t.headers = t.headers ? t.headers : {}, void 0 === t.headers.cookie && 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"]), t.params && (t.url += "?" + this.queryStr(t.params)), void 0 === t.followRedirect || t.followRedirect || ((this.isSurge() || this.isLoon()) && (t["auto-redirect"] = !1), this.isQuanX() && (t.opts ? t.opts.redirection = !1 : t.opts = { redirection: !1 })), 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, i) => { !t && s && (s.body = i, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, i) })); 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: i, headers: o, body: r, bodyBytes: a } = t; e(null, { status: s, statusCode: i, headers: o, body: r, bodyBytes: a }, r, a) }), (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: i, statusCode: o, headers: r, rawBody: a } = t, n = s.decode(a, this.encoding); e(null, { status: i, statusCode: o, headers: r, rawBody: a, body: n }, n) }), (t => { const { message: i, response: o } = t; e(i, o, o && s.decode(o.rawBody, this.encoding)) })); break } } 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"]), void 0 === t.followRedirect || t.followRedirect || ((this.isSurge() || this.isLoon()) && (t["auto-redirect"] = !1), this.isQuanX() && (t.opts ? t.opts.redirection = !1 : t.opts = { redirection: !1 })), 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, i) => { !t && s && (s.body = i, s.statusCode = s.status ? s.status : s.statusCode, s.status = s.statusCode), e(t, s, i) })); 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: i, headers: o, body: r, bodyBytes: a } = t; e(null, { status: s, statusCode: i, headers: o, body: r, bodyBytes: a }, r, a) }), (t => e(t && t.error || "UndefinedError"))); break; case "Node.js": let i = require("iconv-lite"); this.initGotEnv(t); const { url: o, ...r } = t; this.got[s](o, r).then((t => { const { statusCode: s, statusCode: o, headers: r, rawBody: a } = t, n = i.decode(a, this.encoding); e(null, { status: s, statusCode: o, headers: r, rawBody: a, body: n }, n) }), (t => { const { message: s, response: o } = t; e(s, o, o && i.decode(o.rawBody, this.encoding)) })); break } } time(t, e = null) { const s = e ? new Date(e) : new Date; let i = { "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 i) new RegExp("(" + e + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? i[e] : ("00" + i[e]).substr(("" + i[e]).length))); return t } queryStr(t) { let e = ""; for (const s in t) { let i = t[s]; null != i && "" !== i && ("object" == typeof i && (i = JSON.stringify(i)), e += `${s}=${i}&`) } return e = e.substring(0, e.length - 1), e } msg(e = t, s = "", i = "", o = {}) { const r = t => { const { $open: e, $copy: s, $media: i, $mediaMime: o } = 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: { const r = {}; let a = t.openUrl || t.url || t["open-url"] || e; a && Object.assign(r, { action: "open-url", url: a }); let n = t["update-pasteboard"] || t.updatePasteboard || s; if (n && Object.assign(r, { action: "clipboard", text: n }), i) { let t, e, s; if (i.startsWith("http")) t = i; else if (i.startsWith("data:")) { const [t] = i.split(";"), [, o] = i.split(","); e = o, s = t.replace("data:", "") } else { e = i, s = (t => { const e = { JVBERi0: "application/pdf", R0lGODdh: "image/gif", R0lGODlh: "image/gif", iVBORw0KGgo: "image/png", "/9j/": "image/jpg" }; for (var s in e) if (0 === t.indexOf(s)) return e[s]; return null })(i) } Object.assign(r, { "media-url": t, "media-base64": e, "media-base64-mime": o ?? s }) } return Object.assign(r, { "auto-dismiss": t["auto-dismiss"], sound: t.sound }), r } case "Loon": { const s = {}; let o = t.openUrl || t.url || t["open-url"] || e; o && Object.assign(s, { openUrl: o }); let r = t.mediaUrl || t["media-url"]; return i?.startsWith("http") && (r = i), r && Object.assign(s, { mediaUrl: r }), console.log(JSON.stringify(s)), s } case "Quantumult X": { const o = {}; let r = t["open-url"] || t.url || t.openUrl || e; r && Object.assign(o, { "open-url": r }); let a = t["media-url"] || t.mediaUrl; i?.startsWith("http") && (a = i), a && Object.assign(o, { "media-url": a }); let n = t["update-pasteboard"] || t.updatePasteboard || s; return n && Object.assign(o, { "update-pasteboard": n }), console.log(JSON.stringify(o)), o } 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, i, r(o)); break; case "Quantumult X": $notify(e, s, i, r(o)); break; case "Node.js": break }if (!this.isMuteLog) { let t = ["", "==============📣系统通知📣=============="]; t.push(e), s && t.push(s), i && t.push(i), console.log(t.join("\n")), this.logs = this.logs.concat(t) } } debug(...t) { this.logLevels[this.logLevel] <= this.logLevels.debug && (t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(`${this.logLevelPrefixs.debug}${t.map((t => t ?? String(t))).join(this.logSeparator)}`)) } info(...t) { this.logLevels[this.logLevel] <= this.logLevels.info && (t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(`${this.logLevelPrefixs.info}${t.map((t => t ?? String(t))).join(this.logSeparator)}`)) } warn(...t) { this.logLevels[this.logLevel] <= this.logLevels.warn && (t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(`${this.logLevelPrefixs.warn}${t.map((t => t ?? String(t))).join(this.logSeparator)}`)) } error(...t) { this.logLevels[this.logLevel] <= this.logLevels.error && (t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(`${this.logLevelPrefixs.error}${t.map((t => t ?? String(t))).join(this.logSeparator)}`)) } log(...t) { t.length > 0 && (this.logs = [...this.logs, ...t]), console.log(t.map((t => t ?? String(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}, 错误!`, e, t); break; case "Node.js": this.log("", `❗️${this.name}, 错误!`, e, void 0 !== t.message ? t.message : t, t.stack); break } } wait(t) { return new Promise((e => setTimeout(e, t))) } done(t = {}) { const e = ((new Date).getTime() - this.startTime) / 1e3; switch (this.log("", `🔔${this.name}, 结束! 🕛 ${e} 秒`), 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) } -------------------------------------------------------------------------------- /东风日产.js: -------------------------------------------------------------------------------- 1 | /* 2 | 东风日产签到,获得成长值 3 | 测试Quantumult-X,nodejs,其他自测 4 | 2024-06-22 QX自动关注第三方API提交,解决QX提交问题(此方法纯属无奈,会泄露Token) 5 | 获取Cookie方法 ,QX开重写,进入【东风日产】 6 | 7 | ======调试区|忽略====== 8 | # ^https?:\/\/oneapph5\.dongfeng-nissan\.com\.cn\/mb-gw\/dndc-gateway\/community\/api\/v2\/user$ url script-response-body http://192.168.2.170:8080/nissan.js 9 | ======调试区|忽略====== 10 | 11 | ==================================== 12 | [rewrite_local] 13 | ^https?:\/\/oneapph5\.dongfeng-nissan\.com\.cn\/mb-gw\/dndc-gateway\/community\/api\/v2\/user$ url script-response-body https://raw.githubusercontent.com/wf021325/qx/master/task/nissan.js 14 | 15 | [task_local] 16 | 1 0 * * * https://raw.githubusercontent.com/wf021325/qx/master/task/nissan.js, tag= 东风日产签到, enabled=true 17 | 18 | [mitm] 19 | hostname = oneapph5.dongfeng-nissan.com.cn 20 | ==================================== 21 | 22 | # 青龙环境变量 nissan_val = {"token":"xxxxxxxxxxxxx","uuid":"xxxxxxxx"} 23 | # 手动拼接 nissan_val 24 | 在https://oneapph5.dongfeng-nissan.com.cn/mb-gw/dndc-gateway/community/api/v2/user 找到以下参数 25 | # token = $request.headers['token'] 26 | # uuid = $response.body.rows['one_id'] 27 | */ 28 | 29 | const $ = new Env("东风日产签到"); 30 | const _key = 'nissan_val'; 31 | const CK_Val = $.toObj(getEnv(_key)); 32 | $.is_debug ='true-'; 33 | $.messages = []; 34 | 35 | async function getCk() { 36 | if ($request && $request.method != 'OPTIONS') { 37 | const head = ObjectKeys2LowerCase($request.headers); 38 | const token = head['token']; 39 | const uuid = $.toObj($response.body).rows['one_id']; 40 | if (token) { 41 | const ckVal = $.toStr({token, uuid}); 42 | $.setdata(ckVal, _key); 43 | $.msg($.name, '获取ck成功🎉', ckVal); 44 | } else { 45 | $.msg($.name, '', '❌获取ck失败'); 46 | } 47 | } 48 | } 49 | 50 | async function main() { 51 | if (CK_Val) { 52 | const {token, uuid} = CK_Val; 53 | $.token = token; 54 | $.uuid = uuid; 55 | } else { 56 | $.msg($.name, '', '❌请先获取ck🎉'); 57 | return; 58 | } 59 | //intSha(); 60 | $.appversion = $.toObj((await $.http.get(`https://itunes.apple.com/cn/lookup?id=1341994593`)).body).results[0].version; 61 | $.log(`最新版本号:${$.appversion}`); 62 | 63 | var result = await signIn();//签到 64 | if (result !== '0' && result !== '1') {return;}// 签到错误停止运行 65 | 66 | await new_list();//【此刻-最新】帖子 获取 $.push_id, $.tittle, $.user_id 67 | if (!$.push_id) {return pushMsg('没有找到帖子id')}//找不到帖子ID就停止 68 | await sort_view();//浏览帖子 69 | await sort_like();//点赞 70 | await sort_unlike();// 取消点赞 71 | 72 | var result = await comments();//评论帖子 73 | if (result == '1') {await comments_del();}//删除评论 74 | 75 | let _msg; 76 | if ($.isQuanX()) { 77 | await post_test('PUT'); 78 | await post_test('DELETE'); 79 | } else { 80 | // put/delete DELETE 81 | await follow('put');//关注 82 | await follow('delete');//取消关注 83 | } 84 | await growthScore();//查询成长值 85 | } 86 | 87 | // 签到 88 | async function signIn() { 89 | let _msg = ''; 90 | url = `/mb-gw/vmsp-me/ly/busicen/member/reward/pointsreturn/memberPointsRechargetRequestSign`; 91 | body = `{"requestId":"$$timestamp$$","version":"202304","channel":"1","wechat_trade_type":"APP","token":"${$.token}","uuid":"${$.uuid}"}`; 92 | let {result, msg} = await httpPost(url, body); 93 | _msg += `签到:${msg}`; 94 | pushMsg(_msg); 95 | return result 96 | } 97 | 98 | // 查成长值 99 | async function growthScore() { 100 | url = `/mb-gw/dfn-growth/rest/ly-mp-growth-service/ly/mgs/growth/growthvalue/medal`; 101 | body = '{}' 102 | let {result, msg, data} = await httpPost(url, body); 103 | let _msg; 104 | _msg = (result == '1') ? `成长值:${data?.growthScore}` : ''; 105 | pushMsg(_msg); 106 | } 107 | 108 | //最新帖子 109 | async function new_list() { 110 | let _msg; 111 | url = `/mb-gw/dndc-gateway/community/api/v2/feeds/new_list`; 112 | let {result, msg, rows} = await httpPost(url); 113 | let find_id = rows?.rows?.find(item => item.style_type === 'Postings_style'); 114 | $.push_id = find_id ? find_id?.id : null;//帖子id 115 | $.tittle = find_id?.feed_title;//帖子标题 116 | $.user_id = find_id?.user_id//楼主user_id 117 | 118 | _msg = $.push_id ? `帖子:${$.tittle}` : `帖子:${msg}` 119 | pushMsg(_msg); 120 | } 121 | 122 | // 浏览帖子 123 | async function sort_view() { 124 | url = `/mb-gw/dndc-gateway/community/api/v2/feeds/${$.push_id}?use_volc=0`;//【此刻-最新】帖子 125 | let {result, msg} = await httpPost(url); 126 | let _msg; 127 | _msg = `浏览帖子:${msg}`; 128 | pushMsg(_msg); 129 | } 130 | 131 | // 点赞 132 | async function sort_like() { 133 | url = `/mb-gw/dndc-gateway/community/api/v2/feeds/${$.push_id}/like`; 134 | body = `{"use_volc":false}`; 135 | let {result, msg} = await httpPost(url, body); 136 | let _msg; 137 | _msg = `点赞帖子:${msg}`; 138 | pushMsg(_msg); 139 | } 140 | 141 | // 取消点赞 142 | async function sort_unlike() { 143 | url = `/mb-gw/dndc-gateway/community/api/v2/feeds/${$.push_id}/unlike?use_volc=0`; 144 | let {result, msg} = await httpPost(url, '', method = 'delete') 145 | let _msg; 146 | _msg = (result == '1') ? '取消点赞:成功' : `取消点赞:${msg}`; 147 | pushMsg(_msg); 148 | } 149 | 150 | //评论 151 | async function comments() { 152 | const text = ['我非常赞同您的观点', '您的帖子让我看到了全新的角度', '谢谢您的分享,感谢', '您的帖子让我受益匪浅', '再次感谢您的分享!', '非常赞同您的观点', '感谢您为我打开了一扇新门', '你的帖子给我带来了很大的启发', '谢谢您的分享和付出!', '这帖子很有帮助' 153 | ]; 154 | const 评论 = text[Math.floor(Math.random() * text.length)] 155 | url = `/mb-gw/dndc-gateway/community/api/v2/comments`; 156 | body = `{"body":"${评论}","commentable_id":${$.push_id},"commentable_type":"feeds","use_volc":false}`; 157 | let {result, msg, rows} = await httpPost(url, body); 158 | $.comment_id = rows?.comment?.id; 159 | let _msg; 160 | _msg = `评论帖子:${msg}`; 161 | pushMsg(_msg); 162 | return result 163 | } 164 | 165 | //删除评论 166 | async function comments_del() { 167 | url = `/mb-gw/dndc-gateway/community/api/v2/comments/${$.comment_id}?use_volc=0`; 168 | let {result, msg} = await httpPost(url, '', method = 'delete'); 169 | let _msg; 170 | _msg = `取消评论:${msg}`; 171 | pushMsg(_msg); 172 | } 173 | 174 | //关注/取消关注 put/delete 175 | async function follow(method) { 176 | url = `/mb-gw/dndc-gateway/community/api/v2/user/followings/${$.user_id}`; 177 | let {result, msg} = await httpPost(url, '', method); 178 | let _msg; 179 | _msg = (method == 'PUT') ? `关注博主:${msg}` : `取消关注:${msg}`; 180 | pushMsg(_msg); 181 | } 182 | 183 | async function httpPost(url, body, method) { 184 | timestamp = Math.floor(Date.now() / 1000); 185 | url = `https://oneapph5.dongfeng-nissan.com.cn${url}`; 186 | body = body ? body?.replace('$$timestamp$$', timestamp) : body; 187 | noncestr = getNonce(); 188 | sign = CryptoJS.SHA512(`nissanapp${timestamp}${$.token}${noncestr}1${$.uuid}`).toString(); 189 | appversion = $.appversion || '3.1.5'; 190 | headers = { 191 | 'User-Agent': `dong feng ri chan/${appversion}} (iPhone; iOS 17.0.0; Scale/2.00)`, 192 | clientid: 'nissanapp', 193 | appVersion: appversion, 194 | appCode: 'nissan', 195 | appSkin: 'NISSANAPP', 196 | sign: sign, 197 | noncestr: noncestr, 198 | token: $.token, 199 | timestamp: timestamp, 200 | Range: 1, 201 | 'From-Type': 4, 202 | 'Content-Type': 'application/json', 203 | urid: noncestr 204 | }; 205 | const rest = {url, headers, method, ...(body ? {body} : {})}; 206 | return await httpRequest(rest); 207 | } 208 | 209 | async function post_test(method) { 210 | url = 'https://tool.vlwx.com/http/api.php'; 211 | appversion = $.appversion || '3.1.5'; 212 | timestamp = Math.floor(Date.now() / 1000); 213 | noncestr = getNonce(); 214 | sign = CryptoJS.SHA512(`nissanapp${timestamp}${$.token}${noncestr}1${$.uuid}`).toString(); 215 | body = `{ 216 | "method": "${method}", 217 | "url": "https://oneapph5.dongfeng-nissan.com.cn/mb-gw/dndc-gateway/community/api/v2/user/followings/${$.user_id}", 218 | "body": "", 219 | "headers": ["User-Agent: dong feng ri chan/${appversion} (iPhone; iOS 17.0.0; Scale/2.00)", 220 | "clientid: nissanapp", 221 | "appVersion: ${appversion}", 222 | "appCode: nissan", 223 | "appSkin: NISSANAPP", 224 | "sign: ${sign}", 225 | "noncestr: ${noncestr}", 226 | "token: ${$.token}", 227 | "timestamp: ${timestamp}", 228 | "Range: 1", 229 | "From-Type: 4", 230 | "urid: ${noncestr}"] 231 | }` 232 | headers = { 233 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", 234 | "Content-Type": "application/json", 235 | "Referer": "https://tool.vlwx.com/http/" 236 | }; 237 | const rest = {url, headers, body}; 238 | var {body} = await httpRequest(rest); 239 | let _msg; 240 | msg = $.toObj(body).msg 241 | _msg = (method === 'put') ? `关注博主:${msg}` : `取消关注:${msg}` 242 | pushMsg(_msg); 243 | } 244 | 245 | async function httpRequest(options) { 246 | try { 247 | options = options.url ? options : { url: options }; 248 | const _method = options?._method || ('body' in options ? 'post' : 'get'); 249 | const _respType = options?._respType || 'body'; 250 | const _timeout = options?._timeout || 15e3; 251 | const _http = [ 252 | new Promise((_, reject) => setTimeout(() => reject(`⛔️ 请求超时: ${options['url']}`), _timeout)), 253 | new Promise((resolve, reject) => { 254 | debug(options, '[Request]'); 255 | $[_method.toLowerCase()](options, (error, response, data) => { 256 | //debug(response, '[response]'); 257 | debug(data, '[data]'); 258 | error && $.log($.toStr(error)); 259 | if (_respType !== 'all') { 260 | resolve($.toObj(response?.[_respType], response?.[_respType])); 261 | } else { 262 | resolve(response); 263 | } 264 | }) 265 | }) 266 | ]; 267 | return await Promise.race(_http); 268 | } catch (err) { 269 | $.logErr(err); 270 | } 271 | } 272 | 273 | // 脚本执行入口 274 | !(async () => { 275 | typeof $request !== `undefined` ? await getCk() : (CryptoJS = await intCryptoJS(), await main()); // 主函数 276 | })() 277 | .catch((e) => $.messages.push(e.message || e) && $.logErr(e)) 278 | .finally(async () => { 279 | await sendMsg($.messages.join('\n').trimStart().trimEnd()); // 推送通知 280 | $.done(); 281 | }) 282 | 283 | //-------- 284 | function pushMsg(msg) { 285 | $.messages.push(msg.trimEnd()), $.log(msg.trimEnd()); 286 | } 287 | 288 | //加载 crypto-js 289 | async function intCryptoJS() { 290 | function Eval_Crypto(script_str) { 291 | const evalFunc = $.isNode() ? global.eval : eval; 292 | evalFunc(script_str); 293 | return $.isNode() ? global.CryptoJS : CryptoJS; 294 | } 295 | let script_str = ($.isNode() ? require("crypto-js") : $.getdata("cryptojs_Script")) || ""; 296 | if ($.isNode()) { 297 | return script_str; 298 | } 299 | if (script_str && Object.keys(script_str).length) { 300 | $.log("✅ " + $.name + ": 缓存中存在CryptoJS代码, 跳过下载"); 301 | return Eval_Crypto(script_str) 302 | } 303 | 304 | $.log("🚀 " + "开始下载CryptoJS代码"); 305 | // const script_str = (await $.http.get('http://192.168.2.170:8080/crypto-js.min.js')).body; 306 | // Eval_Crypto(script_str); 307 | return new Promise(async resolve => { 308 | $.getScript('http://ys-l.ysepan.com/551976330/420094417/k5G4J73367NKLlPfoiL4c/crypto-js.min.js').then(script_str => { 309 | $.setdata(script_str, "cryptojs_Script"); 310 | Eval_Crypto(script_str) 311 | $.log("✅ CryptoJS加载成功"); 312 | resolve(CryptoJS); 313 | }); 314 | }); 315 | } 316 | 317 | //noncestr 318 | function getNonce(){return Array.from({length:32},(r,n)=>12===n?"4":"0123456789abcdef"[Math.floor(16*Math.random())]).join("").toUpperCase()}; 319 | //noncestr 320 | function getRandomString(n){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:n},()=>t[Math.floor(Math.random()*t.length)]).join("")} 321 | 322 | //DEBUG 323 | function debug(content,title="debug"){let start=`\n-----${title}-----\n`;let end=`\n-----${$.time('HH:mm:ss')}-----\n`;if($.is_debug==='true'){if(typeof content=="string"){$.log(start+content+end);}else if(typeof content=="object"){$.log(start+$.toStr(content)+end);}}}; 324 | 325 | //GET ENV 326 | function getEnv(...keys){for(let key of keys){var value=$.isNode()?process.env[key]||process.env[key.toUpperCase()]||process.env[key.toLowerCase()]||$.getdata(key):$.getdata(key);if(value)return value;}}; 327 | 328 | //到小写 329 | function ObjectKeys2LowerCase(obj){return Object.fromEntries(Object.entries(obj).map(([k,v])=>[k.toLowerCase(),v]))}; 330 | 331 | //通知 332 | async function sendMsg(message){if(!message)return;try{if($.isNode()){try{var notify=require('./sendNotify');}catch(e){var notify=require('./utils/sendNotify');}await notify.sendNotify($.name,message);}else{$.msg($.name,'',message);}}catch(e){$.log(`\n\n-----${$.name}-----\n${message}`);}}; 333 | 334 | //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ENV 335 | 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.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"]),t.params&&(t.url+="?"+this.queryStr(t.params)),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))}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)} -------------------------------------------------------------------------------- /酷我.py: -------------------------------------------------------------------------------- 1 | """ 2 | 变量名kwyy 3 | 抓appuid#devid#q#phone的值用#连接 4 | q值:搜auto_login 域名http://ar.i.kuwo.cn/US_NEW/kuwo/login_kw 5 | 定时 15 3 7-23/2 * * * 6 | """ 7 | 8 | 9 | import requests 10 | import datetime 11 | import random 12 | import time 13 | import re 14 | import os 15 | import concurrent.futures 16 | 17 | def login(q): 18 | url = "http://ar.i.kuwo.cn/US_NEW/kuwo/login_kw" 19 | headers = { 20 | #"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 14; POCO F2 Pro Build/UQ1A.240105.004)", 21 | "Accept": "*/*", 22 | "Host": "ar.i.kuwo.cn", 23 | "Connection": "Keep-Alive", 24 | "Accept-Encoding": "gzip", 25 | } 26 | params = { 27 | "f": "ar", 28 | "q": q 29 | } 30 | 31 | response = requests.get(url, headers=headers, params=params) 32 | 33 | username = re.search(r'uname3=([^;]+)', response.headers['Set-Cookie']).group(1) 34 | loginSid = re.search(r'websid=([^;]+)', response.headers['Set-Cookie']).group(1) 35 | loginUid = re.search(r'userid=([^;]+)', response.headers['Set-Cookie']).group(1) 36 | return username, loginSid, loginUid 37 | 38 | 39 | def randomtime(): 40 | random_number = random.randint(15, 25) 41 | time.sleep(random_number) 42 | return 43 | 44 | 45 | def signvideo(loginUid, loginSid, appUid): # 签到广告奖励 46 | url = 'https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen' 47 | params = { 48 | 'loginUid': loginUid, 49 | 'loginSid': loginSid, 50 | 'appUid': appUid, 51 | 'terminal': 'ar', 52 | 'from': 'sign', 53 | 'adverId': '20130802-14795506463', 54 | 'token': '', 55 | 'extraGoldNum': '100', 56 | 'clickExtraGoldNum': '0', 57 | 'surpriseType': '', 58 | 'verificationId': 'BiXdGRsLjE%252B80I0ekQ6PIxbE2c%252FKyDCJSZQ7KxXsKHE1vO6SDz%252FKJIoDdVbBBzzmi76q7NTHX6vcx1PrX38%252F7xA%253D%253D', 59 | 'mobile': '' 60 | } 61 | 62 | headers = { 63 | 'Host': 'integralapi.kuwo.cn', 64 | 'Connection': 'keep-alive', 65 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 66 | 'Accept': 'application/json, text/plain, */*', 67 | 'sec-ch-ua-mobile': '?1', 68 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 69 | 'sec-ch-ua-platform': '"Android"', 70 | 'Origin': 'https://h5app.kuwo.cn', 71 | 'X-Requested-With': 'cn.kuwo.player', 72 | 'Sec-Fetch-Site': 'same-site', 73 | 'Sec-Fetch-Mode': 'cors', 74 | 'Sec-Fetch-Dest': 'empty', 75 | #'Referer': 'https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710263536072', 76 | 'Accept-Encoding': 'gzip, deflate, br', 77 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 78 | } 79 | 80 | response = requests.get(url, params=params, headers=headers) 81 | r_json = response.json() 82 | if '成功' in response.text: 83 | adtype = r_json['data']['obtain'] 84 | print(f'签到广告>>>{adtype}金币') 85 | else: 86 | description = r_json['data']['description'] 87 | print(f'签到广告>>>{description}') 88 | 89 | 90 | def Homepage(loginUid, loginSid, appUid): # 主页的广告 91 | 92 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 93 | params = { 94 | 'loginUid': loginUid, 95 | 'loginSid': loginSid, 96 | 'appUid': appUid, 97 | 'terminal': 'ar', 98 | 'from': 'surprise', 99 | 'goldNum': '70', 100 | 'adverId': '20130702-14823094126', 101 | 'token': '', 102 | 'clickExtraGoldNum': '0', 103 | 'surpriseType': '', 104 | 'verificationId': '', 105 | 'mobile': '' 106 | } 107 | 108 | headers = { 109 | 'Connection': 'keep-alive', 110 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 111 | 'Accept': 'application/json, text/plain, */*', 112 | 'sec-ch-ua-mobile': '?1', 113 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 114 | 'sec-ch-ua-platform': '"Android"', 115 | 'Origin': 'https://h5app.kuwo.cn', 116 | 'X-Requested-With': 'cn.kuwo.player', 117 | 'Sec-Fetch-Site': 'same-site', 118 | 'Sec-Fetch-Mode': 'cors', 119 | 'Sec-Fetch-Dest': 'empty', 120 | #'Referer': 'https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710349908737', 121 | 'Accept-Encoding': 'gzip, deflate, br', 122 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 123 | } 124 | 125 | response = requests.get(url, params=params, headers=headers) 126 | r_json = response.json() 127 | if '成功' in response.text: 128 | adtype = r_json['data']['obtain'] 129 | print(f'主页广告>>>{adtype}金币') 130 | else: 131 | description = r_json['data']['description'] 132 | print(f'主页广告>>>{description}') 133 | 134 | 135 | def openbox(loginUid, loginSid, devId, appUid): 136 | current_hour = datetime.datetime.now().time().hour 137 | 138 | time_ranges = { 139 | 0: "00-08", 140 | 8: "08-10", 141 | 10: "10-12", 142 | 12: "12-14", 143 | 14: "14-16", 144 | 16: "16-18", 145 | 18: "18-20", 146 | 20: "20-24" 147 | } 148 | 149 | for start_hour, time_range in time_ranges.items(): 150 | if start_hour <= current_hour < start_hour + 2: 151 | print(f"当前时间处于 {time_range} 时间段") 152 | break 153 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/new/newBoxFinish" 154 | params = { 155 | 'loginUid': loginUid, 156 | 'loginSid': loginSid, 157 | 'devId': devId, 158 | 'appUid': appUid, 159 | 'source': 'kwplayer_ar_10.7.6.2_qq.apk', 160 | 'version': 'kwplayer_ar_10.7.6.2', 161 | 'r': '0.6345674327264215', 162 | 'action': 'new', 163 | 'time': f'{time_range}', 164 | 'goldNum': '23', 165 | 'extraGoldnum': '0', 166 | 'clickExtraGoldNum': '0' 167 | } 168 | 169 | headers = { 170 | 'Connection': 'keep-alive', 171 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 172 | 'Accept': 'application/json, text/plain, */*', 173 | 'sec-ch-ua-mobile': '?1', 174 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 175 | 'sec-ch-ua-platform': '"Android"', 176 | 'Origin': 'https://h5app.kuwo.cn', 177 | 'X-Requested-With': 'cn.kuwo.player', 178 | 'Sec-Fetch-Site': 'same-site', 179 | 'Sec-Fetch-Mode': 'cors', 180 | 'Sec-Fetch-Dest': 'empty', 181 | #'Referer': 'https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710342600688', 182 | 'Accept-Encoding': 'gzip, deflate, br', 183 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 184 | } 185 | 186 | response = requests.get(url, params=params, headers=headers) 187 | r_json = response.json() 188 | if '成功' in response.text: 189 | adtype = r_json['data']['obtain'] 190 | print(f'时间段开宝箱>>>{adtype}金币') 191 | else: 192 | description = r_json['data']['description'] 193 | print(f'时间段开宝箱>>>{description}') 194 | # 开宝箱的弹窗视频 195 | 196 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 197 | params = { 198 | "loginUid": loginUid, 199 | "loginSid": loginSid, 200 | "appUid": appUid, 201 | "terminal": "ar", 202 | "from": "sign", 203 | "adverId": "20130802-13379713291", 204 | "token": "", 205 | "extraGoldNum": "88", 206 | "clickExtraGoldNum": "0", 207 | "surpriseType": "", 208 | "verificationId": "", 209 | "mobile": "" 210 | } 211 | 212 | headers = { 213 | "Connection": "keep-alive", 214 | "sec-ch-ua": '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 215 | "Accept": "application/json, text/plain, */*", 216 | "sec-ch-ua-mobile": "?1", 217 | "User-Agent": "Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage", 218 | "sec-ch-ua-platform": '"Android"', 219 | "Origin": "https://h5app.kuwo.cn", 220 | "X-Requested-With": "cn.kuwo.player", 221 | "Sec-Fetch-Site": "same-site", 222 | "Sec-Fetch-Mode": "cors", 223 | "Sec-Fetch-Dest": "empty", 224 | #"Referer": "https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710342600688", 225 | "Accept-Encoding": "gzip, deflate, br", 226 | "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" 227 | } 228 | response = requests.get(url, params=params, headers=headers) 229 | r_json = response.json() 230 | if '成功' in response.text: 231 | adtype = r_json['data']['obtain'] 232 | print(f'开宝箱弹窗>>>{adtype}金币') 233 | else: 234 | description = r_json['data']['description'] 235 | print(f'开宝箱弹窗>>>{description}') 236 | 237 | 238 | def sign(loginUid, loginSid, appUid): # 签到 239 | # 签到没抓到 240 | # 签到弹窗 241 | 242 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 243 | params = { 244 | 'loginUid': loginUid, 245 | 'loginSid': loginSid, 246 | 'appUid': appUid, 247 | 'terminal': 'ar', 248 | 'from': 'sign', 249 | 'adverId': '20130802-13379713291', 250 | 'token': '', 251 | 'extraGoldNum': '88', 252 | 'clickExtraGoldNum': '0', 253 | 'surpriseType': '', 254 | 'verificationId': '', 255 | 'mobile': '' 256 | } 257 | 258 | headers = { 259 | 'Connection': 'keep-alive', 260 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 261 | 'Accept': 'application/json, text/plain, */*', 262 | 'sec-ch-ua-mobile': '?1', 263 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 264 | 'sec-ch-ua-platform': '"Android"', 265 | 'Origin': 'https://h5app.kuwo.cn', 266 | 'X-Requested-With': 'cn.kuwo.player', 267 | 'Sec-Fetch-Site': 'same-site', 268 | 'Sec-Fetch-Mode': 'cors', 269 | 'Sec-Fetch-Dest': 'empty', 270 | #'Referer': 'https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710342600688', 271 | 'Accept-Encoding': 'gzip, deflate, br', 272 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 273 | } 274 | 275 | response = requests.get(url, params=params, headers=headers) 276 | 277 | 278 | 279 | 280 | def draw(loginUid, loginSid, appUid): # 抽奖 281 | # 首次免费抽 282 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/loterry/getLucky" 283 | params = { 284 | "loginUid": loginUid, 285 | "loginSid": loginSid, 286 | "appUid": appUid, 287 | 'source': 'kwplayer_ar_10.7.6.2_qq.apk', 288 | 'type': 'free' 289 | } 290 | 291 | headers = { 292 | 'Connection': 'keep-alive', 293 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 294 | 'Accept': 'application/json, text/plain, */*', 295 | 'sec-ch-ua-mobile': '?1', 296 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 297 | 'sec-ch-ua-platform': '"Android"', 298 | 'Origin': 'https://h5app.kuwo.cn', 299 | 'X-Requested-With': 'cn.kuwo.player', 300 | 'Sec-Fetch-Site': 'same-site', 301 | 'Sec-Fetch-Mode': 'cors', 302 | 'Sec-Fetch-Dest': 'empty', 303 | 'Referer': 'https://h5app.kuwo.cn/', 304 | 'Accept-Encoding': 'gzip, deflate, br', 305 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 306 | } 307 | 308 | response = requests.get(url, params=params, headers=headers) 309 | r_json = response.json() 310 | if '金币' in response.text: 311 | adtype = r_json['data']['loterryname'] 312 | print(f'广告抽奖>>>{adtype}') 313 | else: 314 | description = r_json['msg'] 315 | print(f'免广告抽奖>>>{description}') 316 | # 看视频抽 317 | randomtime() 318 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/loterry/getLucky" 319 | params = { 320 | "loginUid": loginUid, 321 | "loginSid": loginSid, 322 | "appUid": appUid, 323 | 'source': 'kwplayer_ar_10.7.6.2_qq.apk', 324 | 'type': 'video' 325 | } 326 | 327 | headers = { 328 | 'Connection': 'keep-alive', 329 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 330 | 'Accept': 'application/json, text/plain, */*', 331 | 'sec-ch-ua-mobile': '?1', 332 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 333 | 'sec-ch-ua-platform': '"Android"', 334 | 'Origin': 'https://h5app.kuwo.cn', 335 | 'X-Requested-With': 'cn.kuwo.player', 336 | 'Sec-Fetch-Site': 'same-site', 337 | 'Sec-Fetch-Mode': 'cors', 338 | 'Sec-Fetch-Dest': 'empty', 339 | 'Referer': 'https://h5app.kuwo.cn/', 340 | 'Accept-Encoding': 'gzip, deflate, br', 341 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 342 | } 343 | 344 | response = requests.get(url, params=params, headers=headers) 345 | r_json = response.json() 346 | if '金币' in response.text: 347 | adtype = r_json['data']['loterryname'] 348 | print(f'广告抽奖>>>{adtype}') 349 | else: 350 | description = r_json['msg'] 351 | print(f'广告抽奖>>>{description}') 352 | 353 | 354 | def video(loginUid, loginSid, appUid): # 看视频 355 | 356 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 357 | params = { 358 | 'loginUid': loginUid, 359 | 'loginSid': loginSid, 360 | 'appUid': appUid, 361 | 'terminal': 'ar', 362 | 'from': 'videoadver', 363 | 'goldNum': '58', 364 | 'adverId': '', 365 | 'token': '', 366 | 'extraGoldNum': '0', 367 | 'clickExtraGoldNum': '0', 368 | 'surpriseType': '', 369 | 'verificationId': '', 370 | 'mobile': '' 371 | } 372 | 373 | headers = { 374 | 'Connection': 'keep-alive', 375 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 376 | 'Accept': 'application/json, text/plain, */*', 377 | 'sec-ch-ua-mobile': '?1', 378 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 379 | 'sec-ch-ua-platform': '"Android"', 380 | 'Origin': 'https://h5app.kuwo.cn', 381 | 'X-Requested-With': 'cn.kuwo.player', 382 | 'Sec-Fetch-Site': 'same-site', 383 | 'Sec-Fetch-Mode': 'cors', 384 | 'Sec-Fetch-Dest': 'empty', 385 | #'Referer': 'https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710342600688', 386 | 'Accept-Encoding': 'gzip, deflate, br', 387 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 388 | } 389 | 390 | response = requests.get(url, params=params, headers=headers) 391 | r_json = response.json() 392 | if '成功' in response.text: 393 | adtype = r_json['data']['obtain'] 394 | print(f'创意视频>>>{adtype}金币') 395 | else: 396 | description = r_json['data']['description'] 397 | print(f'创意视频>>>{description}') 398 | randomtime() 399 | # 看广告后的弹窗 400 | 401 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 402 | params = { 403 | 'loginUid': loginUid, 404 | 'loginSid': loginSid, 405 | 'appUid': appUid, 406 | 'terminal': 'ar', 407 | 'from': 'videoadver', 408 | 'adverId': '20130802-14824211622', 409 | 'token': '', 410 | 'extraGoldNum': '110', 411 | 'clickExtraGoldNum': '0', 412 | 'surpriseType': '', 413 | 'verificationId': '', 414 | 'mobile': '', 415 | 'listenTime': '0' 416 | } 417 | headers = { 418 | 'Connection': 'keep-alive', 419 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 420 | 'Accept': 'application/json, text/plain, */*', 421 | 'sec-ch-ua-mobile': '?1', 422 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 423 | 'sec-ch-ua-platform': '"Android"', 424 | 'Origin': 'https://h5app.kuwo.cn', 425 | 'X-Requested-With': 'cn.kuwo.player', 426 | 'Sec-Fetch-Site': 'same-site', 427 | 'Sec-Fetch-Mode': 'cors', 428 | 'Sec-Fetch-Dest': 'empty', 429 | #'Referer': 'https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710342600688', 430 | 'Accept-Encoding': 'gzip, deflate, br', 431 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 432 | } 433 | 434 | response = requests.get(url, params=params, headers=headers) 435 | r_json = response.json() 436 | if '成功' in response.text: 437 | adtype = r_json['data']['obtain'] 438 | print(f'创意视频弹窗>>>{adtype}金币') 439 | else: 440 | description = r_json['data']['description'] 441 | print(f'创意视频弹窗>>>{description}') 442 | 443 | 444 | def collect(loginUid, loginSid, appUid): # 收藏歌曲 445 | 446 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 447 | params = { 448 | 'loginUid': loginUid, 449 | 'loginSid': loginSid, 450 | 'appUid': appUid, 451 | 'terminal': 'ar', 452 | 'from': 'collect', 453 | 'goldNum': '18', 454 | 'adverId': '', 455 | 'token': '', 456 | 'clickExtraGoldNum': '0', 457 | 'surpriseType': '', 458 | 'verificationId': '', 459 | 'mobile': '' 460 | } 461 | 462 | headers = { 463 | 'Connection': 'keep-alive', 464 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 465 | 'Accept': 'application/json, text/plain, */*', 466 | 'sec-ch-ua-mobile': '?1', 467 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 468 | 'sec-ch-ua-platform': '"Android"', 469 | 'Origin': 'https://h5app.kuwo.cn', 470 | 'X-Requested-With': 'cn.kuwo.player', 471 | 'Sec-Fetch-Site': 'same-site', 472 | 'Sec-Fetch-Mode': 'cors', 473 | 'Sec-Fetch-Dest': 'empty', 474 | #'Referer': 'https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710342600688', 475 | 'Accept-Encoding': 'gzip, deflate, br', 476 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 477 | } 478 | 479 | response = requests.get(url, params=params, headers=headers) 480 | r_json = response.json() 481 | if '成功' in response.text: 482 | adtype = r_json['data']['obtain'] 483 | print(f'收藏歌曲>>>{adtype}金币') 484 | else: 485 | description = r_json['data']['description'] 486 | print(f'收藏歌曲>>>{description}') 487 | 488 | # 收藏弹窗 489 | 490 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 491 | params = { 492 | 'loginUid': loginUid, 493 | 'loginSid': loginSid, 494 | 'appUid': appUid, 495 | 'terminal': 'ar', 496 | 'from': 'collect', 497 | 'goldNum': '0', 498 | 'adverId': '', 499 | 'token': '', 500 | 'extraGoldNum': '60', 501 | 'clickExtraGoldNum': '0', 502 | 'surpriseType': '', 503 | 'verificationId': '', 504 | 'mobile': '', 505 | 'listenTime': '0' 506 | } 507 | randomtime() 508 | headers = { 509 | 'Connection': 'keep-alive', 510 | 'sec-ch-ua': '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 511 | 'Accept': 'application/json, text/plain, */*', 512 | 'sec-ch-ua-mobile': '?1', 513 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage', 514 | 'sec-ch-ua-platform': '"Android"', 515 | 'Origin': 'https://h5app.kuwo.cn', 516 | 'X-Requested-With': 'cn.kuwo.player', 517 | 'Sec-Fetch-Site': 'same-site', 518 | 'Sec-Fetch-Mode': 'cors', 519 | 'Sec-Fetch-Dest': 'empty', 520 | #'Referer': 'https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642624794_1710342600688', 521 | 'Accept-Encoding': 'gzip, deflate, br', 522 | 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7' 523 | } 524 | 525 | response = requests.get(url, params=params, headers=headers) 526 | r_json = response.json() 527 | if '成功' in response.text: 528 | adtype = r_json['data']['obtain'] 529 | print(f'收藏歌曲弹窗>>>{adtype}金币') 530 | else: 531 | description = r_json['data']['description'] 532 | print(f'收藏歌曲弹窗>>>{description}') 533 | def listentomusic(loginUid, loginSid, appUid): 534 | times = ['5', '10', '20', '30'] 535 | goldNums = ['43', '57', '60', '99'] 536 | extraGoldNum = ['68', '68', '68', '68'] 537 | url2 = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 538 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/earningSignIn/newDoListen" 539 | headers = { 540 | "Host": "integralapi.kuwo.cn", 541 | "Connection": "keep-alive", 542 | "sec-ch-ua": '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 543 | "Accept": "application/json, text/plain, */*", 544 | "sec-ch-ua-mobile": "?1", 545 | "User-Agent": "Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage", 546 | "sec-ch-ua-platform": '"Android"', 547 | "Origin": "https://h5app.kuwo.cn", 548 | "X-Requested-With": "cn.kuwo.player", 549 | "Sec-Fetch-Site": "same-site", 550 | "Sec-Fetch-Mode": "cors", 551 | "Sec-Fetch-Dest": "empty", 552 | #"Referer": "https://h5app.kuwo.cn/apps/earning-sign/index.html?FULLHASARROW=1&showtab=0&kwflag=2642626091_1711184117441", 553 | "Accept-Encoding": "gzip, deflate, br", 554 | "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" 555 | } 556 | goldNum = 0 557 | for time in times: 558 | goldNumcoin = goldNums[goldNum] 559 | extraGoldNumcoin = extraGoldNum[goldNum] 560 | params = { 561 | 'loginUid': loginUid, 562 | 'loginSid': loginSid, 563 | 'appUid': appUid, 564 | "terminal": "ar", 565 | "from": "listen", 566 | "goldNum": goldNumcoin, 567 | "adverId": "", 568 | "token": "", 569 | "clickExtraGoldNum": "0", 570 | "surpriseType": "", 571 | "verificationId": "", 572 | "mobile": "", 573 | "listenTime": time 574 | } 575 | params2 = { 576 | 'loginUid': loginUid, 577 | 'loginSid': loginSid, 578 | 'appUid': appUid, 579 | "terminal": "ar", 580 | "from": "listen", 581 | "adverId": "20130802-15030283408", 582 | "token": "", 583 | "extraGoldNum": extraGoldNumcoin, 584 | "clickExtraGoldNum": "0", 585 | "surpriseType": "", 586 | "verificationId": "", 587 | "mobile": "", 588 | "listenTime": time 589 | } 590 | goldNum = goldNum + 1 591 | response = requests.get(url, params=params, headers=headers) 592 | r_json = response.json() 593 | if '成功' in response.text: 594 | adtype = r_json['data']['obtain'] 595 | print(f'听音乐弹窗>>>{adtype}金币') 596 | else: 597 | description = r_json['data']['description'] 598 | print(f'听音乐弹窗>>>{description}') 599 | randomtime() 600 | response2 = requests.get(url2, params=params2, headers=headers) 601 | r_json = response2.json() 602 | if '成功' in response2.text: 603 | adtype = r_json['data']['obtain'] 604 | print(f'听音乐>>>{adtype}金币') 605 | else: 606 | description = r_json['data']['description'] 607 | print(f'听音乐>>>{description}') 608 | randomtime() 609 | def tx(loginUid, loginSid, appUid, phone): 610 | if phone is None: 611 | return 612 | url = "https://integralapi.kuwo.cn/api/v1/online/sign/v1/getWithdraw" 613 | params = { 614 | "quotaId": "30002", 615 | 'loginUid': loginUid, 616 | 'loginSid': loginSid, 617 | 'appUid': appUid, 618 | "source": "kwplayer_ar_10.7.6.2_qq.apk", 619 | "version": "1", 620 | "phone": phone 621 | } 622 | headers = { 623 | "Host": "integralapi.kuwo.cn", 624 | "Connection": "keep-alive", 625 | "sec-ch-ua": '"Not A(Brand";v="99", "Android WebView";v="121", "Chromium";v="121"', 626 | "Accept": "application/json, text/plain, */*", 627 | "sec-ch-ua-mobile": "?1", 628 | #"User-Agent": "Mozilla/5.0 (Linux; Android 14; POCO F2 Pro Build/UQ1A.240105.004; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/121.0.6167.101 Mobile Safari/537.36/ kuwopage", 629 | "sec-ch-ua-platform": '"Android"', 630 | "Origin": "https://h5app.kuwo.cn", 631 | "X-Requested-With": "cn.kuwo.player", 632 | "Sec-Fetch-Site": "same-site", 633 | "Sec-Fetch-Mode": "cors", 634 | "Sec-Fetch-Dest": "empty", 635 | #"Referer": "https://h5app.kuwo.cn/apps/earning-sign/cash_out.html?transparentTitleView=1&defBack=black&endBgColor=white&random=1711186177362&kwflag=2642624794_1711186175255", 636 | "Accept-Encoding": "gzip, deflate, br", 637 | "Accept-Language": "zh-CN,zh;q=0.." 638 | "9,en-US;q=0.8,en;q=0.7" 639 | } 640 | 641 | response = requests.get(url, params=params, headers=headers).json() 642 | text = response['data']['text'] 643 | print(f"提现2元>>>>>{text}") 644 | 645 | def task(): 646 | username, loginSid, loginUid = login(q) 647 | randomtime() 648 | signvideo(loginUid, loginSid, appUid) 649 | randomtime() 650 | Homepage(loginUid, loginSid, appUid) 651 | randomtime() 652 | openbox(loginUid, loginSid, devId, appUid) # 开宝箱 653 | randomtime() 654 | draw(loginUid, loginSid, appUid) # 抽奖 655 | randomtime() 656 | video(loginUid, loginSid, appUid) # 看视频 657 | randomtime() 658 | video(loginUid, loginSid, appUid) # 看视频 659 | randomtime() 660 | collect(loginUid, loginSid, appUid) # 收藏 661 | listentomusic(loginUid, loginSid, appUid)# 听音乐 662 | def execute_concurrently(tasks): 663 | with concurrent.futures.ThreadPoolExecutor() as executor: 664 | results = list(executor.map(lambda task: tx(*task), tasks)) 665 | return results 666 | kwyy = os.getenv('kwyy') 667 | if kwyy is None: 668 | print("未找到环境变量kwyy") 669 | elif "&" not in kwyy: 670 | kwyys = kwyy.split('#') 671 | appUid = kwyys[0] 672 | devId = kwyys[1] 673 | q = kwyys[2] 674 | phone = kwyys[3] 675 | task() 676 | else: 677 | kwyys = kwyy.split('&') 678 | for i, kw in enumerate(kwyys): 679 | print(f'=====第{i+1}个账号=====') 680 | try: 681 | kws = kw.split('#') 682 | appUid = kws[0] 683 | devId = kws[1] 684 | q = kws[2] 685 | task() 686 | except Exception as e: 687 | print(e) 688 | continue 689 | --------------------------------------------------------------------------------