├── README.md ├── aiqicha.js ├── aliyundrive.js ├── aliyundrive.py ├── app_dmdd.js ├── chinaliantong.js ├── cmcc.js ├── ddgy.js ├── ddgy1.js ├── didigy.js ├── dwjk.js ├── dygy.js ├── elm.js ├── fqxs.js ├── gylm.js ├── jrtt.js ├── kgyy.js ├── kgyy1.js ├── ks.py ├── ksgy.js ├── ksjsb.js ├── kuaishou.py ├── meituan.js ├── mi sport.js ├── qdxw.js ├── qimaoxs.js ├── raw_main_py_xiaomigaibu.py ├── tianyiyun.js ├── weibo_checkin.py ├── woniuyuedu.js ├── wps.py ├── wx_kkjyd.js ├── wxyd.js ├── wxyd1.js ├── xab.js ├── xiangjiaoshipin.js ├── xiaomi.py ├── xiaomibbs.js ├── xiaomibbs.py ├── xmbs.js ├── xqz.js ├── yysign.py ├── zssq.js └── 七猫抽奖领宝箱.py /README.md: -------------------------------------------------------------------------------- 1 | # qz 2 | 青龙脚本 3 | 介绍 4 | 个人存储的青龙脚本,都是从网上大神那边拉来的,基本不提供维护 多撸易黄,每个脚本不保证时效性。 5 | 6 | 推荐配置 7 | 推荐试用nas、路由器、云服务器、轻量云服务器。 有闲置服务器的可以直接上,新购买的话可以看看收益能否跑得过服务器金额 尽量选择国内服务器,部分任务只有国内才能获取,国外可能跑不动。 基本上就是有网就行,能装docker能跑青龙面板就行。 8 | 9 | 事前准备 10 | 1、安装docker 11 | 2、安装青龙面板 以上参考官方 12 | 3、打开防火墙对应端口 13 | 4、(可选)进入docker,安装依赖。 14 | -------------------------------------------------------------------------------- /aiqicha.js: -------------------------------------------------------------------------------- 1 | /* 2 | cron 28 8,16,21 * * * https://github.com/MooNight16/qinglong-js/edit/main/aqc.js 爱企查2 3 | 下载地址:https://aiqicha.baidu.com/m/usercenter/inviteCode?uid=xlTM-TogKuTwvdzTq9EFdGvdxrmJpAANFgmd 4 | 手动抓取CK:https://passport.baidu.com/v2/?login 一个整个ck复制 5 | 每天执行三次 可能有一些任务跑不完 如:高级搜索 浏览监控日报 属正常现象 (百度抽风) 6 | 多账号请用@分割Cookie 格式:ck1@ck2@ck2 青龙变量aqcCookies qx和v2p暂时不可使用 7 | 批量查询任务暂时无法完成 8 | 感谢Wenmoux的爱妻查任务脚本 Wenmoux github地址:https://github.com/Wenmoux/checkbox 作者仅完善和修改 9 | */ 10 | const $ = new Env("爱企查2"); 11 | const axios = require("axios"); 12 | const notify = $.isNode() ? require("./sendNotify") : ""; 13 | aqcookie = $.isNode() ? process.env.aqcc : ""; 14 | aqcookieArr = []; 15 | 16 | var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); 17 | let oo = { 18 | CX10002: "每日签到", 19 | CX10001: "每日登陆", 20 | CX11001: "查询企业", 21 | CX11002: "查询老板", 22 | CX11003: "查询老赖", 23 | CX11004: "查询商标", 24 | CX11005: "查询地图", 25 | CX11006: "浏览新闻", 26 | CX11007: "浏览监控日报", 27 | CX11009: "查询关系", 28 | CX11010: "批量查询", 29 | CX12001: "添加监控", 30 | CX12002: "添加关注", 31 | CX12005: "分享任务", 32 | CX12006: "邀请任务", 33 | CX12007: "高级搜索", 34 | CX12008: "高级筛选", 35 | }; 36 | 37 | const headers = { 38 | "User-Agent": 39 | "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Safari/537.36", 40 | referer: 41 | "https://aiqicha.baidu.com/m/s?t=3&q=%E5%B0%8F%E7%B1%B3&VNK=e73b55ef", 42 | "X-Requested-With": "XMLHttpRequest", 43 | Host: "aiqicha.baidu.com", 44 | cookie: "", 45 | }; 46 | 47 | function rand() { 48 | let key = ["苹果", "华为", "百度", "一个", "暴风", "王者"]; 49 | let i = Math.floor(Math.random() * key.length); 50 | return key[i]; 51 | } 52 | 53 | function get(api, method, data) { 54 | return new Promise(async (resolve) => { 55 | try { 56 | let url = `https://aiqicha.baidu.com/${api}`; 57 | if (method == "get") 58 | res = await axios.get(url, { 59 | headers, 60 | }); 61 | if (method == "post") 62 | res = await axios.post(url, data, { 63 | headers, 64 | }); 65 | if (res.data.status == 0) console.log(" 操作成功"); 66 | else console.log(" " + res.data.msg); 67 | resolve(res.data); 68 | } catch (err) { 69 | console.log(err); 70 | } 71 | resolve(); 72 | }); 73 | } 74 | 75 | async function getaskList() { 76 | let tres = await get("usercenter/checkTaskStatusAjax", "get"); 77 | let obj = tres.data; 78 | if (tres.status == 0) { 79 | Object.keys(obj).forEach(function (key) { 80 | if (oo[key]) { 81 | let task = obj[key]; 82 | task.title = key; 83 | alltaskList.push(task); 84 | if (task.count == task.totalcount) ytaskList.push(task); 85 | if (task.canClaim != 0) claimList.push(key); 86 | if (task.count != task.totalcount) taskList.push(task); 87 | } 88 | }); 89 | } 90 | console.log( 91 | `共 ${alltaskList.length}任务 已完成 ${ytaskList.length} 任务 可做 ${taskList.length}任务 ${claimList.length}任务可领取奖励` 92 | ); 93 | } 94 | 95 | async function dotask(taskList) { 96 | for (var o of taskList) { 97 | switch (o.title) { 98 | case "CX10002": //每日签到 99 | console.log("开始任务:" + oo[o.title]); 100 | await get(`usercenter/userSignAjax`, "get"); 101 | break; 102 | case "CX10001": //每日登陆 103 | console.log("开始任务:" + oo[o.title]); 104 | break; 105 | case "CX11001": //查询企业 106 | console.log("开始任务:" + oo[o.title]); 107 | await get(`s/getHeadBrandAndPersonAjax?q=${encodeURI(rand())}`, "get"); 108 | await sleep(5000); 109 | break; 110 | case "CX11002": //查询老板 111 | console.log("开始任务:" + oo[o.title]); 112 | await get( 113 | `person/relevantPersonalAjax?page=1&q=${encodeURI(rand())}&size=10`, 114 | "get" 115 | ); 116 | await sleep(5000); 117 | break; 118 | case "CX11003": //查询老赖 119 | console.log("开始任务:" + oo[o.title]); 120 | await get( 121 | `c/dishonestAjax?q=${encodeURI( 122 | rand() 123 | )}&t=8&s=10&p=1&f=%7B%22type%22:%221%22%7D`, 124 | "get" 125 | ); 126 | await sleep(5000); 127 | break; 128 | case "CX11004": //查询商标 129 | console.log("开始任务:" + oo[o.title]); 130 | await get( 131 | `c/markproAjax?q=${encodeURI(rand())}&p=1&s=10&f=%7B%7D&o=%7B%7D`, 132 | "get" 133 | ); 134 | await sleep(5000); 135 | break; 136 | case "CX11005": //查询地图 137 | console.log("开始任务:" + oo[o.title]); 138 | await get( 139 | `map/getAdvanceFilterListAjax?longitude=113.76343399&latitude=23.04302382&distance=2&page=1`, 140 | "get" 141 | ); 142 | await sleep(5000); 143 | break; 144 | case "CX11006": //浏览新闻 145 | console.log("开始任务:" + oo[o.title]); 146 | await get( 147 | "m/getYuqingDetailAjax?yuqingId=993090dcb7574be014599996098459e3", 148 | "get" 149 | ); 150 | break; 151 | case "CX11007": //浏览监控日报 152 | console.log("开始任务:" + oo[o.title]); 153 | let jk = await get( 154 | "zxcenter/monitorDailyReportListAjax?page=1&size=10", 155 | "get" 156 | ); 157 | let list = jk.data.list; 158 | if (list) { 159 | for (p = 0; p < 2 && p < list.length; p++) { 160 | await get( 161 | `zxcenter/monitorDailyReportDetailAjax?reportdate=${list[p].reportDate}`, 162 | "get" 163 | ); 164 | } 165 | } 166 | break; 167 | case "CX11009": //查询关系 168 | console.log("开始任务:" + oo[o.title]); 169 | await get( 170 | `relations/findrelationsAjax?from=e07a8ef1409bff3987f1b28d118ff826&to=6f5966de4af2eb29085ffbcc9cc0116a&pathNum=10`, 171 | "get" 172 | ); 173 | await sleep(5000); 174 | break; 175 | case "CX11010": //批量查询 176 | console.log("开始任务:" + oo[o.title]); 177 | await get( 178 | `batchquery/show?exportkey=xlTM-TogKuTwFXlQeIXL0-Z9C*YO4vCwtkRdM7XV9*7FpZRZtSR8*2qgItOy*xqmSxZSsju-YgmZmd`, 179 | "get" 180 | ); 181 | await sleep(5000); 182 | break; 183 | case "CX12001": //添加监控 184 | console.log("开始任务:" + oo[o.title]); 185 | for (id of [ 186 | 29829264524016, 28696417032417, 31370200772422, 31242153386614, 187 | ]) { 188 | await get(`zxcenter/addMonitorAjax?pid=${id}`, "get"); 189 | } 190 | await get(`zxcenter/addMonitorAjax?pid=29710155220353`, "get"); 191 | await get(`zxcenter/cancelMonitorAjax?pid=29710155220353`, "get"); 192 | await sleep(5000); 193 | break; 194 | case "CX12002": //添加关注 195 | console.log("开始任务:" + oo[o.title]); 196 | await get(`my/addCollectAjax`, "post", `pid=34527616977197`); 197 | await get(`my/delCollectAjax`, "post", `pid=34527616977197`); 198 | await sleep(5000); 199 | break; 200 | case "CX12005": //分享好友 201 | console.log("开始任务:" + oo[o.title]); 202 | let shres = await get(`usercenter/getShareUrlAjax`, "get"); 203 | uid = shres.data.match(/uid=(.+)/); 204 | if (uid) { 205 | uid = uid[1]; 206 | headers["cookie"] = ""; 207 | let t = Date.now(); 208 | headers["referer"] = "https://" + shres.data + "&VNK=" + t; 209 | headers["Zx-Open-Url"] = "https://" + shres.data + "&VNK=" + t; 210 | await get(`m/?uid=${uid}`, "get"); 211 | await get(`m/getuserinfoAjax?uid=${uid}`, "get"); 212 | headers.cookie = aqcookie; 213 | await sleep(500); 214 | } 215 | break; 216 | case "CX12007": //高级搜索 217 | console.log("开始任务:" + oo[o.title]); 218 | await get( 219 | `search/advanceSearchAjax?q=${encodeURI( 220 | rand() 221 | )}&t=11&p=1&s=10&o=0&f=%7B%22searchtype%22:[%221%22]%7D`, 222 | "get" 223 | ); 224 | break; 225 | case "CX12008": //高级筛选 226 | console.log("开始任务:" + oo[o.title]); 227 | await get( 228 | `search/advanceFilterAjax?q=%E7%A6%8F%E5%B7%9E%E6%AF%8F%E6%97%A5&t=0&p=1&s=10&o=0`, 229 | "get" 230 | ); 231 | break; 232 | default: 233 | break; 234 | } 235 | await sleep(5000); 236 | console.log(" 去领取爱豆"); 237 | let clres = await get( 238 | `zxcenter/claimUserTaskAjax?taskCode=${o.title}`, 239 | "get" 240 | ); 241 | if (clres.status == 0) 242 | console.log(` 领取成功!获得${clres.data.totalScore}爱豆r\n`); 243 | } 244 | } 245 | 246 | async function aqc() { 247 | msg = ""; 248 | console.log( 249 | `======== 脚本执行-北京时间(UTC+8):${new Date( 250 | new Date().getTime() + 8 * 60 * 60 * 1000 251 | ).toLocaleString()} =========\n` 252 | ); 253 | if (aqcookieArr) { 254 | console.log("\r\n爱企查cookie数量:" + aqcookieArr.length + ""); 255 | for (a = 0; a < aqcookieArr.length; a++) { 256 | aqcookie = aqcookieArr[a]; 257 | headers.cookie = aqcookie; 258 | ytaskList = []; 259 | taskList = []; 260 | claimList = []; 261 | alltaskList = []; 262 | console.log("\n******账号" + (a + 1) + "开始******\n"); 263 | let logininfo = await get("m/getuserinfoAjax", "get"); 264 | if (logininfo.data.isLogin == 1) { 265 | await getaskList(); 266 | await dotask(taskList); 267 | await dotask(taskList); 268 | await sleep(500); 269 | claimList = []; 270 | await getaskList(); 271 | for (task of claimList) { 272 | console.log(`领取爱豆:${oo[task]}`); 273 | let clres = await get( 274 | `zxcenter/claimUserTaskAjax?taskCode=${task}`, 275 | "get" 276 | ); 277 | if (clres.status == 0) 278 | console.log(`领取成功!获得${clres.data.totalScore}爱豆r\n`); 279 | } 280 | console.log("去查询爱豆积分"); 281 | let userinfo = await get("usercenter/getvipinfoAjax", "get"); 282 | msg += `账号${a + 1}【${logininfo.data.userName}】:共${ 283 | userinfo.data.consume 284 | }爱豆\n`; 285 | } else { 286 | msg = "cookie已失效"; 287 | } 288 | } 289 | } else { 290 | msg += 291 | "请手动抓取cookies"; 292 | } 293 | console.log(msg); 294 | await notify.sendNotify($.name, msg); 295 | return msg; 296 | } 297 | 298 | if (aqcookie) { 299 | if (aqcookie.indexOf("@") != -1) { 300 | aqcookie.split("@").forEach((item) => { 301 | aqcookieArr.push(item); 302 | }); 303 | } else { 304 | aqcookieArr.push(aqcookie); 305 | } 306 | aqc(); 307 | //console.log("爱企查共:" + aqcookieArr.length + "个账号"); 308 | } else { 309 | console.log( 310 | "请手动抓取cookies" 311 | ); 312 | return; 313 | } 314 | 315 | // prettier-ignore 316 | 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)} 317 | -------------------------------------------------------------------------------- /aliyundrive.js: -------------------------------------------------------------------------------- 1 | 2 | 1 3 | /* 4 | 2 5 | cron "0 9 * * *" autoSignin.js, tag=阿里云盘签到 6 | 3 7 | */ 8 | 4 9 | ​ 10 | 5 11 | const axios = require('axios') 12 | 6 13 | const { initInstance, getEnv, updateCkEnv } = require('./qlApi.js') 14 | 7 15 | const notify = require('./sendNotify') 16 | 8 17 | ​ 18 | 9 19 | const updateAccesssTokenURL = 'https://auth.aliyundrive.com/v2/account/token' 20 | 10 21 | const signinURL = 'https://member.aliyundrive.com/v1/activity/sign_in_list' 22 | 11 23 | ​ 24 | 12 25 | // 使用 refresh_token 更新 access_token 26 | 13 27 | function updateAccesssToken(queryBody, remarks) { 28 | 14 29 | const errorMessage = [remarks, '更新 access_token 失败'] 30 | 15 31 | return axios(updateAccesssTokenURL, { 32 | 16 33 | method: 'POST', 34 | 17 35 | data: queryBody, 36 | 18 37 | headers: { 'Content-Type': 'application/json' } 38 | 19 39 | }) 40 | 20 41 | .then(d => d.data) 42 | 21 43 | .then(d => { 44 | 22 45 | const { code, message, nick_name, refresh_token, access_token } = d 46 | 23 47 | if (code) { 48 | 24 49 | if ( 50 | 25 51 | code === 'RefreshTokenExpired' || 52 | 26 53 | code === 'InvalidParameter.RefreshToken' 54 | 27 55 | ) 56 | 28 57 | errorMessage.push('refresh_token 已过期或无效') 58 | 29 59 | else errorMessage.push(message) 60 | 30 61 | return Promise.reject(errorMessage.join(', ')) 62 | 31 63 | } 64 | 32 65 | return { nick_name, refresh_token, access_token } 66 | 33 67 | }) 68 | 34 69 | .catch(e => { 70 | 35 71 | errorMessage.push(e.message) 72 | 36 73 | return Promise.reject(errorMessage.join(', ')) 74 | 37 75 | }) 76 | 38 77 | } 78 | 39 79 | ​ 80 | 40 81 | //签到 82 | 41 83 | function sign_in(queryBody, access_token, remarks) { 84 | 42 85 | const sendMessage = [remarks] 86 | 43 87 | return axios(signinURL, { 88 | 44 89 | method: 'POST', 90 | 45 91 | data: queryBody, 92 | 46 93 | headers: { 94 | 47 95 | Authorization: 'Bearer ' + access_token, 96 | 48 97 | 'Content-Type': 'application/json' 98 | 49 99 | } 100 | 50 101 | }) 102 | 51 103 | .then(d => d.data) 104 | 52 105 | .then(json => { 106 | 53 107 | if (!json.success) { 108 | 54 109 | sendMessage.push('签到失败') 110 | 55 111 | return Promise.reject(sendMessage.join(', ')) 112 | 56 113 | } 114 | 57 115 | ​ 116 | 58 117 | sendMessage.push('签到成功') 118 | -------------------------------------------------------------------------------- /aliyundrive.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # @Time : 2023/4/8 10:23 4 | # ------------------------------- 5 | # cron "30 5 * * *" script-path=xxx.py,tag=匹配cron用 6 | # const $ = new Env('阿里云盘签到'); 7 | 8 | import json 9 | import requests 10 | import os 11 | 12 | ##变量export ali_refresh_token='' 13 | ali_refresh_token=os.getenv("ali_refresh_token").split('&') 14 | #refresh_token是一成不变的呢,我们使用它来更新签到需要的access_token 15 | #refresh_token获取教程:https://github.com/bighammer-link/Common-scripts/wiki/%E9%98%BF%E9%87%8C%E4%BA%91%E7%9B%98refresh_token%E8%8E%B7%E5%8F%96%E6%96%B9%E6%B3%95 16 | # ali_refresh_token = os.getenv("ali_refresh_token") 17 | # 推送加 18 | plustoken = os.getenv("plustoken") 19 | 20 | 21 | #推送函数 22 | def Push(contents): 23 | # 推送加 24 | headers = {'Content-Type': 'application/json'} 25 | json = {"token": plustoken, 'title': 'aliyun签到', 'content': contents.replace('\n', '
'), "template": "json"} 26 | resp = requests.post(f'http://www.pushplus.plus/send', json=json, headers=headers).json() 27 | print('push+推送成功' if resp['code'] == 200 else 'push+推送失败') 28 | 29 | #签到函数 30 | for i in range(len(ali_refresh_token)): 31 | print(f'开始帐号{i+1}签到') 32 | def daily_check(access_token): 33 | url = 'https://member.aliyundrive.com/v1/activity/sign_in_list' 34 | headers = { 35 | 'Authorization': access_token, 36 | 'Content-Type': 'application/json' 37 | } 38 | response = requests.post(url=url, headers=headers, json={}).text 39 | result = json.loads(response) 40 | sign_days = result['result']['signInCount'] 41 | data ={ 42 | 'signInDay':sign_days 43 | } 44 | url_reward ='https://member.aliyundrive.com/v1/activity/sign_in_reward' 45 | resp2 = requests.post(url=url_reward, headers=headers, data=json.dumps(data)) 46 | result2=json.loads(resp2.text) 47 | # print(result2) 48 | if 'success' in result: 49 | print('签到成功') 50 | for i, j in enumerate(result['result']['signInLogs']): 51 | if j['status'] == 'miss': 52 | day_json = result['result']['signInLogs'][i-1] 53 | # print(day_json) 54 | if not day_json['isReward']: 55 | contents = '签到成功,今日未获得奖励' 56 | else: 57 | contents = '本月累计签到{}天,今日签到获得{}{}'.format(result['result']['signInCount'], 58 | day_json['reward']['name'], 59 | day_json['reward']['description']) 60 | print(contents) 61 | 62 | return contents 63 | 64 | 65 | # 使用refresh_token更新access_token 66 | def update_token(refresh_token): 67 | url = 'https://auth.aliyundrive.com/v2/account/token' 68 | data = { 69 | 'grant_type': 'refresh_token', 70 | 'refresh_token': ali_refresh_token[i] 71 | } 72 | response = requests.post(url=url, json=data).json() 73 | access_token = response['access_token'] 74 | # print('获取的access_token为{}'.format(access_token)) 75 | return access_token 76 | 77 | 78 | def mian(): 79 | # print('更新access_token') 80 | access_token = update_token(ali_refresh_token) 81 | # print('更新成功,开始进行签到') 82 | content = daily_check(access_token) 83 | if plustoken != '': 84 | Push(content) 85 | 86 | if __name__ == '__main__': 87 | mian() 88 | -------------------------------------------------------------------------------- /dygy.js: -------------------------------------------------------------------------------- 1 | 2 | 1 3 | /** 4 | 2 5 | * 抖音果园 6 | 3 7 | * cron 17,49 8,12,17,23 * * * dygy.js 8 | 4 9 | * 10 | 5 11 | * 抖音果园 入口:抖音点击"我"- "抖音商城" - "果园" 有的号可能没有 ,暂时不知道原因 12 | 6 13 | * 3-29 签到任务、新手彩蛋、每日免费领水滴、三餐礼包、宝箱、盒子领取 初步完成 脚本刚写完,难免有bug,请及时反馈 ;ck有效期测试中 14 | 7 15 | * 3-29-2 更改签到逻辑 , 修复每天免费水滴bug 16 | 8 17 | * 3-30 修改整体逻辑,简化通知 18 | 9 19 | * 3-30-2 修复时间判断bug,增加脚本版本号(一半功能) 20 | 10 21 | * 3-31 修复选择宝箱bug,默认开启debug模式,方便排错,不需要的自觉行关闭 22 | 11 23 | * 4-1 修复几个循环bug ,关闭默认debug模式了 24 | 12 25 | * 26 | 13 27 | * 抓包记得先打开果园,然后再打开抓包软件,就能正常抓包了 关于抖音的任务都没网络,抓不到包 28 | 14 29 | * 30 | 15 31 | * 感谢所有测试人员 32 | 16 33 | * ========= 青龙 ========= 34 | 17 35 | * 变量格式: 36 | 18 37 | * 必填变量:export dygyCookies='账号1 ck @ 账号2 ck' 多个账号用 @分割 38 | 19 39 | * 可选变量:export dygyUA='你的UA' 40 | 20 41 | * 42 | 21 43 | * 抓 minigame.zijieapi.com 的包 浇一次水即可获取ck 44 | 22 45 | * 46 | 23 47 | */ 48 | 24 49 | const jsname = "抖音果园"; 50 | 25 51 | const $ = Env(jsname); 52 | 26 53 | const notify = $.isNode() ? require('./sendNotify') : ''; 54 | 27 55 | const Notify = 1; //0为关闭通知,1为打开通知,默认为1 56 | 28 57 | const debug = 0; //0为关闭调试,1为打开调试,默认为0 58 | 29 59 | ​ 60 | 30 61 | ​ 62 | 31 63 | let dygyCookies = ($.isNode() ? process.env.dygyCookies : $.getdata('dygyCookies')) || ""; 64 | 32 65 | let UA = ($.isNode() ? process.env.dygyUA : $.getdata('dygyUA')) || 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'; 66 | 33 67 | ​ 68 | 34 69 | let dygyCookiesArr = []; 70 | 35 71 | let msg = ''; 72 | 36 73 | let watering_unm = 1; 74 | 37 75 | let challenge_num_max = 1; 76 | 38 77 | let choose_gold_num = 1; 78 | 39 79 | ​ 80 | 40 81 | ​ 82 | 41 83 | ​ 84 | 42 85 | !(async () => { 86 | 43 87 | ​ 88 | 44 89 | if (!(await Envs())) //多账号分割 判断变量是否为空 初步处理多账号 90 | 45 91 | return; 92 | 46 93 | else { 94 | 47 95 | ​ 96 | 48 97 | console.log(`本地脚本4-1 , 远程脚本xxxx(等我会写了加上,哈哈哈哈,自己根据本地判断吧!)`); 98 | -------------------------------------------------------------------------------- /kuaishou.py: -------------------------------------------------------------------------------- 1 | # -*- coding=UTF-8 -*- 2 | # @Project QL_TimingScript 3 | # @fileName 快手极速版.py 4 | # @author Echo 5 | # @EditTime 2024/9/26 6 | from typing import * 7 | 8 | cookie = "kuaishou.api_st=Cg9rdWFpc2hvdS5hcGkuc3QSoAGdayy5Dc4sfKoFP-URnKPaLCli7TB63CK3hCz5w0wUR_rEHFlGPQe3z1y83fGlrs483oOMqArNbuzEqElo9cEATu1YuX_xf3lKL7zuY1rkBR8NNqVwF9la74aJVU28o3qIdbIOc9sDqS-hTCHJNLHYVnsCQVV1A7I5bZe6uY1e0IIzsigLpQONNxZG16zOuDouPbxNkGLjPU2a4R1sbFnTGhJThZNu-rRPH4Mw3KnOATqUKJgiIBIQzfWyyV5b2R6l4UQdbPmigu9kNTaO-FDruFMwaMk8KAUwAQ;" 9 | -------------------------------------------------------------------------------- /meituan.js: -------------------------------------------------------------------------------- 1 | # -*- coding:utf-8 -*- 2 | # ------------------------------- 3 | # @Author : github@arvinsblog https://github.com/arvinsblog/deepsea 4 | # @Time : 2024-10-1 13:10:56 5 | # 收集和修复能用的脚本 6 | # ------------------------------- 7 | """ 8 | 美团 外卖红包 9 | 自行捉包把meituan.com里面的token(一般在请求头里)填到变量 meituanCookie 中, 10 | 多账号换行或&隔开 11 | export meituanCookie="AgGZYgsTHsxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 12 | 13 | cron: 59 0,9,17 * * * 14 | const $ = new Env("美团领券"); 15 | """ 16 | import requests 17 | import re 18 | import os 19 | import time 20 | 21 | 22 | #分割变量 23 | if 'meituanCookie' in os.environ: 24 | meituanCookie = re.split("@|&",os.environ.get("meituanCookie")) 25 | print(f'查找到{len(meituanCookie)}个账号') 26 | else: 27 | meituanCookie = [''] 28 | print('无meituanCookie变量') 29 | 30 | #外卖 31 | def waim(ck): 32 | 33 | cookie = f"token={ck};" 34 | headers = {"Cookie": cookie, 35 | "X-Requested-With":"com.tencent.mm", 36 | "Sec-Fetch-Site":"same-site", 37 | "Sec-Fetch-Mode":"cors", 38 | "Sec-Fetch-Dest":"empty", 39 | "Content-Type":"application/json;", 40 | "User-Agent":"Mozilla/5.0 (Linux; Android 14; 2201122C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160027 MMWEBSDK/20231105 MMWEBID/2247 MicroMessenger/8.0.44.2502(0x28002C37) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxde8ac0a21135c07d"} 41 | url = 'https://mediacps.meituan.com/gundam/gundamGrabV4?gdBs=&yodaReady=h5&csecplatform=4&csecversion=2.4.0' 42 | data = {"gundamId":531693,"instanceId":"17211892932540.47486483758713405","actualLongitude":108938560,"actualLatitude":31805038,"needTj":False,"couponConfigIdOrderCommaString":"620969479,2189245219456,4298495230601,19537962926729,18884585587337,18276698358409,16307505791625,62530784070180,18774632104585,15298586739337,14306960212617,14314041377417,14316668846729,14315327914633,14306048017033,19404857475721,19699208618633,17136646619785,19202122187401,17260211208841,14673728045705,29350343345426,19531471061641,19201180107401,19695138112137,5513815065225,603844019,11983002534537,14684898984585,14686298178185,14407293272713,14686779867785,8650758750857,9285949325961,7458408104585,11980394594953,19483472822921,10385596023433,14578173543049,9137512120969,17800681685641,17802094051977,11131204469385,18416437363337,19473339646601,20046921138825,19737894257289,19713633550985,20446261150345,20501582447241,20101111087753,6080193102473,2430972598746,21425205740169,21421333283465,20326355698313,21792222151305,21792985055881,21794667037321,21792343196297,21792343130761,21792985449097,21792222282377,21792985383","couponAllConfigIdOrderString":"620969479,2189245219456,4298495230601,19537962926729,18884585587337,18276698358409,16307505791625,62530784070180,18774632104585,15298586739337,14306960212617,14314041377417,14316668846729,14315327914633,14306048017033,19404857475721,19699208618633,17136646619785,19202122187401,17260211208841,14673728045705,29350343345426,19531471061641,19201180107401,19695138112137,5513815065225,603844019,11983002534537,14684898984585,14686298178185,14407293272713,14686779867785,8650758750857,9285949325961,7458408104585,11980394594953,19483472822921,10385596023433,14578173543049,9137512120969,17800681685641,17802094051977,11131204469385,18416437363337,19473339646601,20046921138825,19737894257289,19713633550985,20446261150345,20501582447241,20101111087753,6080193102473,2430972598746,21425205740169,21421333283465,20326355698313,21792222151305,21792985055881,21794667037321,21792343196297,21792343130761,21792985449097,21792222282377,21792985383","ctype":"wxapp","platform":11,"app":-1,"h5Fingerprint":"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","appletAppid":"","appletExpoid":""} 43 | b = requests.post(url=url,json=data,headers=headers).json() 44 | print(f"获得{len(b['data']['allCoupons'])}张优惠券") 45 | for sj in b['data']['allCoupons']: 46 | print(f"{sj['couponName']}-{sj['amountLimit']}-{sj['couponAmount']}元-{sj['amountLimit']}-{sj['etime']}") 47 | 48 | 49 | #团购 50 | def tuangou(ck): 51 | 52 | cookie = f"token={ck};" 53 | headers = {"Cookie": cookie, 54 | "X-Requested-With":"com.tencent.mm", 55 | "Sec-Fetch-Site":"same-site", 56 | "Sec-Fetch-Mode":"cors", 57 | "Sec-Fetch-Dest":"empty", 58 | "Content-Type":"application/json;", 59 | "User-Agent":"Mozilla/5.0 (Linux; Android 14; 2201122C Build/UKQ1.230917.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160027 MMWEBSDK/20231105 MMWEBID/2247 MicroMessenger/8.0.44.2502(0x28002C37) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wxde8ac0a21135c07d"} 60 | url = 'https://mediacps.meituan.com/gundam/gundamGrabV4?gdBs=&yodaReady=h5&csecplatform=4&csecversion=2.4.0' 61 | data = {"gundamId":567871,"instanceId":"17236365795140.22172928381444668","actualLongitude":108938560,"actualLatitude":31805038,"needTj":False,"couponConfigIdOrderCommaString":"1819834260,1953473011,1893798091,1384683696,1137971534,1991988913,1651917378,1519357553","couponAllConfigIdOrderString":"1819834260,1953473011,1893798091","ctype":"wxapp","platform":11,"app":-1,"h5Fingerprint":"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","appletAppid":"","appletExpoid":""} 62 | b = requests.post(url=url,json=data,headers=headers).json() 63 | print(f"获得{len(b['data']['allCoupons'])}张优惠券") 64 | for sj in b['data']['allCoupons']: 65 | print(f"{sj['couponName']}-{sj['amountLimit']}-{sj['couponAmount']}元-{sj['amountLimit']}-{sj['etime']}") 66 | 67 | 68 | 69 | def main(): 70 | z = 1 71 | for ck in meituanCookie: 72 | try: 73 | print(f'登录第{z}个账号') 74 | print('----------------------') 75 | try: 76 | print('-----外卖-----') 77 | waim(ck) 78 | print('-------------') 79 | except Exception as e: 80 | print('错误') 81 | 82 | try: 83 | print('-----团购-----') 84 | tuangou(ck) 85 | print('-------------') 86 | except Exception as e: 87 | print('错误') 88 | 89 | print('----------------------') 90 | z = z + 1 91 | except Exception as e: 92 | print('未知错误') 93 | 94 | if __name__ == '__main__': 95 | try: 96 | main() 97 | except Exception as e: 98 | print('未知错误') 99 | -------------------------------------------------------------------------------- /mi sport.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # ------------------------------- 4 | # @Author : github@arvinsblog https://github.com/arvinsblog/deepsea 5 | # @Time : 2024-10-1 13:10:56 6 | # 收集和修复能用的脚本 7 | # ------------------------------- 8 | # cron "15 20 6,15 * * *" script-path=xxx.py,tag=匹配cron用 9 | # const $ = new Env('小米运动') 10 | 11 | #变量为misport 分别为手机号-密码-最小步数-最大步数 例子:18888888888-11111111-10000-20000 多号用#分割 zepplife(原小米运动)注册后绑定支付宝微信同步步数 12 | import random 13 | import re 14 | import time,os 15 | 16 | import requests 17 | 18 | 19 | class MiMotion: 20 | def __init__(self, check_items): 21 | self.check_items = check_items 22 | self.headers = { 23 | "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 9; MI 6 MIUI/20.6.18)" 24 | } 25 | 26 | # 获取时间方法1:公共时间戳服务(需注意服务的稳定性) 27 | # def get_time(self): 28 | # url = "http://worldtimeapi.org/api/timezone/Asia/Shanghai" 29 | # res = requests.get(url, headers=self.headers).json() 30 | # t = str(res['unixtime'])+'000' 31 | # return t 32 | 33 | # 获取时间方法2:直接使用 Python 的 time 模块获取当前时间戳,而无需调用外部 API 34 | def get_time(self): 35 | t = int(time.time() * 1000) 36 | return t 37 | 38 | def get_app_token(self, login_token): 39 | url = ( 40 | f"https://account-cn.huami.com/v1/client/app_tokens?" 41 | f"app_name=com.xiaomi.hm.health&" 42 | f"dn=api-user.huami.com%2Capi-mifit.huami.com%2Capp-analytics.huami.com&" 43 | f"login_token={login_token}" 44 | ) 45 | res = requests.get(url, headers=self.headers).json() 46 | return res["token_info"]["app_token"] 47 | 48 | @staticmethod 49 | def login(phone, password): 50 | url1 = f"https://api-user.huami.com/registrations/{phone}/tokens" 51 | headers = { 52 | "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8", 53 | "User-Agent": "MiFit/4.6.0 (iPhone; iOS 14.0.1; Scale/2.00)", 54 | } 55 | data1 = { 56 | "client_id": "HuaMi", 57 | "country_code": "CN", 58 | "password": f"{password}", 59 | "redirect_uri": "https://s3-us-west-2.amazonaws.com/hm-registration/successsignin.html", 60 | "state": "REDIRECTION", 61 | "token": "access", 62 | } 63 | r1 = requests.post(url1, data1, headers=headers, allow_redirects=False) 64 | location = r1.headers["Location"] 65 | try: 66 | code_pattern = re.compile("(?<=access=).*?(?=&)") 67 | code = code_pattern.findall(location)[0] 68 | except Exception as e: 69 | print(e) 70 | return 0, 0 71 | url2 = "https://account.huami.com/v2/client/login" 72 | third_name = "phone" if phone.find("@") < 0 else "email" 73 | data2 = { 74 | "app_name": "com.xiaomi.hm.health", 75 | "app_version": "6.3.5", 76 | "code": f"{code}", 77 | "country_code": "CN", 78 | "device_id": "10E2A98F-D36F-4DF1-A7B9-3FBD8FBEB800", 79 | "device_model": "phone", 80 | "grant_type": "access_token", 81 | "source": "com.xiaomi.hm.health", 82 | "third_name": f"{third_name}", 83 | } 84 | r2 = requests.post(url2, data2, headers=headers).json() 85 | login_token = r2["token_info"]["login_token"] 86 | user_id = r2["token_info"]["user_id"] 87 | return login_token, user_id 88 | 89 | def main(self): 90 | msg_all = "" 91 | for check_item in self.check_items: 92 | phone = str(check_item.get("phone")) 93 | if phone.find("@") < 0: 94 | phone = f"+86{phone}" 95 | password = str(check_item.get("password")) 96 | 97 | try: 98 | min_step = int(check_item.get("min_step", 10000)) 99 | except Exception as e: 100 | print("初始化步数失败: 已将最小值设置为 19999", e) 101 | min_step = 10000 102 | try: 103 | max_step = int(check_item.get("max_step", 19999)) 104 | except Exception as e: 105 | print("初始化步数失败: 已将最大值设置为 19999", e) 106 | max_step = 19999 107 | 108 | step = str(random.randint(min_step, max_step)) 109 | login_token, user_id = self.login(phone, password) 110 | 111 | if login_token == 0: 112 | msg = f"帐号信息: *******{phone[-4:]}\n修改状态: 登陆失败" 113 | 114 | else: 115 | t = self.get_time() 116 | app_token = self.get_app_token(login_token) 117 | today = time.strftime("%F") 118 | data_json = "%5B%7B%22data_hr%22%3A%22%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9L%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FVv%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0v%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9e%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0n%5C%2Fa%5C%2F%5C%2F%5C%2FS%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0b%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F1FK%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FR%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9PTFFpaf9L%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FR%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0j%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9K%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FOv%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2Fzf%5C%2F%5C%2F%5C%2F86%5C%2Fzr%5C%2FOv88%5C%2Fzf%5C%2FPf%5C%2F%5C%2F%5C%2F0v%5C%2FS%5C%2F8%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FSf%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2Fz3%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0r%5C%2FOv%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FS%5C%2F9L%5C%2Fzb%5C%2FSf9K%5C%2F0v%5C%2FRf9H%5C%2Fzj%5C%2FSf9K%5C%2F0%5C%2F%5C%2FN%5C%2F%5C%2F%5C%2F%5C%2F0D%5C%2FSf83%5C%2Fzr%5C%2FPf9M%5C%2F0v%5C%2FOv9e%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FS%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2Fzv%5C%2F%5C%2Fz7%5C%2FO%5C%2F83%5C%2Fzv%5C%2FN%5C%2F83%5C%2Fzr%5C%2FN%5C%2F86%5C%2Fz%5C%2F%5C%2FNv83%5C%2Fzn%5C%2FXv84%5C%2Fzr%5C%2FPP84%5C%2Fzj%5C%2FN%5C%2F9e%5C%2Fzr%5C%2FN%5C%2F89%5C%2F03%5C%2FP%5C%2F89%5C%2Fz3%5C%2FQ%5C%2F9N%5C%2F0v%5C%2FTv9C%5C%2F0H%5C%2FOf9D%5C%2Fzz%5C%2FOf88%5C%2Fz%5C%2F%5C%2FPP9A%5C%2Fzr%5C%2FN%5C%2F86%5C%2Fzz%5C%2FNv87%5C%2F0D%5C%2FOv84%5C%2F0v%5C%2FO%5C%2F84%5C%2Fzf%5C%2FMP83%5C%2FzH%5C%2FNv83%5C%2Fzf%5C%2FN%5C%2F84%5C%2Fzf%5C%2FOf82%5C%2Fzf%5C%2FOP83%5C%2Fzb%5C%2FMv81%5C%2FzX%5C%2FR%5C%2F9L%5C%2F0v%5C%2FO%5C%2F9I%5C%2F0T%5C%2FS%5C%2F9A%5C%2Fzn%5C%2FPf89%5C%2Fzn%5C%2FNf9K%5C%2F07%5C%2FN%5C%2F83%5C%2Fzn%5C%2FNv83%5C%2Fzv%5C%2FO%5C%2F9A%5C%2F0H%5C%2FOf8%5C%2F%5C%2Fzj%5C%2FPP83%5C%2Fzj%5C%2FS%5C%2F87%5C%2Fzj%5C%2FNv84%5C%2Fzf%5C%2FOf83%5C%2Fzf%5C%2FOf83%5C%2Fzb%5C%2FNv9L%5C%2Fzj%5C%2FNv82%5C%2Fzb%5C%2FN%5C%2F85%5C%2Fzf%5C%2FN%5C%2F9J%5C%2Fzf%5C%2FNv83%5C%2Fzj%5C%2FNv84%5C%2F0r%5C%2FSv83%5C%2Fzf%5C%2FMP%5C%2F%5C%2F%5C%2Fzb%5C%2FMv82%5C%2Fzb%5C%2FOf85%5C%2Fz7%5C%2FNv8%5C%2F%5C%2F0r%5C%2FS%5C%2F85%5C%2F0H%5C%2FQP9B%5C%2F0D%5C%2FNf89%5C%2Fzj%5C%2FOv83%5C%2Fzv%5C%2FNv8%5C%2F%5C%2F0f%5C%2FSv9O%5C%2F0ZeXv%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F1X%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9B%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2FTP%5C%2F%5C%2F%5C%2F1b%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F0%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F9N%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2F%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%5C%2Fv7%2B%22%2C%22date%22%3A%222021-08-07%22%2C%22data%22%3A%5B%7B%22start%22%3A0%2C%22stop%22%3A1439%2C%22value%22%3A%22UA8AUBQAUAwAUBoAUAEAYCcAUBkAUB4AUBgAUCAAUAEAUBkAUAwAYAsAYB8AYB0AYBgAYCoAYBgAYB4AUCcAUBsAUB8AUBwAUBIAYBkAYB8AUBoAUBMAUCEAUCIAYBYAUBwAUCAAUBgAUCAAUBcAYBsAYCUAATIPYD0KECQAYDMAYB0AYAsAYCAAYDwAYCIAYB0AYBcAYCQAYB0AYBAAYCMAYAoAYCIAYCEAYCYAYBsAYBUAYAYAYCIAYCMAUB0AUCAAUBYAUCoAUBEAUC8AUB0AUBYAUDMAUDoAUBkAUC0AUBQAUBwAUA0AUBsAUAoAUCEAUBYAUAwAUB4AUAwAUCcAUCYAUCwKYDUAAUUlEC8IYEMAYEgAYDoAYBAAUAMAUBkAWgAAWgAAWgAAWgAAWgAAUAgAWgAAUBAAUAQAUA4AUA8AUAkAUAIAUAYAUAcAUAIAWgAAUAQAUAkAUAEAUBkAUCUAWgAAUAYAUBEAWgAAUBYAWgAAUAYAWgAAWgAAWgAAWgAAUBcAUAcAWgAAUBUAUAoAUAIAWgAAUAQAUAYAUCgAWgAAUAgAWgAAWgAAUAwAWwAAXCMAUBQAWwAAUAIAWgAAWgAAWgAAWgAAWgAAWgAAWgAAWgAAWREAWQIAUAMAWSEAUDoAUDIAUB8AUCEAUC4AXB4AUA4AWgAAUBIAUA8AUBAAUCUAUCIAUAMAUAEAUAsAUAMAUCwAUBYAWgAAWgAAWgAAWgAAWgAAWgAAUAYAWgAAWgAAWgAAUAYAWwAAWgAAUAYAXAQAUAMAUBsAUBcAUCAAWwAAWgAAWgAAWgAAWgAAUBgAUB4AWgAAUAcAUAwAWQIAWQkAUAEAUAIAWgAAUAoAWgAAUAYAUB0AWgAAWgAAUAkAWgAAWSwAUBIAWgAAUC4AWSYAWgAAUAYAUAoAUAkAUAIAUAcAWgAAUAEAUBEAUBgAUBcAWRYAUA0AWSgAUB4AUDQAUBoAXA4AUA8AUBwAUA8AUA4AUA4AWgAAUAIAUCMAWgAAUCwAUBgAUAYAUAAAUAAAUAAAUAAAUAAAUAAAUAAAUAAAUAAAWwAAUAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAeSEAeQ8AcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcBcAcAAAcAAAcCYOcBUAUAAAUAAAUAAAUAAAUAUAUAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcCgAeQAAcAAAcAAAcAAAcAAAcAAAcAYAcAAAcBgAeQAAcAAAcAAAegAAegAAcAAAcAcAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcCkAeQAAcAcAcAAAcAAAcAwAcAAAcAAAcAIAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcCIAeQAAcAAAcAAAcAAAcAAAcAAAeRwAeQAAWgAAUAAAUAAAUAAAUAAAUAAAcAAAcAAAcBoAeScAeQAAegAAcBkAeQAAUAAAUAAAUAAAUAAAUAAAUAAAcAAAcAAAcAAAcAAAcAAAcAAAegAAegAAcAAAcAAAcBgAeQAAcAAAcAAAcAAAcAAAcAAAcAkAegAAegAAcAcAcAAAcAcAcAAAcAAAcAAAcAAAcA8AeQAAcAAAcAAAeRQAcAwAUAAAUAAAUAAAUAAAUAAAUAAAcAAAcBEAcA0AcAAAWQsAUAAAUAAAUAAAUAAAUAAAcAAAcAoAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAYAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcBYAegAAcAAAcAAAegAAcAcAcAAAcAAAcAAAcAAAcAAAeRkAegAAegAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAEAcAAAcAAAcAAAcAUAcAQAcAAAcBIAeQAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcBsAcAAAcAAAcBcAeQAAUAAAUAAAUAAAUAAAUAAAUBQAcBYAUAAAUAAAUAoAWRYAWTQAWQAAUAAAUAAAUAAAcAAAcAAAcAAAcAAAcAAAcAMAcAAAcAQAcAAAcAAAcAAAcDMAeSIAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcAAAcBQAeQwAcAAAcAAAcAAAcAMAcAAAeSoAcA8AcDMAcAYAeQoAcAwAcFQAcEMAeVIAaTYAbBcNYAsAYBIAYAIAYAIAYBUAYCwAYBMAYDYAYCkAYDcAUCoAUCcAUAUAUBAAWgAAYBoAYBcAYCgAUAMAUAYAUBYAUA4AUBgAUAgAUAgAUAsAUAsAUA4AUAMAUAYAUAQAUBIAASsSUDAAUDAAUBAAYAYAUBAAUAUAUCAAUBoAUCAAUBAAUAoAYAIAUAQAUAgAUCcAUAsAUCIAUCUAUAoAUA4AUB8AUBkAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAAfgAA%22%2C%22tz%22%3A32%2C%22did%22%3A%22DA932FFFFE8816E7%22%2C%22src%22%3A24%7D%5D%2C%22summary%22%3A%22%7B%5C%22v%5C%22%3A6%2C%5C%22slp%5C%22%3A%7B%5C%22st%5C%22%3A1628296479%2C%5C%22ed%5C%22%3A1628296479%2C%5C%22dp%5C%22%3A0%2C%5C%22lt%5C%22%3A0%2C%5C%22wk%5C%22%3A0%2C%5C%22usrSt%5C%22%3A-1440%2C%5C%22usrEd%5C%22%3A-1440%2C%5C%22wc%5C%22%3A0%2C%5C%22is%5C%22%3A0%2C%5C%22lb%5C%22%3A0%2C%5C%22to%5C%22%3A0%2C%5C%22dt%5C%22%3A0%2C%5C%22rhr%5C%22%3A0%2C%5C%22ss%5C%22%3A0%7D%2C%5C%22stp%5C%22%3A%7B%5C%22ttl%5C%22%3A18272%2C%5C%22dis%5C%22%3A10627%2C%5C%22cal%5C%22%3A510%2C%5C%22wk%5C%22%3A41%2C%5C%22rn%5C%22%3A50%2C%5C%22runDist%5C%22%3A7654%2C%5C%22runCal%5C%22%3A397%2C%5C%22stage%5C%22%3A%5B%7B%5C%22start%5C%22%3A327%2C%5C%22stop%5C%22%3A341%2C%5C%22mode%5C%22%3A1%2C%5C%22dis%5C%22%3A481%2C%5C%22cal%5C%22%3A13%2C%5C%22step%5C%22%3A680%7D%2C%7B%5C%22start%5C%22%3A342%2C%5C%22stop%5C%22%3A367%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A2295%2C%5C%22cal%5C%22%3A95%2C%5C%22step%5C%22%3A2874%7D%2C%7B%5C%22start%5C%22%3A368%2C%5C%22stop%5C%22%3A377%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A1592%2C%5C%22cal%5C%22%3A88%2C%5C%22step%5C%22%3A1664%7D%2C%7B%5C%22start%5C%22%3A378%2C%5C%22stop%5C%22%3A386%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A1072%2C%5C%22cal%5C%22%3A51%2C%5C%22step%5C%22%3A1245%7D%2C%7B%5C%22start%5C%22%3A387%2C%5C%22stop%5C%22%3A393%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A1036%2C%5C%22cal%5C%22%3A57%2C%5C%22step%5C%22%3A1124%7D%2C%7B%5C%22start%5C%22%3A394%2C%5C%22stop%5C%22%3A398%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A488%2C%5C%22cal%5C%22%3A19%2C%5C%22step%5C%22%3A607%7D%2C%7B%5C%22start%5C%22%3A399%2C%5C%22stop%5C%22%3A414%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A2220%2C%5C%22cal%5C%22%3A120%2C%5C%22step%5C%22%3A2371%7D%2C%7B%5C%22start%5C%22%3A415%2C%5C%22stop%5C%22%3A427%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A1268%2C%5C%22cal%5C%22%3A59%2C%5C%22step%5C%22%3A1489%7D%2C%7B%5C%22start%5C%22%3A428%2C%5C%22stop%5C%22%3A433%2C%5C%22mode%5C%22%3A1%2C%5C%22dis%5C%22%3A152%2C%5C%22cal%5C%22%3A4%2C%5C%22step%5C%22%3A238%7D%2C%7B%5C%22start%5C%22%3A434%2C%5C%22stop%5C%22%3A444%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A2295%2C%5C%22cal%5C%22%3A95%2C%5C%22step%5C%22%3A2874%7D%2C%7B%5C%22start%5C%22%3A445%2C%5C%22stop%5C%22%3A455%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A1592%2C%5C%22cal%5C%22%3A88%2C%5C%22step%5C%22%3A1664%7D%2C%7B%5C%22start%5C%22%3A456%2C%5C%22stop%5C%22%3A466%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A1072%2C%5C%22cal%5C%22%3A51%2C%5C%22step%5C%22%3A1245%7D%2C%7B%5C%22start%5C%22%3A467%2C%5C%22stop%5C%22%3A477%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A1036%2C%5C%22cal%5C%22%3A57%2C%5C%22step%5C%22%3A1124%7D%2C%7B%5C%22start%5C%22%3A478%2C%5C%22stop%5C%22%3A488%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A488%2C%5C%22cal%5C%22%3A19%2C%5C%22step%5C%22%3A607%7D%2C%7B%5C%22start%5C%22%3A489%2C%5C%22stop%5C%22%3A499%2C%5C%22mode%5C%22%3A4%2C%5C%22dis%5C%22%3A2220%2C%5C%22cal%5C%22%3A120%2C%5C%22step%5C%22%3A2371%7D%2C%7B%5C%22start%5C%22%3A500%2C%5C%22stop%5C%22%3A511%2C%5C%22mode%5C%22%3A3%2C%5C%22dis%5C%22%3A1268%2C%5C%22cal%5C%22%3A59%2C%5C%22step%5C%22%3A1489%7D%2C%7B%5C%22start%5C%22%3A512%2C%5C%22stop%5C%22%3A522%2C%5C%22mode%5C%22%3A1%2C%5C%22dis%5C%22%3A152%2C%5C%22cal%5C%22%3A4%2C%5C%22step%5C%22%3A238%7D%5D%7D%2C%5C%22goal%5C%22%3A8000%2C%5C%22tz%5C%22%3A%5C%2228800%5C%22%7D%22%2C%22source%22%3A24%2C%22type%22%3A0%7D%5D" 119 | find_date = re.compile(r".*?date%22%3A%22(.*?)%22%2C%22data.*?") 120 | find_step = re.compile(r".*?ttl%5C%22%3A(.*?)%2C%5C%22dis.*?") 121 | data_json = re.sub(find_date.findall(data_json)[0], today, data_json) 122 | data_json = re.sub( 123 | find_step.findall(data_json)[0], step, str(data_json) 124 | ) 125 | url = f"https://api-mifit-cn.huami.com/v1/data/band_data.json?&t={t}" 126 | data = ( 127 | f"userid={user_id}&last_sync_data_time=1628256960&" 128 | f"device_type=0&last_deviceid=DA932FFFFE8816E7&data_json={data_json}" 129 | ) 130 | headers = { 131 | "apptoken": app_token, 132 | "Content-Type": "application/x-www-form-urlencoded", 133 | } 134 | res = requests.post(url, data, headers=headers).json() 135 | msg = f"帐号信息: *******{phone[-4:]}\n修改状态: {res['message']}\n修改步数: {step}" 136 | msg_all += msg + "\n\n" 137 | return msg_all 138 | 139 | def string_to_dict(s): 140 | parts = s.split('-') 141 | result_dict = {} 142 | result_dict['phone'] = parts[0] 143 | result_dict['password'] = parts[1] 144 | result_dict['min_step'] = int(parts[2]) 145 | result_dict['max_step'] = int(parts[3]) 146 | return result_dict 147 | 148 | def start(): 149 | s = os.getenv("misport").split('#') 150 | print(f'共{len(s)}个账号') 151 | for i in range(len(s)): 152 | item =s[i] 153 | _check_items = [string_to_dict(item)] 154 | result = MiMotion(check_items=_check_items).main() 155 | print(result) 156 | print('*'*15) 157 | 158 | 159 | 160 | if __name__ == "__main__": 161 | start() 162 | -------------------------------------------------------------------------------- /tianyiyun.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # @Time : 2023/4/8 9:23 4 | #作者:https://www.52pojie.cn/forum.php?mod=viewthread&tid=1784111&highlight=%C7%A9%B5%BD 5 | # ------------------------------- 6 | # cron "30 4 * * *" script-path=xxx.py,tag=匹配cron用 7 | # const $ = new Env('天翼云盘签到'); 8 | 9 | # #!/usr/bin/python3 10 | # # -- coding: utf-8 -- 11 | # # @Time : 2023/4/4 9:23 12 | # #作者:https://www.52pojie.cn/thread-1231190-1-1.html 13 | # # ------------------------------- 14 | # # cron "30 4 * * *" script-path=xxx.py,tag=匹配cron用 15 | # # const $ = new Env('天翼云盘签到'); 16 | # 17 | 18 | 19 | import time 20 | import re 21 | import json 22 | import base64 23 | import hashlib 24 | import urllib.parse, hmac 25 | import rsa 26 | import requests 27 | import random 28 | import os 29 | 30 | # 变量 ty_username(手机号),ty_password(密码) 31 | ty_username = os.getenv("ty_username").split('&') 32 | ty_password = os.getenv("ty_password").split('&') 33 | 34 | # 推送加 35 | plustoken = os.getenv("plustoken") 36 | 37 | 38 | BI_RM = list("0123456789abcdefghijklmnopqrstuvwxyz") 39 | 40 | B64MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 41 | 42 | s = requests.Session() 43 | 44 | 45 | for i in range(len(ty_username)): 46 | print(f'开始执行帐号{i+1}') 47 | 48 | #推送函数 49 | def Push(contents): 50 | # 推送加 51 | headers = {'Content-Type': 'application/json'} 52 | json = {"token": plustoken, 'title': '天翼云签到', 'content': contents.replace('\n', '
'), "template": "json"} 53 | resp = requests.post(f'http://www.pushplus.plus/send', json=json, headers=headers).json() 54 | print('push+推送成功' if resp['code'] == 200 else 'push+推送失败') 55 | def int2char(a): 56 | return BI_RM[a] 57 | 58 | 59 | def b64tohex(a): 60 | d = "" 61 | e = 0 62 | c = 0 63 | for i in range(len(a)): 64 | if list(a)[i] != "=": 65 | v = B64MAP.index(list(a)[i]) 66 | if 0 == e: 67 | e = 1 68 | d += int2char(v >> 2) 69 | c = 3 & v 70 | elif 1 == e: 71 | e = 2 72 | d += int2char(c << 2 | v >> 4) 73 | c = 15 & v 74 | elif 2 == e: 75 | e = 3 76 | d += int2char(c) 77 | d += int2char(v >> 2) 78 | c = 3 & v 79 | else: 80 | e = 0 81 | d += int2char(c << 2 | v >> 4) 82 | d += int2char(15 & v) 83 | if e == 1: 84 | d += int2char(c << 2) 85 | return d 86 | 87 | 88 | def rsa_encode(j_rsakey, string): 89 | rsa_key = f"-----BEGIN PUBLIC KEY-----\n{j_rsakey}\n-----END PUBLIC KEY-----" 90 | pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(rsa_key.encode()) 91 | result = b64tohex((base64.b64encode(rsa.encrypt(f'{string}'.encode(), pubkey))).decode()) 92 | return result 93 | 94 | 95 | def calculate_md5_sign(params): 96 | return hashlib.md5('&'.join(sorted(params.split('&'))).encode('utf-8')).hexdigest() 97 | 98 | 99 | def login(ty_username, ty_password): 100 | # https://m.cloud.189.cn/login2014.jsp?redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html 101 | url = "" 102 | urlToken = "https://m.cloud.189.cn/udb/udb_login.jsp?pageId=1&pageKey=default&clientType=wap&redirectURL=https://m.cloud.189.cn/zhuanti/2021/shakeLottery/index.html" 103 | s = requests.Session() 104 | r = s.get(urlToken) 105 | pattern = r"https?://[^\s'\"]+" # 匹配以http或https开头的url 106 | match = re.search(pattern, r.text) # 在文本中搜索匹配 107 | if match: # 如果找到匹配 108 | url = match.group() # 获取匹配的字符串 109 | # print(url) # 打印url 110 | else: # 如果没有找到匹配 111 | print("没有找到url") 112 | 113 | r = s.get(url) 114 | # print(r.text) 115 | pattern = r"]*href=\"([^\"]+)\"" # 匹配id为j-tab-login-link的a标签,并捕获href引号内的内容 116 | match = re.search(pattern, r.text) # 在文本中搜索匹配 117 | if match: # 如果找到匹配 118 | href = match.group(1) # 获取捕获的内容 119 | # print("href:" + href) # 打印href链接 120 | else: # 如果没有找到匹配 121 | print("没有找到href链接") 122 | 123 | r = s.get(href) 124 | captchaToken = re.findall(r"captchaToken' value='(.+?)'", r.text)[0] 125 | lt = re.findall(r'lt = "(.+?)"', r.text)[0] 126 | returnUrl = re.findall(r"returnUrl= '(.+?)'", r.text)[0] 127 | paramId = re.findall(r'paramId = "(.+?)"', r.text)[0] 128 | j_rsakey = re.findall(r'j_rsaKey" value="(\S+)"', r.text, re.M)[0] 129 | s.headers.update({"lt": lt}) 130 | 131 | username = rsa_encode(j_rsakey, ty_username[i]) 132 | password = rsa_encode(j_rsakey,ty_password[i]) 133 | url = "https://open.e.189.cn/api/logbox/oauth2/loginSubmit.do" 134 | headers = { 135 | 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/76.0', 136 | 'Referer': 'https://open.e.189.cn/', 137 | } 138 | data = { 139 | "appKey": "cloud", 140 | "accountType": '01', 141 | "userName": f"{{RSA}}{username}", 142 | "password": f"{{RSA}}{password}", 143 | "validateCode": "", 144 | "captchaToken": captchaToken, 145 | "returnUrl": returnUrl, 146 | "mailSuffix": "@189.cn", 147 | "paramId": paramId 148 | } 149 | r = s.post(url, data=data, headers=headers, timeout=5) 150 | if (r.json()['result'] == 0): 151 | print(r.json()['msg']) 152 | else: 153 | print(r.json()['msg']) 154 | redirect_url = r.json()['toUrl'] 155 | r = s.get(redirect_url) 156 | return s 157 | 158 | 159 | def main(): 160 | s = login(ty_username, ty_password) 161 | rand = str(round(time.time() * 1000)) 162 | surl = f'https://api.cloud.189.cn/mkt/userSign.action?rand={rand}&clientType=TELEANDROID&version=8.6.3&model=SM-G930K' 163 | url = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN&activityId=ACT_SIGNIN' 164 | url2 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_SIGNIN_PHOTOS&activityId=ACT_SIGNIN' 165 | url3 = f'https://m.cloud.189.cn/v2/drawPrizeMarketDetails.action?taskId=TASK_2022_FLDFS_KJ&activityId=ACT_SIGNIN' 166 | headers = { 167 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6', 168 | "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1", 169 | "Host": "m.cloud.189.cn", 170 | "Accept-Encoding": "gzip, deflate", 171 | } 172 | response = s.get(surl, headers=headers) 173 | netdiskBonus = response.json()['netdiskBonus'] 174 | if (response.json()['isSign'] == "false"): 175 | print(f"未签到,签到获得{netdiskBonus}M空间") 176 | res1 = f"未签到,签到获得{netdiskBonus}M空间" 177 | else: 178 | print(f"已经签到过了,签到获得{netdiskBonus}M空间") 179 | res1 = f"已经签到过了,签到获得{netdiskBonus}M空间" 180 | 181 | headers = { 182 | 'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G930K Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.136 Mobile Safari/537.36 Ecloud/8.6.3 Android/22 clientId/355325117317828 clientModel/SM-G930K imsi/460071114317824 clientChannelId/qq proVersion/1.0.6', 183 | "Referer": "https://m.cloud.189.cn/zhuanti/2016/sign/index.jsp?albumBackupOpened=1", 184 | "Host": "m.cloud.189.cn", 185 | "Accept-Encoding": "gzip, deflate", 186 | } 187 | response = s.get(url, headers=headers) 188 | if ("errorCode" in response.text): 189 | print(response.text) 190 | res2 = "" 191 | else: 192 | description = response.json()['description'] 193 | print(f"抽奖获得{description}") 194 | res2 = f"抽奖获得{description}" 195 | response = s.get(url2, headers=headers) 196 | if ("errorCode" in response.text): 197 | print(response.text) 198 | res3 = "" 199 | else: 200 | description = response.json()['description'] 201 | print(f"抽奖获得{description}") 202 | res3 = f"抽奖获得{description}" 203 | 204 | response = s.get(url3, headers=headers) 205 | if ("errorCode" in response.text): 206 | print(response.text) 207 | res4 = "" 208 | else: 209 | description = response.json()['description'] 210 | print(f"链接3抽奖获得{description}") 211 | res4 = f"链接3抽奖获得{description}" 212 | message = res1+res2+res3+res4 213 | Push(contents=message) 214 | 215 | 216 | def lambda_handler(event, context): # aws default 217 | main() 218 | 219 | 220 | def main_handler(event, context): # tencent default 221 | main() 222 | 223 | 224 | def handler(event, context): # aliyun default 225 | main() 226 | 227 | 228 | if __name__ == "__main__": 229 | time.sleep(random.randint(5, 30)) 230 | main() 231 | -------------------------------------------------------------------------------- /weibo_checkin.py: -------------------------------------------------------------------------------- 1 | # 更新日期:2023.4.13 2 | # 版本:1.0 3 | import json 4 | import requests 5 | import re 6 | import time 7 | import random 8 | import os 9 | # 在脚本开始时等待 0 到 3600 秒 (0 到# 1 小时) 10 | sleep_time = random.randint(5,60) 11 | time.sleep(sleep_time) 12 | 13 | weibo_cookie=os.getenv("weibo_cookie") 14 | weibo_cookies = weibo_cookie.split('&') 15 | weibo_chaohua_id = os.getenv("weibo_chaohua_id") 16 | super_topic_active_ids = weibo_chaohua_id.split('&') 17 | 18 | # 配置 headers 和 cookies 19 | user_agents = [ 20 | "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36", 21 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.54" 22 | ] 23 | 24 | # 这里是选择Server酱的推送方式,填写Sendkey,不想使用的话直接忽略 25 | #SCKEY = 'SCT11080TKytAWNgus1dau3OtCGiOy56W' 26 | SCKEY = '' 27 | # 推送PLUS的token 28 | Token = 'f149797c8f0b47e09716489133c3a383' 29 | 30 | def push(content): 31 | print(content) 32 | if SCKEY != '': 33 | url = "https://sctapi.ftqq.com/{}.send?title={}&desp={}".format(SCKEY, '微博超话签到', content) 34 | requests.post(url) 35 | print('推送完成') 36 | elif Token != '': 37 | headers = {'Content-Type': 'application/json'} 38 | json = {"token": Token, 'title': '微博超话签到', 'content': content, "template": "json"} 39 | resp = requests.post(f'http://www.pushplus.plus/send', json=json, headers=headers).json() 40 | print('push+推送成功' if resp['code'] == 200 else 'push+推送失败') 41 | else: 42 | print('未使用消息推送推送!') 43 | 44 | 45 | def random_wait(min_wait=5, max_wait=20): 46 | wait_time = random.randint(min_wait, max_wait) 47 | time.sleep(wait_time) 48 | 49 | def check_in(cookies, active_id): 50 | global content 51 | header = {'cookie': cookies, 52 | "User-Agent": random.choice(user_agents), 53 | "Referer": "https://weibo.com/"} 54 | header["User-Agent"] = random.choice(user_agents) 55 | url = 'https://weibo.com/p/{}/super_index'.format(active_id) 56 | session = requests.Session() 57 | random_wait() 58 | #response = session.get(url, headers=header) 59 | #print(f"找到 active_id: {active_id}") 60 | # 在这里处理 active_id 61 | checkin_url = f"https://weibo.com/p/aj/general/button?id={active_id}&api=http://i.huati.weibo.com/aj/super/checkin" 62 | checkin_response = session.get(checkin_url, headers=header) 63 | # 获取超话社区名字 64 | html_info = requests.get(url=url, headers=header).text 65 | info = "".join(re.findall('(.*?)', html_info, re.S)) 66 | info = info.replace('—新浪微博超话社区', '') 67 | checkin_result = json.loads(checkin_response.text) 68 | #print(checkin_result) 69 | content = content + info + ' ' + checkin_result['msg'] + '\n' 70 | 71 | if __name__ == "__main__": 72 | print("开始运行微博超话签到程序...") 73 | 74 | random.shuffle(weibo_cookies) # 随机化签到顺序 75 | content = '' 76 | for cookies in weibo_cookies: 77 | random_wait() 78 | try: 79 | random.shuffle(super_topic_active_ids) # 随机化签到顺序 80 | for active_id in super_topic_active_ids: 81 | check_in(cookies, active_id) 82 | random_wait() # 在签到之间添加随机等待时间 83 | 84 | header = {'cookie': cookies, 85 | "User-Agent": random.choice(user_agents), 86 | "Referer": "https://weibo.com/"} 87 | header["User-Agent"] = random.choice(user_agents) 88 | response1 = requests.get("https://security.weibo.com/account/security", headers=header).text 89 | response2 = "".join(re.findall('

(.*?)

', response1, re.S)) 90 | response2 = response2.replace('

', '') 91 | response2 = response2.replace('

', '') 92 | response2 = response2.replace(' 1个未开启 ', '') 93 | random_wait() 94 | response1 = requests.get("https://account.weibo.com/set/index", headers=header).text 95 | response3 = "".join(re.findall("'nick':'(.*?)',", response1, re.S)) 96 | response3 = response3.replace(':', '') 97 | response3 = response3.replace("'nick''", '') 98 | response3 = response3.replace("',", '') 99 | content = content + "登录名:{},昵称:{} 完成超话签到。\n\n".format(response2,response3) 100 | 101 | 102 | except: 103 | content =content + '签到失败,可能是cookie失效,请及时更新cookie。\n\n' 104 | 105 | push(content) 106 | print("已完成签到.") 107 | -------------------------------------------------------------------------------- /woniuyuedu.js: -------------------------------------------------------------------------------- 1 | /* 2 | 微信阅读 3 | 阅读入口,复制链接微信打开 4 | https://lh100-1253806495.cos.ap-beijing.myqcloud.com/index.html?carteamflg=100036&extflg=undefined变量名称:woniu 5 | 6 | 抓包搜索关键词 userid 和passport passport@userid 7 | 多账号换行即可 8 | 黄鸟在文本里面可以抓到userid 和passport 9 | 10 | 每2小时刷新一轮50篇文章 11 | 每日50篇 不上线 12 | 定时一小时一次 一天跑6次 13 | 14 | */ 15 | 16 | 17 | const $ = new Env("蜗牛阅读"); 18 | const notify = $.isNode() ? require('./sendNotify') : ''; 19 | let envSplitor = ['@', '\n'] 20 | let httpResult, httpReq, httpResp 21 | let ckName = 'woniu' 22 | let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ''; 23 | let userList = [] 24 | let userIdx = 0 25 | let userCount = 0 26 | var msg = '' 27 | let newurl = "https://api.shandian.shandianyueche.com/task/Task.php" 28 | /////////////////////////////////////////////////////////////////// 29 | class UserInfo { 30 | constructor(str,id) { 31 | this.index = ++userIdx, 32 | this.idx = `账号[${this.index}] `, 33 | this.ck = str//.split('#'), this.u = this.ck[0], this.t = this.ck[1] 34 | this.userid=id 35 | } 36 | 37 | async getreadurl(id) { 38 | try { 39 | //用户领取任务 40 | // let t = Date.now() 41 | // this.ul = newurl; 42 | let body = {act:"userDrawReadTaskBaidu",passport:this.ck,task_id:id} 43 | let urlObject = popu(newurl, body,this.ck) 44 | //let urlObject = popu(this.ul, body,this.ck) 45 | await httpRequest('post', urlObject) 46 | let result = httpResult; 47 | if ( result && result.code==='0') { 48 | console.log(result.msg+",任务id:"+result.data.user_task_id) 49 | await this.read(result.data.user_task_id) 50 | 51 | } 52 | /* 53 | "1" == result.info.type && 1 !== this.dx && (console.log(`文章获取成功 `), this.b = 1, await $.wait(1000), await this.readfinish()), 54 | "3" == result.info.type && 1 !== this.dx && (console.log(`已限制阅读 尝试过验证`), this.x = result.info.key, this.c = result.info.url.split("/s/")[1], this.b = 2, 55 | await $.wait(6000), await this.readfinish()); 56 | */ 57 | } catch (e) { 58 | console.log(e) 59 | } 60 | } 61 | 62 | //提交任务 63 | async read(user_task_id) { 64 | try { 65 | let t = Date.now() 66 | //readurl = decodeURIComponent(readurl); 67 | var sj = Math.random() * 20000+ 8000 68 | 69 | //等待时间提交 70 | await $.wait(sj) 71 | let body = {act:"finishUserReadTaskBaidu",passport:this.ck,user_task_id:user_task_id} 72 | let urlObject = popu(newurl, body,this.ck) 73 | await httpRequest('post', urlObject) 74 | let result= httpResult; 75 | if(result && result.code==='0'){ 76 | //获取用户阅读金额 77 | console.log('阅读成功金币+100') 78 | }else{ 79 | console.log(result.meg) 80 | } 81 | } catch (e) { 82 | console.log(e) 83 | } finally { 84 | return Promise.resolve(1); 85 | } 86 | } 87 | async readfinish() { 88 | try { 89 | 90 | this.url=newurl+'/tuijian/do_read?for=&zs=&pageshow=&r=0.7882316111246435&jkey='+this.jkey 91 | let body = ``; 92 | let urlObject = popu(this.url, body,this.ck) 93 | //console.log(urlObject) 94 | await httpRequest('get', urlObject) 95 | let result = httpResult; 96 | if (result && result.success_msg) { 97 | console.log(result.success_msg) 98 | } else { 99 | console.log(result) 100 | } 101 | 102 | /* 103 | "success" == result.msg && console.log(`增加金币-> ${result.info.num} 阅读次数 ${result.info.read_num} 当前金币 ${result.info.read_money}`), 104 | result.code > 200 && (console.log(`已达到阅读量 等待刷新`), this.fx = 1); 105 | */ 106 | } catch (e) { 107 | console.log(e) 108 | } finally { 109 | return Promise.resolve(1); 110 | } 111 | } 112 | async getreadinfo() { 113 | try { 114 | let t = Date.now() 115 | let url = newurl; 116 | let body = {act:"getReadTaskListBaidu",passport:this.ck} 117 | let urlObject = popu(url, body,'') 118 | await httpRequest('post', urlObject) 119 | let result = httpResult; 120 | if(result && result.ret==='succ'){ 121 | return result.task_list 122 | } 123 | } catch (e) { 124 | console.log(e) 125 | } 126 | } 127 | 128 | async getmoney() { 129 | try { 130 | let t = Date.now() 131 | let url = newurl; 132 | let body = {act:"getUserMoneyAccounts",passport:this.ck} 133 | let urlObject = popu(url, body,this.ck) 134 | await httpRequest('get', urlObject) 135 | let result = httpResult; 136 | if (result && result.ret==='succ') { 137 | result = result.money_account 138 | console.log(`\n当前账号余额 ${result.read_money}分 \n`) 139 | } 140 | } catch (e) { 141 | console.log(e) 142 | } finally { 143 | return Promise.resolve(1); 144 | } 145 | } 146 | 147 | 148 | async withdrawal() { 149 | try { 150 | let t = Date.now() 151 | let url = newurl+`/withdrawal`; 152 | let body = ``; 153 | let urlObject = popu(url, body,this.ck) 154 | await httpRequest('get', urlObject) 155 | let result = httpResult; 156 | if (result.data.user) { 157 | result = result.data.user 158 | console.log(`\n当前账号余额 ${result.score}分 \n`) 159 | if (this.ck.indexOf('##') != -1) return 160 | this.f = parseInt(result.score)//= Number(Math.floor(result.info.sum / 1000)) 161 | /* 162 | if (this.f < 3) console.log(`\n 不满足0.3 提现门槛\n`) 163 | this.f >= 3 && this.f < 5 && (this.cash = .3), this.f >= 10 && this.f < 20 && (this.cash = 1), this.f >= 20 && this.f < 50 && (this.cash = 2), 164 | this.f >= 50 && this.f < 100 && (this.cash = 2), this.f >= 100 && this.f < 200 && (this.cash = 10), this.f >= 200 && (this.cash = 20) 165 | if (this.f >= 3) console.log(`\n可以提现 ${result.info.sum}金币 去提现 ${this.cash} 元\n`), await this.exchange() 166 | */ 167 | if (this.f < 30) { 168 | console.log(`不满足0.3 提现门槛`) 169 | } else { 170 | console.log(`去提现${this.f/100}元。。。。。。`) 171 | await this.doWithdraw(this.f) 172 | } 173 | } 174 | } catch (e) { 175 | console.log(e) 176 | } finally { 177 | return Promise.resolve(1); 178 | } 179 | } 180 | async doWithdraw(tx) { 181 | try { 182 | let t = Date.now() 183 | let url = newurl+`/withdrawal/doWithdraw`; 184 | let body = `amount=` + tx; 185 | let urlObject = popu(url, body,this.ck) 186 | await httpRequest('post', urlObject) 187 | let result = httpResult; 188 | console.log(result) 189 | 190 | } catch (e) { 191 | console.log(e) 192 | } finally { 193 | return Promise.resolve(1); 194 | } 195 | } 196 | 197 | async gettasklist() { 198 | try { 199 | let tasklist=await this.getreadinfo() 200 | if (tasklist && tasklist.length>0) { 201 | //await this.getreadurl(tasklist[0].id) 202 | for (let i = 0;i< tasklist.length;i++) { 203 | //console.log(tasklist[i].id) 204 | await this.getreadurl(tasklist[i].id) 205 | } 206 | // await this.getreadinfo() 207 | //await $.wait(15000) 208 | 209 | } 210 | 211 | } catch (e) { 212 | console.log(e) 213 | } 214 | } 215 | 216 | async task() { 217 | try { 218 | 219 | let abc = [...new Array(15).keys()] 220 | console.log(`\n=========== ${this.idx} 开始阅读文章 ===========\n`) 221 | 222 | 223 | 224 | for(let i=0;i<=10;i++){ 225 | await this.gettasklist() 226 | } 227 | 228 | 229 | 230 | // let tasklist=await this.getreadinfo() 231 | // if (tasklist && tasklist.length>0) { 232 | // for (let i = 0;i< tasklist.length;i++) { 233 | // //console.log(tasklist[i].id) 234 | // await this.getreadurl(3607) 235 | // } 236 | // // await this.getreadinfo() 237 | // //await $.wait(15000) 238 | 239 | // } 240 | // await this.withdrawal() 241 | 242 | } catch (e) { 243 | console.log(e) 244 | } finally { 245 | return Promise.resolve(1); 246 | } 247 | } 248 | } 249 | 250 | 251 | !(async () => { 252 | if (typeof $request !== "undefined") { 253 | await GetRewrite() 254 | } else { 255 | 256 | if (!(await checkEnv())) { 257 | console.log('环境变量错误,检查环境变量后在执行') 258 | return; 259 | } 260 | 261 | if (userList.length > 0) { 262 | 263 | // console.log('获取到newurl:'+newurl) 264 | for (let user of userList) { 265 | await gethost(user.ck,user.userid) 266 | await user.task() 267 | } 268 | if (msg) await notify.sendNotify('微信阅读检测文章',msg) 269 | } 270 | } 271 | })() 272 | .catch((e) => console.log(e)) 273 | .finally(() => $.done()) 274 | 275 | /////////////////////////////////////////////////////////////////// 276 | 277 | async function gethost(ck,userid) { 278 | //构建请求体 279 | try { 280 | let t = Date.now() 281 | let url = 'https://api.shandian.shandianyueche.com/task/Task.php'; 282 | let body = {act:"getUserInfoByID",passport:ck,userid:userid} 283 | let urlObject = popugethost(url, body) 284 | await httpRequest('post', urlObject) 285 | let result = httpResult; 286 | if (result.ret==='succ') { 287 | console.log('账号登录成功') 288 | } 289 | } catch (e) { 290 | console.log(e) 291 | } finally { 292 | return Promise.resolve(1); 293 | } 294 | } 295 | 296 | //获取环境变量的ck 放到userList中去 297 | async function checkEnv() { 298 | if (userCookie) { 299 | for(let userCookies of userCookie.split(envSplitor[1])){ 300 | 301 | let aa=userCookies.split(envSplitor[0]) 302 | userList.push(new UserInfo(aa[0],aa[1])) 303 | } 304 | userCount = userList.length 305 | } else { 306 | console.log(`找到[${ckName}] 变量 配置错误`) 307 | return false 308 | } 309 | console.log(`找到[${ckName}] 变量 ${userCount}个账号`) 310 | 311 | return true 312 | } 313 | 314 | //////////////////////////////////////////////////////////////////// 315 | 316 | //组装请求头 317 | function popu(url, body = '',ck) { 318 | let host = url.replace('//', '/').split('/')[1] 319 | let urlObject = { 320 | url: url, 321 | headers: { 322 | "Host": host, 323 | "Content-Type":"application/x-www-form-urlencoded", 324 | "Origin": "http://read.imoney888.shop", 325 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4425 MMWEBSDK/20221206 Mobile Safari/537.36 MMWEBID/4883 MicroMessenger/8.0.32.2300(0x2800205D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", 326 | "Accept": "*/*", 327 | "Referer": "http://read.imoney888.shop" 328 | }, 329 | timeout: 6000, 330 | form:body 331 | } 332 | return urlObject; 333 | } 334 | function popugethost(url, body = '') { 335 | let host = url.replace('//', '/').split('/')[1] 336 | let urlObject = { 337 | url: url, 338 | headers: { 339 | "Host": host, 340 | "Content-Type":"application/x-www-form-urlencoded", 341 | "Origin": "http://read.imoney888.shop", 342 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4425 MMWEBSDK/20221206 Mobile Safari/537.36 MMWEBID/4883 MicroMessenger/8.0.32.2300(0x2800205D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", 343 | "Accept": "*/*", 344 | "Referer": "http://read.imoney888.shop" 345 | }, 346 | form: body, 347 | timeout: 6000, 348 | } 349 | return urlObject; 350 | } 351 | 352 | async function httpRequest(method, url) { 353 | //console.log(url) 354 | httpResult = null, httpReq = null, httpResp = null; 355 | return new Promise((resolve) => { 356 | $.send(method, url, async (err, req, resp) => { 357 | try { 358 | httpReq = req; 359 | httpResp = resp; 360 | if (err) { 361 | } else { 362 | if (resp.body) { 363 | if (typeof resp.body == "object") { 364 | httpResult = resp.body; 365 | } else { 366 | try { 367 | httpResult = JSON.parse(resp.body); 368 | } catch (e) { 369 | httpResult = resp.body; 370 | } 371 | } 372 | } 373 | } 374 | } catch (e) { 375 | console.log(e); 376 | } finally { 377 | resolve(); 378 | } 379 | }); 380 | }); 381 | } 382 | //////////////////////////////////////////////////////////////////// 383 | function Env(a, b) { 384 | return "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0), new class { 385 | constructor(a, b) { 386 | this.name = a, this.notifyStr = "", this.startTime = (new Date).getTime(), Object.assign(this, b), console.log(`${this.name} 开始运行: 387 | `) 388 | } 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 } getdata(b) { let a = this.getval(b); if (/^@/.test(b)) { let [, c, f] = /^@(.*?)\.(.*?)$/.exec(b), d = c ? this.getval(c) : ""; if (d) try { let e = JSON.parse(d); a = e ? this.lodash_get(e, f, "") : a } catch (g) { a = "" } } return a } setdata(c, d) { let a = !1; if (/^@/.test(d)) { let [, b, e] = /^@(.*?)\.(.*?)$/.exec(d), f = this.getval(b), i = b ? "null" === f ? null : f || "{}" : "{}"; try { let g = JSON.parse(i); this.lodash_set(g, e, c), a = this.setval(JSON.stringify(g), b) } catch (j) { let h = {}; this.lodash_set(h, e, c), a = this.setval(JSON.stringify(h), b) } } else a = this.setval(c, d); return a } getval(a) { return this.isSurge() || this.isLoon() ? $persistentStore.read(a) : this.isQuanX() ? $prefs.valueForKey(a) : this.isNode() ? (this.data = this.loaddata(), this.data[a]) : this.data && this.data[a] || null } setval(b, a) { return this.isSurge() || this.isLoon() ? $persistentStore.write(b, a) : this.isQuanX() ? $prefs.setValueForKey(b, a) : this.isNode() ? (this.data = this.loaddata(), this.data[a] = b, this.writedata(), !0) : this.data && this.data[a] || null } send(b, a, f = () => { }) { if ("get" != b && "post" != b && "put" != b && "delete" != b) { console.log(`无效的http方法:${b}`); return } if ("get" == b && a.headers ? (delete a.headers["Content-Type"], delete a.headers["Content-Length"]) : a.body && a.headers && (a.headers["Content-Type"] || (a.headers["Content-Type"] = "application/x-www-form-urlencoded")), this.isSurge() || this.isLoon()) { this.isSurge() && this.isNeedRewrite && (a.headers = a.headers || {}, Object.assign(a.headers, { "X-Surge-Skip-Scripting": !1 })); let c = { method: b, url: a.url, headers: a.headers, timeout: a.timeout, data: a.body }; "get" == b && delete c.data, $axios(c).then(a => { let { status: b, request: c, headers: d, data: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }).catch(a => console.log(a)) } else if (this.isQuanX()) a.method = b.toUpperCase(), this.isNeedRewrite && (a.opts = a.opts || {}, Object.assign(a.opts, { hints: !1 })), $task.fetch(a).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, a => f(a)); else if (this.isNode()) { this.got = this.got ? this.got : require("got"); let { url: d, ...e } = a; this.instance = this.got.extend({ followRedirect: !1 }), this.instance[b](d, e).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, b => { let { message: c, response: a } = b; f(c, a, a && a.body) }) } } time(a) { let b = { "M+": (new Date).getMonth() + 1, "d+": (new Date).getDate(), "h+": (new Date).getHours(), "m+": (new Date).getMinutes(), "s+": (new Date).getSeconds(), "q+": Math.floor(((new Date).getMonth() + 3) / 3), S: (new Date).getMilliseconds() }; for (let c in /(y+)/.test(a) && (a = a.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length))), b) new RegExp("(" + c + ")").test(a) && (a = a.replace(RegExp.$1, 1 == RegExp.$1.length ? b[c] : ("00" + b[c]).substr(("" + b[c]).length))); return a } async showmsg() { if (!this.notifyStr) return; let a = this.name + " \u8FD0\u884C\u901A\u77E5\n\n" + this.notifyStr; if ($.isNode()) { var b = require("./sendNotify"); console.log("\n============== \u63A8\u9001 =============="), await b.sendNotify(this.name, a) } else this.msg(a) } logAndNotify(a) { console.log(a), this.notifyStr += a, this.notifyStr += "\n" } msg(d = t, a = "", b = "", e) { let f = a => { if (!a) return a; if ("string" == typeof a) return this.isLoon() ? a : this.isQuanX() ? { "open-url": a } : this.isSurge() ? { url: a } : void 0; if ("object" == typeof a) { if (this.isLoon()) { let b = a.openUrl || a.url || a["open-url"], c = a.mediaUrl || a["media-url"]; return { openUrl: b, mediaUrl: c } } if (this.isQuanX()) { let d = a["open-url"] || a.url || a.openUrl, e = a["media-url"] || a.mediaUrl; return { "open-url": d, "media-url": e } } if (this.isSurge()) return { url: a.url || a.openUrl || a["open-url"] } } }; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(d, a, b, f(e)) : this.isQuanX() && $notify(d, a, b, f(e))); let c = ["", "============== \u7CFB\u7EDF\u901A\u77E5 =============="]; c.push(d), a && c.push(a), b && c.push(b), console.log(c.join("\n")) } getMin(a, b) { return a < b ? a : b } getMax(a, b) { return a < b ? b : a } padStr(e, b, f = "0") { let a = String(e), g = b > a.length ? b - a.length : 0, c = ""; for (let d = 0; d < g; d++)c += f; return c + a } json2str(b, e, f = !1) { let c = []; for (let d of Object.keys(b).sort()) { let a = b[d]; a && f && (a = encodeURIComponent(a)), c.push(d + "=" + a) } return c.join(e) } str2json(e, f = !1) { let d = {}; for (let a of e.split("#")) { if (!a) continue; let b = a.indexOf("="); if (-1 == b) continue; let g = a.substr(0, b), c = a.substr(b + 1); f && (c = decodeURIComponent(c)), d[g] = c } return d } randomString(d, a = "abcdef0123456789") { let b = ""; for (let c = 0; c < d; c++)b += a.charAt(Math.floor(Math.random() * a.length)); return b } randomList(a) { let b = Math.floor(Math.random() * a.length); return a[b] } wait(a) { return new Promise(b => setTimeout(b, a)) } done(a = {}) { 389 | let b = (new Date).getTime(), c = (b - this.startTime) / 1e3; console.log(` 390 | ${this.name} 运行结束,共运行了 ${c} 秒!`), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(a) 391 | } 392 | }(a, b) 393 | } 394 | -------------------------------------------------------------------------------- /wps.py: -------------------------------------------------------------------------------- 1 | import os 2 | import time 3 | from fun import wpswx 4 | from fun import wpspc 5 | from fun import pu 6 | import notify 7 | 8 | sen='' 9 | 10 | def SenWx(): 11 | global sen 12 | senp='' 13 | wps_wx = os.getenv("wps_wx") 14 | if not wps_wx: 15 | senp='🙃wps 微信 CK 变量未设置' 16 | exit() 17 | wps_wx_list = wps_wx.split('&') 18 | senp=senp+'\n'+"-------------------总共" + str(int(len(wps_wx_list))) + "个wps_微信CK-------------------" 19 | for mt_token in wps_wx_list: 20 | ck = pu.convert_cookies_to_dict(mt_token) 21 | try: 22 | wx = wpswx.wps(ck["csrftoken"], ck["wps_sid"]) 23 | Ch = wx.GetCheck() 24 | Da = None 25 | IsOK = False 26 | senp=senp+'\n'+f"👇👇👇在打卡中👇👇👇" 27 | for i in range(1, 20): 28 | wx.GetCode() 29 | time.sleep(0.5) 30 | if wx.SenSign(): 31 | time.sleep(0.5) 32 | Da = wx.get_data() 33 | IsOK = True 34 | break 35 | time.sleep(1) 36 | senp=senp+'\n'+"昵称:" + Ch['nickname'] 37 | if IsOK: 38 | senp=senp+'\n'+"打卡成功" 39 | else: 40 | senp=senp+'\n'+"打卡失败" 41 | senp=senp+'\n'+f"我成功打卡{str(Da['total_add_day'])}天" 42 | senp=senp+'\n'+f"今日共计{Da['pool_day']}人参与" 43 | senp=senp+'\n'+f"共计{Da['statistics']['success']}人成功,共计{Da['statistics']['fail']}人失败" 44 | senp=senp+'\n'+f'累计人{Da["total_sign_up"]}领取奖励' 45 | senp=senp+'\n'+f"👆👆👆打卡完毕👆👆👆\n" 46 | except Exception as e: 47 | senp=senp+'\n'+"出错了!详细错误👇错误CK👉" + mt_token 48 | senp=senp+'\n'+str(e) 49 | print(senp) 50 | sen=sen+senp 51 | 52 | 53 | def SenPC(): 54 | global sen 55 | senp = '' 56 | wps_pc = os.getenv("wps_pc") 57 | if not wps_pc: 58 | senp='🙃wps PC CK 变量未设置' 59 | exit() 60 | wps_pc_list = wps_pc.split('&') 61 | senp=senp+'\n'+"-------------------总共" + str(int(len(wps_pc_list))) + "个wps_PC CK-------------------" 62 | for mt_token in wps_pc_list: 63 | ck = pu.convert_cookies_to_dict(mt_token) 64 | try: 65 | pc = wpspc.wps(ck["wpsua"], ck["wps_sid"]) 66 | Ch = pc.GetCheck() 67 | senp=senp+'\n'+f"👇👇👇在打卡中👇👇👇" 68 | senp=senp+'\n'+"🎁开始👉会员时效签到👇" 69 | senp=senp+'\n'+"昵称:" + Ch['nickname'] 70 | if pc.Signin(): 71 | senp=senp+'\n'+"打卡成功" 72 | else: 73 | senp=senp+'\n'+"打卡失败" 74 | Q = pc.GetQuota() // 3600 75 | senp=senp+'\n'+pc.Index() 76 | senp=senp+'\n'+f"当前时间额度为{str(Q)}小时({Q//24}天)" 77 | senp=senp+'\n'+"🎁开始👉空间签到👇" 78 | if pc.SenSpace(): 79 | senp=senp+'\n'+"签到成功" 80 | else: 81 | senp=senp+'\n'+"签到失败" 82 | senp=senp+'\n'+pc.GetSpace() 83 | senp=senp+'\n'+f"👆👆👆打卡完毕👆👆👆\n" 84 | except Exception as e: 85 | senp=senp+'\n'+"出错了!详细错误👇错误CK👉" + mt_token 86 | senp=senp+'\n'+str(e) 87 | print(senp) 88 | sen=sen+senp 89 | 90 | 91 | if __name__ == '__main__': 92 | SenWx() 93 | SenPC() 94 | notify.send('WPS打卡',sen) 95 | -------------------------------------------------------------------------------- /wx_kkjyd.js: -------------------------------------------------------------------------------- 1 | /* 2 | kuikoukou 3 | 教程:https:wjkjy.cn 4 | 看看集阅读 5 | 需要青龙环境 6 | 入口:微信打开:http://image.wjkjy.cn/2023/03/18/6645357418916.png 7 | 点击获取看看地址得到链接,最好自己看两篇再运行,防止黑号 8 | 填写变量 kkjyd ,直接填写链接中t=内的值(不要t=),多账户换行隔开 9 | 单次运行只阅读15篇 10 | */ 11 | 12 | const $ = new Env("看看集阅读"); 13 | const notify = $.isNode() ? require('./sendNotify') : ''; 14 | let envSplitor = ['@', '\n'] 15 | let httpResult, httpReq, httpResp 16 | let ckName = 'kkjyd' 17 | let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ''; 18 | let userList = [] 19 | let userIdx = 0 20 | let userCount = 0 21 | var msg = '' 22 | // var tid = '' 23 | var cishu = 10 24 | var jiance = 0 //1获取文章 , 0阅读 25 | let newurl = "http://kkj.ymzwhcm.com/code008/ydt2" 26 | /////////////////////////////////////////////////////////////////// 27 | class UserInfo { 28 | constructor(str) { 29 | //console.log(str) 30 | this.istx = 1 31 | if (str.indexOf('##')!=-1) this.istx=0 32 | this.index = ++userIdx, this.idx = `账号[${this.index}] `, this.ticket = process.env[ckName]//str.split('&')[0]//, this.secret = str.split('&')[1]//.split('#'), this.u = this.ck[0], this.t = this.ck[1] 33 | } 34 | // async function getnowsceond(){ 35 | // return Math.floor(Date.now()/ 1000) 36 | // } 37 | // async function getTimeInfo(nTimeStamps) { 38 | // //转毫秒\n 39 | // var date = new Date(nTimeStamps * 1000); 40 | // //返回数据\n 41 | // var retData = { 42 | // nYear: date.getFullYear(), 43 | // nMonth: date.getMonth() + 1, 44 | // nDay: date.getDate(), 45 | // nHour: date.getHours(), 46 | // nMinutes: date.getMinutes(), 47 | // nSeconds: date.getSeconds() 48 | // }; 49 | // return retData; 50 | // } 51 | // await getTimeInfo(nYear) 52 | // var a = getnowsceond() 53 | // var timeinfo = getTimeInfo(a) 54 | // // console.log(date); 55 | // console.log(timeinfo); 56 | // console.log("timeInfo=%s",JSON.stringify(timeinfo)); 57 | async dotask() { 58 | try { 59 | let t = Date.now() 60 | this.ul = newurl+`/getTask?`; 61 | let body = 'ticket='+this.ticket+'&_t=0.6519685395293324'; 62 | let urlObject = popu(this.ul, body,this.ticket) 63 | await httpRequest('post', urlObject) 64 | let result = httpResult; 65 | // this.tid = result.data.tgid 66 | // var tid = result.data.tgid 67 | // console.log(result) 68 | if ( result.msg == 'OK') { 69 | this.tid = result.data.tgid 70 | this.jiance = result.code 71 | if (this.tid == '') { 72 | console.log('未获取到文章id,退出'); 73 | // this.jiance = result.code 74 | } 75 | // this.tid = result.data.tgid 76 | // console.log( '任务ID:'+result.data.tgid) 77 | 78 | // msg += '\n' + result.data.tgid + '\n' 79 | // else { 80 | // await this.jump(result.data.tgid) 81 | // } 82 | 83 | 84 | } else if (result.code == -1){ 85 | console.log('下次阅读时间:', result.msg) 86 | this.jiance = result.code 87 | } else if (result.code == 500){ 88 | console.log(result.msg) 89 | this.jiance = result.code 90 | } else { 91 | console.log(result) 92 | this.jiance = result.code 93 | } 94 | /* 95 | "1" == result.info.type && 1 !== this.dx && (console.log(`文章获取成功 `), this.b = 1, await $.wait(1000), await this.readfinish()), 96 | "3" == result.info.type && 1 !== this.dx && (console.log(`已限制阅读 尝试过验证`), this.x = result.info.key, this.c = result.info.url.split("/s/")[1], this.b = 2, 97 | await $.wait(6000), await this.readfinish()); 98 | */ 99 | } catch (e) { 100 | console.log(e) 101 | } finally { 102 | return Promise.resolve(1); 103 | $.done() 104 | } 105 | } 106 | 107 | async jump(readurl) { 108 | try { 109 | let t = Date.now() 110 | readurl = decodeURIComponent(readurl); 111 | var sj = Math.random() * (7000 - 6000) + 6086 112 | 113 | 114 | // this.key = readurl.match(/key=(.*?)&/)[1] 115 | // this.state= readurl.match(/state=(.*?)#/)[1] 116 | this.ul = newurl+`/submit?`+'ticket='+this.ticket+"&"+'tgid='+this.tid+"&_t=0.6519685395293324" 117 | console.log(this.ul) 118 | 119 | let body = ``; 120 | let urlObject = popu(this.ul, body,this.ticket) 121 | await httpRequest('post', urlObject) 122 | let result = httpResult; 123 | // console.log(result.data.points) 124 | console.log('获得'+result.data.points/1000+'积分') 125 | //var sj = Math.random() * (8000 - 6000) + 6000 126 | // console.log('等待:'+ sj) 127 | // await $.wait(sj) 128 | // await this.add_gold() 129 | 130 | /* 131 | "1" == result.info.type && 1 !== this.dx && (console.log(`文章获取成功 `), this.b = 1, await $.wait(1000), await this.readfinish()), 132 | "3" == result.info.type && 1 !== this.dx && (console.log(`已限制阅读 尝试过验证`), this.x = result.info.key, this.c = result.info.url.split("/s/")[1], this.b = 2, 133 | await $.wait(6000), await this.readfinish()); 134 | */ 135 | } catch (e) { 136 | console.log(e) 137 | } finally { 138 | // console.log(result.data.points) 139 | return Promise.resolve(1); 140 | } 141 | } 142 | 143 | 144 | 145 | async jiance2() { 146 | try { 147 | if (this.jiance.code != 0) { 148 | console.log("检测文章,跳过") 149 | await $.done() 150 | } 151 | // else { 152 | // if (!(await checkEnv())) return; 153 | // if (userList.length > 0) { 154 | // //await gethost() 155 | // //console.log('获取到newurl:'+newurl) 156 | // // for (let user of userList) { 157 | // // await user.task() 158 | // // } 159 | // // if (this.jiance.code=-1) { 160 | 161 | // // } 162 | // } 163 | // } 164 | }catch(e){ 165 | console.log(e) 166 | } 167 | 168 | await $.done() 169 | } 170 | // }finally(){ 171 | // break; 172 | // } 173 | 174 | // async withdrawal() { 175 | // try { 176 | // let t = Date.now() 177 | // let url = newurl+`/yunonline/v1/user_gold`; 178 | // let body = `unionid=${this.unionid}&request_id=4c33a60c5f1068b83e576ca806bd4b6b&gold=1000`; 179 | // let urlObject = popu(url, body,this.unionid) 180 | // await httpRequest('post', urlObject) 181 | // let result = httpResult; 182 | // if (result.msg=='success') { 183 | // result = result.data 184 | // console.log(`\n转化获得余额 ${result.money}元 \n`) 185 | // if (result.money >= 0.3) { 186 | // await this.doWithdraw() 187 | // } 188 | // /* 189 | // if (this.f < 3) console.log(`\n 不满足0.3 提现门槛\n`) 190 | // this.f >= 3 && this.f < 5 && (this.cash = .3), this.f >= 10 && this.f < 20 && (this.cash = 1), this.f >= 20 && this.f < 50 && (this.cash = 2), 191 | // this.f >= 50 && this.f < 100 && (this.cash = 2), this.f >= 100 && this.f < 200 && (this.cash = 10), this.f >= 200 && (this.cash = 20) 192 | // if (this.f >= 3) console.log(`\n可以提现 ${result.info.sum}金币 去提现 ${this.cash} 元\n`), await this.exchange() 193 | // */ 194 | 195 | // }else{ 196 | // console.log(result) 197 | // } 198 | // } catch (e) { 199 | // console.log(e) 200 | // } finally { 201 | // return Promise.resolve(1); 202 | // } 203 | // } 204 | // async doWithdraw(tx) { 205 | // try { 206 | 207 | // let t = Date.now() 208 | // let url = newurl+`/yunonline/v1/withdraw`; 209 | // let body = `unionid=${this.unionid}&request_id=4c33a60c5f1068b83e576ca806bd4b6b&ua=2`; 210 | // let urlObject = popu(url, body,this.unionid) 211 | // await httpRequest('post', urlObject) 212 | // let result = httpResult; 213 | // console.log(result) 214 | 215 | // } catch (e) { 216 | // console.log(e) 217 | // } finally { 218 | // return Promise.resolve(1); 219 | // } 220 | // } 221 | async task() { 222 | try { 223 | 224 | let abc = [...new Array(15).keys()] 225 | msg += `\n======== 账号 ${this.idx} 检测文章 ========\n` 226 | console.log(`\n=========== ${this.idx} 开始阅读文章 ===========\n`) 227 | var sj = Math.random() * (7000 - 6000) + 10086 228 | // let jiance = this.jiance 229 | // await this.gold() 230 | //console.log(this.fb) 231 | 232 | if (cishu == 10) { 233 | console.log(this.jiance) 234 | for (let i = 0;i< 15;i++) { 235 | // if(jiance.code != 0) { 236 | // console.log("检测文章,跳过") 237 | // break ; 238 | // } 239 | // await $.done()} 240 | // await this.task() 241 | // console.log(this.jiance) 242 | console.log('随机等待:'+ sj/1000+'秒') 243 | await $.wait(sj) 244 | await this.dotask() 245 | if(this.jiance != 0) { 246 | console.log("可能是检测文章或已阅读完毕,防止黑号跳过") 247 | break ; 248 | }else{console.log("已检测到文章,阅读开始")} 249 | console.log('等待:'+ sj/1000+'时间') 250 | await $.wait(sj) 251 | await this.jump() 252 | // await this.jiance() 253 | /* 254 | break 255 | if (this.dx == 1) break 256 | await this.getreadurl() 257 | if (this.fx == 1) break 258 | */ 259 | } 260 | // await this.getreadinfo() 261 | //await $.wait(15000) 262 | 263 | } 264 | // if (this.left_gold >= 10000 && this.istx == 1) await this.withdrawal() 265 | 266 | } catch (e) { 267 | console.log(e) 268 | } finally { 269 | return Promise.resolve(1); 270 | } 271 | } 272 | } 273 | 274 | !(async () => { 275 | if (typeof $request !== "undefined") { 276 | await GetRewrite() 277 | } else { 278 | if (!(await checkEnv())) return; 279 | if (userList.length > 0) { 280 | //await gethost() 281 | //console.log('获取到newurl:'+newurl) 282 | for (let user of userList) { 283 | await user.task() 284 | } 285 | if (msg.indexOf('redirect_uri=') !=-1) await notify.sendNotify('看看集阅读检测文章',msg) 286 | } 287 | } 288 | })() 289 | .catch((e) => console.log(e)) 290 | .finally(() => $.done()) 291 | 292 | /////////////////////////////////////////////////////////////////// 293 | 294 | async function gethost() { 295 | try { 296 | let t = Date.now() 297 | let url = 'https://qun.haozhuang.cn.com/fq_url/rk'; 298 | let body = '' 299 | let urlObject = popugethost(url, body) 300 | await httpRequest('get', urlObject) 301 | let result = httpResult; 302 | //console.log(result) 303 | if (result.jump) { 304 | newurl = result.jump.slice(0,-1) 305 | 306 | } 307 | } catch (e) { 308 | console.log(e) 309 | } finally { 310 | return Promise.resolve(1); 311 | } 312 | } 313 | 314 | async function checkEnv() { 315 | if (userCookie) { 316 | let splitor = envSplitor[0]; 317 | for (let sp of envSplitor) { 318 | if (userCookie.indexOf(sp) > -1) { 319 | splitor = sp; 320 | break; 321 | } 322 | } 323 | for (let userCookies of userCookie.split(splitor)) { 324 | if (userCookies) 325 | userList.push(new UserInfo(userCookies)) 326 | 327 | } 328 | userCount = userList.length 329 | } else { 330 | } 331 | 332 | console.log(`找到[${ckName}] 变量 ${userCount}个账号`) 333 | 334 | 335 | 336 | return true 337 | } 338 | 339 | //////////////////////////////////////////////////////////////////// 340 | function popu(url, body = '',ck) { 341 | //console.log(ck) /?upuid\u003d10314864 342 | let host = url.replace('//', '/').split('/')[1] 343 | let urlObject = { 344 | url: url, 345 | headers: { 346 | "Host": "kkj.ymzwhcm.com", 347 | "connection" : "keep-alive", 348 | "content-length": "0", 349 | "accept": "application/json, text/plain, */*", 350 | "x-requested-with": "com.tencent.mm", 351 | "user-agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/5019 MMWEBSDK/20221206 Mobile Safari/537.36 MMWEBID/3684 MicroMessenger/8.0.32.2300(0x2800205D) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64", 352 | "content-type": "application/x-www-form-urlencoded", 353 | "origin": "http://vip.bk9bas79.shop", 354 | "accept-encoding": "gzip, deflate", 355 | "accept-language": "zh-CN,zh;q\u003d0.9,en-US;q\u003d0.8,en;q\u003d0.7" 356 | }, 357 | timeout: 6086, 358 | } 359 | if (body) { 360 | urlObject.body = body 361 | urlObject.headers['content-length'] = body.length 362 | } 363 | 364 | return urlObject; 365 | } 366 | // function popugethost(url, body = '',ck) { 367 | // //console.log(ck) 368 | // let host = url.replace('//', '/').split('/')[1] 369 | // let urlObject = { 370 | // url: url, 371 | // headers: { 372 | // "Host": "qun.haozhuang.cn.com", 373 | // "User-Agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4425 MMWEBSDK/20221206 Mobile Safari/537.36 MMWEBID/4883 MicroMessenger/8.0.32.2300(0x2800205D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", 374 | // "Accept": "*/*", 375 | // "Origin": "https://kygj0209122405-1316151879.cos.ap-nanjing.myqcloud.com", 376 | // "X-Requested-With": "com.tencent.mm", 377 | // "Referer": "https://kygj0209122405-1316151879.cos.ap-nanjing.myqcloud.com/index.html?upuid\u003d10315076" 378 | // }, 379 | // timeout: 6086, 380 | // } 381 | // if (body) { 382 | // urlObject.body = body 383 | // } 384 | 385 | // return urlObject; 386 | // } 387 | 388 | async function httpRequest(method, url) { 389 | //console.log(url) 390 | httpResult = null, httpReq = null, httpResp = null; 391 | return new Promise((resolve) => { 392 | $.send(method, url, async (err, req, resp) => { 393 | try { 394 | httpReq = req; 395 | httpResp = resp; 396 | if (err) { 397 | } else { 398 | if (resp.body) { 399 | if (typeof resp.body == "object") { 400 | httpResult = resp.body; 401 | } else { 402 | try { 403 | httpResult = JSON.parse(resp.body); 404 | } catch (e) { 405 | httpResult = resp.body; 406 | } 407 | } 408 | } 409 | } 410 | } catch (e) { 411 | console.log(e); 412 | } finally { 413 | resolve(); 414 | } 415 | }); 416 | }); 417 | } 418 | //////////////////////////////////////////////////////////////////// 419 | function Env(a, b) { 420 | return "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0), new class { 421 | constructor(a, b) { 422 | this.name = a, this.notifyStr = "", this.startTime = (new Date).getTime(), Object.assign(this, b), console.log(`${this.name} 开始运行: 423 | `) 424 | } 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 } getdata(b) { let a = this.getval(b); if (/^@/.test(b)) { let [, c, f] = /^@(.*?)\.(.*?)$/.exec(b), d = c ? this.getval(c) : ""; if (d) try { let e = JSON.parse(d); a = e ? this.lodash_get(e, f, "") : a } catch (g) { a = "" } } return a } setdata(c, d) { let a = !1; if (/^@/.test(d)) { let [, b, e] = /^@(.*?)\.(.*?)$/.exec(d), f = this.getval(b), i = b ? "null" === f ? null : f || "{}" : "{}"; try { let g = JSON.parse(i); this.lodash_set(g, e, c), a = this.setval(JSON.stringify(g), b) } catch (j) { let h = {}; this.lodash_set(h, e, c), a = this.setval(JSON.stringify(h), b) } } else a = this.setval(c, d); return a } getval(a) { return this.isSurge() || this.isLoon() ? $persistentStore.read(a) : this.isQuanX() ? $prefs.valueForKey(a) : this.isNode() ? (this.data = this.loaddata(), this.data[a]) : this.data && this.data[a] || null } setval(b, a) { return this.isSurge() || this.isLoon() ? $persistentStore.write(b, a) : this.isQuanX() ? $prefs.setValueForKey(b, a) : this.isNode() ? (this.data = this.loaddata(), this.data[a] = b, this.writedata(), !0) : this.data && this.data[a] || null } send(b, a, f = () => { }) { if ("get" != b && "post" != b && "put" != b && "delete" != b) { console.log(`无效的http方法:${b}`); return } if ("get" == b && a.headers ? (delete a.headers["Content-Type"], delete a.headers["Content-Length"]) : a.body && a.headers && (a.headers["Content-Type"] || (a.headers["Content-Type"] = "application/x-www-form-urlencoded")), this.isSurge() || this.isLoon()) { this.isSurge() && this.isNeedRewrite && (a.headers = a.headers || {}, Object.assign(a.headers, { "X-Surge-Skip-Scripting": !1 })); let c = { method: b, url: a.url, headers: a.headers, timeout: a.timeout, data: a.body }; "get" == b && delete c.data, $axios(c).then(a => { let { status: b, request: c, headers: d, data: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }).catch(a => console.log(a)) } else if (this.isQuanX()) a.method = b.toUpperCase(), this.isNeedRewrite && (a.opts = a.opts || {}, Object.assign(a.opts, { hints: !1 })), $task.fetch(a).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, a => f(a)); else if (this.isNode()) { this.got = this.got ? this.got : require("got"); let { url: d, ...e } = a; this.instance = this.got.extend({ followRedirect: !1 }), this.instance[b](d, e).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, b => { let { message: c, response: a } = b; f(c, a, a && a.body) }) } } time(a) { let b = { "M+": (new Date).getMonth() + 1, "d+": (new Date).getDate(), "h+": (new Date).getHours(), "m+": (new Date).getMinutes(), "s+": (new Date).getSeconds(), "q+": Math.floor(((new Date).getMonth() + 3) / 3), S: (new Date).getMilliseconds() }; for (let c in /(y+)/.test(a) && (a = a.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length))), b) new RegExp("(" + c + ")").test(a) && (a = a.replace(RegExp.$1, 1 == RegExp.$1.length ? b[c] : ("00" + b[c]).substr(("" + b[c]).length))); return a } async showmsg() { if (!this.notifyStr) return; let a = this.name + " \u8FD0\u884C\u901A\u77E5\n\n" + this.notifyStr; if ($.isNode()) { var b = require("./sendNotify"); console.log("\n============== \u63A8\u9001 =============="), await b.sendNotify(this.name, a) } else this.msg(a) } logAndNotify(a) { console.log(a), this.notifyStr += a, this.notifyStr += "\n" } msg(d = t, a = "", b = "", e) { let f = a => { if (!a) return a; if ("string" == typeof a) return this.isLoon() ? a : this.isQuanX() ? { "open-url": a } : this.isSurge() ? { url: a } : void 0; if ("object" == typeof a) { if (this.isLoon()) { let b = a.openUrl || a.url || a["open-url"], c = a.mediaUrl || a["media-url"]; return { openUrl: b, mediaUrl: c } } if (this.isQuanX()) { let d = a["open-url"] || a.url || a.openUrl, e = a["media-url"] || a.mediaUrl; return { "open-url": d, "media-url": e } } if (this.isSurge()) return { url: a.url || a.openUrl || a["open-url"] } } }; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(d, a, b, f(e)) : this.isQuanX() && $notify(d, a, b, f(e))); let c = ["", "============== \u7CFB\u7EDF\u901A\u77E5 =============="]; c.push(d), a && c.push(a), b && c.push(b), console.log(c.join("\n")) } getMin(a, b) { return a < b ? a : b } getMax(a, b) { return a < b ? b : a } padStr(e, b, f = "0") { let a = String(e), g = b > a.length ? b - a.length : 0, c = ""; for (let d = 0; d < g; d++)c += f; return c + a } json2str(b, e, f = !1) { let c = []; for (let d of Object.keys(b).sort()) { let a = b[d]; a && f && (a = encodeURIComponent(a)), c.push(d + "=" + a) } return c.join(e) } str2json(e, f = !1) { let d = {}; for (let a of e.split("#")) { if (!a) continue; let b = a.indexOf("="); if (-1 == b) continue; let g = a.substr(0, b), c = a.substr(b + 1); f && (c = decodeURIComponent(c)), d[g] = c } return d } randomString(d, a = "abcdef0123456789") { let b = ""; for (let c = 0; c < d; c++)b += a.charAt(Math.floor(Math.random() * a.length)); return b } randomList(a) { let b = Math.floor(Math.random() * a.length); return a[b] } wait(a) { return new Promise(b => setTimeout(b, a)) } done(a = {}) { 425 | let b = (new Date).getTime(), c = (b - this.startTime) / 1e3; console.log(` 426 | ${this.name} 运行结束,共运行了 ${c} 秒!`), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(a) 427 | } 428 | }(a, b) 429 | } 430 | -------------------------------------------------------------------------------- /wxyd.js: -------------------------------------------------------------------------------- 1 | /* 2 | 微信阅读 3 | 需要青龙环境 4 | 入口,微信打开 -> https://zl0104233736-1314804847.cos.ap-nanjing.myqcloud.com/index.html?upuid=10760102 5 | 抓包m.*.work域名下cookie,填入环境变量 yuedu,多账户换行隔开 6 | 7 | 每天会验证2次左右,碰到验证文章手动打开看一篇即可 8 | 当前每日30篇*6轮180篇文章约2.2元 9 | 会自动提现 10 | */ 11 | 12 | const $ = new Env("微信阅读"); 13 | const notify = $.isNode() ? require('./sendNotify') : ''; 14 | let envSplitor = ['@', '\n'] 15 | let httpResult, httpReq, httpResp 16 | let ckName = 'yuedu' 17 | let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ''; 18 | let userList = [] 19 | let userIdx = 0 20 | let userCount = 0 21 | var msg = '' 22 | let newurl = "http://m.xmrygnuv.shop" 23 | /////////////////////////////////////////////////////////////////// 24 | class UserInfo { 25 | constructor(str) { 26 | //console.log(str) 27 | this.index = ++userIdx, this.idx = `账号[${this.index}] `, this.ck = str//.split('#'), this.u = this.ck[0], this.t = this.ck[1] 28 | } 29 | 30 | async getreadurl() { 31 | try { 32 | let t = Date.now() 33 | this.ul = newurl+`/tuijian/do_read?for\u003d\u0026zs\u003d\u0026pageshow\u0026r\u003d0.016638941704032684`; 34 | let body = ``; 35 | let urlObject = popu(this.ul, body,this.ck) 36 | await httpRequest('get', urlObject) 37 | let result = httpResult; 38 | //console.log(result) 39 | if ( result.jkey && result.url) { 40 | this.jkey=result.jkey 41 | await this.read(result.url.split('redirect_uri=')[1]) 42 | } 43 | /* 44 | "1" == result.info.type && 1 !== this.dx && (console.log(`文章获取成功 `), this.b = 1, await $.wait(1000), await this.readfinish()), 45 | "3" == result.info.type && 1 !== this.dx && (console.log(`已限制阅读 尝试过验证`), this.x = result.info.key, this.c = result.info.url.split("/s/")[1], this.b = 2, 46 | await $.wait(6000), await this.readfinish()); 47 | */ 48 | } catch (e) { 49 | console.log(e) 50 | } finally { 51 | return Promise.resolve(1); 52 | } 53 | } 54 | 55 | async read(readurl) { 56 | try { 57 | let t = Date.now() 58 | readurl = decodeURIComponent(readurl); 59 | var sj = Math.random() * (8000 - 6000) + 6000 60 | 61 | if (readurl.indexOf("jump")==-1){ 62 | 63 | console.log("疑似检测文章,不阅读") 64 | 65 | await $.wait(sj) 66 | return 67 | await this.readfinish() 68 | 69 | 70 | } 71 | this.jumpid = readurl.match(/jumpid=(.*?)&/)[1] 72 | this.state= readurl.match(/state=(.*?)&/)[1] 73 | this.ul = newurl+`/fast_reada/oiejr?jumpid=${this.jumpid}&code=031oV60w32RVa03URy0w3E0mzj3oV607&state=` + this.state 74 | //console.log(this.ul) 75 | 76 | let body = ``; 77 | let urlObject = popu(this.ul, body,this.ck) 78 | await httpRequest('get', urlObject) 79 | let result = httpResult; 80 | //console.log(result) 81 | //var sj = Math.random() * (8000 - 6000) + 6000 82 | //console.log('等待:'+ sj) 83 | await $.wait(sj) 84 | await this.readfinish() 85 | 86 | /* 87 | "1" == result.info.type && 1 !== this.dx && (console.log(`文章获取成功 `), this.b = 1, await $.wait(1000), await this.readfinish()), 88 | "3" == result.info.type && 1 !== this.dx && (console.log(`已限制阅读 尝试过验证`), this.x = result.info.key, this.c = result.info.url.split("/s/")[1], this.b = 2, 89 | await $.wait(6000), await this.readfinish()); 90 | */ 91 | } catch (e) { 92 | console.log(e) 93 | } finally { 94 | return Promise.resolve(1); 95 | } 96 | } 97 | async readfinish() { 98 | try { 99 | 100 | this.url=newurl+'/tuijian/do_read?for=&zs=&pageshow=&r=0.7882316111246435&jkey='+this.jkey 101 | let body = ``; 102 | let urlObject = popu(this.url, body,this.ck) 103 | //console.log(urlObject) 104 | await httpRequest('get', urlObject) 105 | let result = httpResult; 106 | if (result && result.success_msg) { 107 | console.log(result.success_msg) 108 | } else { 109 | console.log(result) 110 | } 111 | 112 | /* 113 | "success" == result.msg && console.log(`增加金币-> ${result.info.num} 阅读次数 ${result.info.read_num} 当前金币 ${result.info.read_money}`), 114 | result.code > 200 && (console.log(`已达到阅读量 等待刷新`), this.fx = 1); 115 | */ 116 | } catch (e) { 117 | console.log(e) 118 | } finally { 119 | return Promise.resolve(1); 120 | } 121 | } 122 | async getreadinfo() { 123 | try { 124 | let t = Date.now() 125 | let url = newurl+`/tuijian`; 126 | let body = ``; 127 | let urlObject = popu(url, body,this.ck) 128 | //console.log() 129 | await httpRequest('get', urlObject) 130 | let result = httpResult; 131 | //console.log(result) 132 | 133 | 134 | if (result && result.data) { 135 | result = result.data 136 | this.uid = result.user.uid 137 | console.log(`\n今日阅读数量/收益:${result.infoView.num}/${result.infoView.score}分 \n`) 138 | console.log(`\n当前余额:${result.user.score}分 \n`) 139 | this.cishu = result.infoView.rest 140 | 141 | if (result.infoView.status != 1) { 142 | this.fb = 1 143 | } 144 | if (result.infoView.status == 3) { 145 | // console.log(result.infoView.msg) 146 | msg += '' 147 | console.log('检测文章,需手动过') 148 | msg += `\n${this.idx} 碰到检测文章\n` 149 | this.fb = 1 150 | 151 | } else if (result.infoView.status == 4) { 152 | console.log(result.infoView.msg) 153 | 154 | } else if (result.infoView.rest == 0){ 155 | console.log(result.infoView.msg) 156 | } 157 | } 158 | } catch (e) { 159 | console.log(e) 160 | } finally { 161 | return Promise.resolve(1); 162 | } 163 | } 164 | 165 | 166 | async withdrawal() { 167 | try { 168 | let t = Date.now() 169 | let url = newurl+`/withdrawal`; 170 | let body = ``; 171 | let urlObject = popu(url, body,this.ck) 172 | await httpRequest('get', urlObject) 173 | let result = httpResult; 174 | if (result.data.user) { 175 | result = result.data.user 176 | console.log(`\n当前账号余额 ${result.score}分 \n`) 177 | if (this.ck.indexOf('##') != -1) return 178 | this.f = parseInt(result.score)//= Number(Math.floor(result.info.sum / 1000)) 179 | /* 180 | if (this.f < 3) console.log(`\n 不满足0.3 提现门槛\n`) 181 | this.f >= 3 && this.f < 5 && (this.cash = .3), this.f >= 10 && this.f < 20 && (this.cash = 1), this.f >= 20 && this.f < 50 && (this.cash = 2), 182 | this.f >= 50 && this.f < 100 && (this.cash = 2), this.f >= 100 && this.f < 200 && (this.cash = 10), this.f >= 200 && (this.cash = 20) 183 | if (this.f >= 3) console.log(`\n可以提现 ${result.info.sum}金币 去提现 ${this.cash} 元\n`), await this.exchange() 184 | */ 185 | if (this.f < 30) { 186 | console.log(`不满足 提现门槛`) 187 | } else { 188 | console.log(`去提现${this.f/100}元。。。。。。`) 189 | await this.doWithdraw(this.f) 190 | } 191 | } 192 | } catch (e) { 193 | console.log(e) 194 | } finally { 195 | return Promise.resolve(1); 196 | } 197 | } 198 | async doWithdraw(tx) { 199 | try { 200 | if (tx > 2000) tx = 2000 201 | let t = Date.now() 202 | let url = newurl+`/withdrawal/doWithdraw`; 203 | let body = `amount=` + tx; 204 | let urlObject = popu(url, body,this.ck) 205 | await httpRequest('post', urlObject) 206 | let result = httpResult; 207 | console.log(result) 208 | 209 | } catch (e) { 210 | console.log(e) 211 | } finally { 212 | return Promise.resolve(1); 213 | } 214 | } 215 | async task() { 216 | try { 217 | 218 | let abc = [...new Array(15).keys()] 219 | console.log(`\n=========== ${this.idx} 开始阅读文章 ===========\n`) 220 | await this.getreadinfo() 221 | //console.log(this.fb) 222 | if (this.fb != 1) { 223 | for (let i = 0;i< this.cishu;i++) { 224 | await this.getreadurl() 225 | 226 | /* 227 | break 228 | if (this.dx == 1) break 229 | await this.getreadurl() 230 | if (this.fx == 1) break 231 | */ 232 | } 233 | await this.getreadinfo() 234 | //await $.wait(15000) 235 | 236 | } 237 | await this.withdrawal() 238 | 239 | } catch (e) { 240 | console.log(e) 241 | } finally { 242 | return Promise.resolve(1); 243 | } 244 | } 245 | } 246 | 247 | !(async () => { 248 | if (typeof $request !== "undefined") { 249 | await GetRewrite() 250 | } else { 251 | if (!(await checkEnv())) return; 252 | if (userList.length > 0) { 253 | await gethost() 254 | console.log('获取到newurl:'+newurl) 255 | for (let user of userList) { 256 | await user.task() 257 | } 258 | if (msg) await notify.sendNotify('微信阅读检测文章',msg) 259 | } 260 | } 261 | })() 262 | .catch((e) => console.log(e)) 263 | .finally(() => $.done()) 264 | 265 | /////////////////////////////////////////////////////////////////// 266 | 267 | async function gethost() { 268 | try { 269 | let t = Date.now() 270 | let url = 'https://qun.haozhuang.cn.com/fq_url/rk'; 271 | let body = '' 272 | let urlObject = popugethost(url, body) 273 | await httpRequest('get', urlObject) 274 | let result = httpResult; 275 | //console.log(result) 276 | if (result.jump) { 277 | newurl = result.jump.slice(0,-1) 278 | 279 | } 280 | } catch (e) { 281 | console.log(e) 282 | } finally { 283 | return Promise.resolve(1); 284 | } 285 | } 286 | 287 | async function checkEnv() { 288 | if (userCookie) { 289 | let splitor = envSplitor[0]; 290 | for (let sp of envSplitor) { 291 | if (userCookie.indexOf(sp) > -1) { 292 | splitor = sp; 293 | break; 294 | } 295 | } 296 | for (let userCookies of userCookie.split(splitor)) { 297 | if (userCookies) 298 | userList.push(new UserInfo(userCookies)) 299 | 300 | } 301 | userCount = userList.length 302 | } else { 303 | } 304 | 305 | console.log(`找到[${ckName}] 变量 ${userCount}个账号`) 306 | 307 | 308 | 309 | return true 310 | } 311 | 312 | //////////////////////////////////////////////////////////////////// 313 | function popu(url, body = '',ck) { 314 | //console.log(ck) /?upuid\u003d10314864 315 | let host = url.replace('//', '/').split('/')[1] 316 | let urlObject = { 317 | url: url, 318 | headers: { 319 | "Host": host, 320 | "Connection": "keep-alive", 321 | "Accept": "*/*", 322 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4425 MMWEBSDK/20221206 Mobile Safari/537.36 MMWEBID/4883 MicroMessenger/8.0.32.2300(0x2800205D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", 323 | "X-Requested-With": "com.tencent.mm", 324 | "Referer": newurl+"/tuijian/read", 325 | "Accept-Encoding": "gzip, deflate", 326 | "Accept-Language": "zh-CN,zh;q\u003d0.9,en-US;q\u003d0.8,en;q\u003d0.7", 327 | "Cookie": ck, 328 | }, 329 | timeout: 5000, 330 | } 331 | if (body) { 332 | urlObject.body = body 333 | } 334 | 335 | return urlObject; 336 | } 337 | function popugethost(url, body = '',ck) { 338 | //console.log(ck) 339 | let host = url.replace('//', '/').split('/')[1] 340 | let urlObject = { 341 | url: url, 342 | headers: { 343 | "Host": "qun.haozhuang.cn.com", 344 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4425 MMWEBSDK/20221206 Mobile Safari/537.36 MMWEBID/4883 MicroMessenger/8.0.32.2300(0x2800205D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", 345 | "Accept": "*/*", 346 | "Origin": "https://kygj0209122405-1316151879.cos.ap-nanjing.myqcloud.com", 347 | "X-Requested-With": "com.tencent.mm", 348 | "Referer": "https://kygj0209122405-1316151879.cos.ap-nanjing.myqcloud.com/index.html?upuid\u003d10315076" 349 | }, 350 | timeout: 5000, 351 | } 352 | if (body) { 353 | urlObject.body = body 354 | } 355 | 356 | return urlObject; 357 | } 358 | 359 | async function httpRequest(method, url) { 360 | //console.log(url) 361 | httpResult = null, httpReq = null, httpResp = null; 362 | return new Promise((resolve) => { 363 | $.send(method, url, async (err, req, resp) => { 364 | try { 365 | httpReq = req; 366 | httpResp = resp; 367 | if (err) { 368 | } else { 369 | if (resp.body) { 370 | if (typeof resp.body == "object") { 371 | httpResult = resp.body; 372 | } else { 373 | try { 374 | httpResult = JSON.parse(resp.body); 375 | } catch (e) { 376 | httpResult = resp.body; 377 | } 378 | } 379 | } 380 | } 381 | } catch (e) { 382 | console.log(e); 383 | } finally { 384 | resolve(); 385 | } 386 | }); 387 | }); 388 | } 389 | //////////////////////////////////////////////////////////////////// 390 | function Env(a, b) { 391 | return "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0), new class { 392 | constructor(a, b) { 393 | this.name = a, this.notifyStr = "", this.startTime = (new Date).getTime(), Object.assign(this, b), console.log(`${this.name} 开始运行: 394 | `) 395 | } 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 } getdata(b) { let a = this.getval(b); if (/^@/.test(b)) { let [, c, f] = /^@(.*?)\.(.*?)$/.exec(b), d = c ? this.getval(c) : ""; if (d) try { let e = JSON.parse(d); a = e ? this.lodash_get(e, f, "") : a } catch (g) { a = "" } } return a } setdata(c, d) { let a = !1; if (/^@/.test(d)) { let [, b, e] = /^@(.*?)\.(.*?)$/.exec(d), f = this.getval(b), i = b ? "null" === f ? null : f || "{}" : "{}"; try { let g = JSON.parse(i); this.lodash_set(g, e, c), a = this.setval(JSON.stringify(g), b) } catch (j) { let h = {}; this.lodash_set(h, e, c), a = this.setval(JSON.stringify(h), b) } } else a = this.setval(c, d); return a } getval(a) { return this.isSurge() || this.isLoon() ? $persistentStore.read(a) : this.isQuanX() ? $prefs.valueForKey(a) : this.isNode() ? (this.data = this.loaddata(), this.data[a]) : this.data && this.data[a] || null } setval(b, a) { return this.isSurge() || this.isLoon() ? $persistentStore.write(b, a) : this.isQuanX() ? $prefs.setValueForKey(b, a) : this.isNode() ? (this.data = this.loaddata(), this.data[a] = b, this.writedata(), !0) : this.data && this.data[a] || null } send(b, a, f = () => { }) { if ("get" != b && "post" != b && "put" != b && "delete" != b) { console.log(`无效的http方法:${b}`); return } if ("get" == b && a.headers ? (delete a.headers["Content-Type"], delete a.headers["Content-Length"]) : a.body && a.headers && (a.headers["Content-Type"] || (a.headers["Content-Type"] = "application/x-www-form-urlencoded")), this.isSurge() || this.isLoon()) { this.isSurge() && this.isNeedRewrite && (a.headers = a.headers || {}, Object.assign(a.headers, { "X-Surge-Skip-Scripting": !1 })); let c = { method: b, url: a.url, headers: a.headers, timeout: a.timeout, data: a.body }; "get" == b && delete c.data, $axios(c).then(a => { let { status: b, request: c, headers: d, data: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }).catch(a => console.log(a)) } else if (this.isQuanX()) a.method = b.toUpperCase(), this.isNeedRewrite && (a.opts = a.opts || {}, Object.assign(a.opts, { hints: !1 })), $task.fetch(a).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, a => f(a)); else if (this.isNode()) { this.got = this.got ? this.got : require("got"); let { url: d, ...e } = a; this.instance = this.got.extend({ followRedirect: !1 }), this.instance[b](d, e).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, b => { let { message: c, response: a } = b; f(c, a, a && a.body) }) } } time(a) { let b = { "M+": (new Date).getMonth() + 1, "d+": (new Date).getDate(), "h+": (new Date).getHours(), "m+": (new Date).getMinutes(), "s+": (new Date).getSeconds(), "q+": Math.floor(((new Date).getMonth() + 3) / 3), S: (new Date).getMilliseconds() }; for (let c in /(y+)/.test(a) && (a = a.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length))), b) new RegExp("(" + c + ")").test(a) && (a = a.replace(RegExp.$1, 1 == RegExp.$1.length ? b[c] : ("00" + b[c]).substr(("" + b[c]).length))); return a } async showmsg() { if (!this.notifyStr) return; let a = this.name + " \u8FD0\u884C\u901A\u77E5\n\n" + this.notifyStr; if ($.isNode()) { var b = require("./sendNotify"); console.log("\n============== \u63A8\u9001 =============="), await b.sendNotify(this.name, a) } else this.msg(a) } logAndNotify(a) { console.log(a), this.notifyStr += a, this.notifyStr += "\n" } msg(d = t, a = "", b = "", e) { let f = a => { if (!a) return a; if ("string" == typeof a) return this.isLoon() ? a : this.isQuanX() ? { "open-url": a } : this.isSurge() ? { url: a } : void 0; if ("object" == typeof a) { if (this.isLoon()) { let b = a.openUrl || a.url || a["open-url"], c = a.mediaUrl || a["media-url"]; return { openUrl: b, mediaUrl: c } } if (this.isQuanX()) { let d = a["open-url"] || a.url || a.openUrl, e = a["media-url"] || a.mediaUrl; return { "open-url": d, "media-url": e } } if (this.isSurge()) return { url: a.url || a.openUrl || a["open-url"] } } }; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(d, a, b, f(e)) : this.isQuanX() && $notify(d, a, b, f(e))); let c = ["", "============== \u7CFB\u7EDF\u901A\u77E5 =============="]; c.push(d), a && c.push(a), b && c.push(b), console.log(c.join("\n")) } getMin(a, b) { return a < b ? a : b } getMax(a, b) { return a < b ? b : a } padStr(e, b, f = "0") { let a = String(e), g = b > a.length ? b - a.length : 0, c = ""; for (let d = 0; d < g; d++)c += f; return c + a } json2str(b, e, f = !1) { let c = []; for (let d of Object.keys(b).sort()) { let a = b[d]; a && f && (a = encodeURIComponent(a)), c.push(d + "=" + a) } return c.join(e) } str2json(e, f = !1) { let d = {}; for (let a of e.split("#")) { if (!a) continue; let b = a.indexOf("="); if (-1 == b) continue; let g = a.substr(0, b), c = a.substr(b + 1); f && (c = decodeURIComponent(c)), d[g] = c } return d } randomString(d, a = "abcdef0123456789") { let b = ""; for (let c = 0; c < d; c++)b += a.charAt(Math.floor(Math.random() * a.length)); return b } randomList(a) { let b = Math.floor(Math.random() * a.length); return a[b] } wait(a) { return new Promise(b => setTimeout(b, a)) } done(a = {}) { 396 | let b = (new Date).getTime(), c = (b - this.startTime) / 1e3; console.log(` 397 | ${this.name} 运行结束,共运行了 ${c} 秒!`), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(a) 398 | } 399 | }(a, b) 400 | } 401 | -------------------------------------------------------------------------------- /wxyd1.js: -------------------------------------------------------------------------------- 1 | /* 2 | 微信阅读2 3 | 需要青龙环境 4 | 入口,微信打开 -> 入口1:https://api.shanghaiqiye.top:10262/yunonline/v1/auth/080bb7730c1c22c0983b4c5755e84762?codeurl=shanghaiqiye.top:10262&codeuserid=2&time=1678618115 5 | 入口2:https://api.caorenkj.top:10252/yunonline/v1/auth/080bb7730c1c22c0983b4c5755e84762?codeurl=caorenkj.top:10252&codeuserid=1&time=1678618115 6 | 7 | 抓包首页 https://erd.jjt2019.top/yunonline/v1/gold?unionid=nonxxxx&time=1678449887000 中的 unionid 8 | 抓包获取文章链接 https://erd.jjt2019.top/yunonline/v1/task 请求体中 secret 9 | 填写变量 jdyuedu ,填写方式 unionid&secret 不要unionid=和secret=,多账户换行隔开 10 | 11 | 目前验证文章不清楚,但每天第一轮必验证,不过验证必黑,建议第一轮读到第三篇文章,建议不要凌晨跑 12 | 13 | 3.12更新:前2篇以及101和102篇文章改为检测文章,遇到不读,请手动阅读 14 | 15 | */ 16 | 17 | const $ = new Env("微信简单阅读"); 18 | const notify = $.isNode() ? require('./sendNotify') : ''; 19 | let envSplitor = ['@', '\n'] 20 | let httpResult, httpReq, httpResp 21 | let ckName = 'jdyuedu' 22 | let userCookie = ($.isNode() ? process.env[ckName] : $.getdata(ckName)) || ''; 23 | let userList = [] 24 | let userIdx = 0 25 | let userCount = 0 26 | var msg = '' 27 | var jiance = 0 //1获取文章 , 0阅读 28 | let newurl = "https://erd.jjt2019.top:10267" 29 | /////////////////////////////////////////////////////////////////// 30 | class UserInfo { 31 | constructor(str) { 32 | //console.log(str) 33 | this.istx = 1 34 | if (str.indexOf('##')!=-1) this.istx=0 35 | this.index = ++userIdx, this.idx = `账号[${this.index}] `, this.unionid = str.split('&')[0], this.secret = str.split('&')[1]//.split('#'), this.u = this.ck[0], this.t = this.ck[1] 36 | } 37 | 38 | async dotask() { 39 | try { 40 | let t = Date.now() 41 | this.ul = newurl+`/yunonline/v1/task`; 42 | let body = 'secret='+this.secret+'&type=read'; 43 | let urlObject = popu(this.ul, body,this.unionid) 44 | await httpRequest('post', urlObject) 45 | let result = httpResult; 46 | //console.log(result) 47 | if ( result.msg == 'success') { 48 | if (jiance == 1) { 49 | console.log( result.data.link) 50 | msg += '\n' + result.data.link + '\n' 51 | } else { 52 | await this.jump(result.data.link.split('redirect_uri=')[1]) 53 | } 54 | 55 | 56 | } else if (result.errcode == 409){ 57 | console.log('下次阅读时间:', result.msg/60,'分钟后') 58 | 59 | } else if (result.errcode == 407){ 60 | console.log(result.msg) 61 | } else { 62 | console.log(result) 63 | } 64 | /* 65 | "1" == result.info.type && 1 !== this.dx && (console.log(`文章获取成功 `), this.b = 1, await $.wait(1000), await this.readfinish()), 66 | "3" == result.info.type && 1 !== this.dx && (console.log(`已限制阅读 尝试过验证`), this.x = result.info.key, this.c = result.info.url.split("/s/")[1], this.b = 2, 67 | await $.wait(6000), await this.readfinish()); 68 | */ 69 | } catch (e) { 70 | console.log(e) 71 | } finally { 72 | return Promise.resolve(1); 73 | } 74 | } 75 | 76 | async jump(readurl) { 77 | try { 78 | let t = Date.now() 79 | readurl = decodeURIComponent(readurl); 80 | var sj = Math.random() * (7000 - 6000) + 4000 81 | 82 | 83 | this.key = readurl.match(/key=(.*?)&/)[1] 84 | this.state= readurl.match(/state=(.*?)#/)[1] 85 | this.ul = newurl+`/yunonline/v1/jump?key=${this.key}&unionid=${this.unionid}&code=071jHI0w3wTxf03NIp1w36OkoF1jHI0P&state=` + this.state 86 | //console.log(readurl) 87 | 88 | let body = ``; 89 | let urlObject = popu(this.ul, body,this.unionid) 90 | await httpRequest('get', urlObject) 91 | let result = httpResult; 92 | //console.log(result) 93 | //var sj = Math.random() * (8000 - 6000) + 6000 94 | //console.log('等待:'+ sj) 95 | await $.wait(sj) 96 | await this.add_gold() 97 | 98 | /* 99 | "1" == result.info.type && 1 !== this.dx && (console.log(`文章获取成功 `), this.b = 1, await $.wait(1000), await this.readfinish()), 100 | "3" == result.info.type && 1 !== this.dx && (console.log(`已限制阅读 尝试过验证`), this.x = result.info.key, this.c = result.info.url.split("/s/")[1], this.b = 2, 101 | await $.wait(6000), await this.readfinish()); 102 | */ 103 | } catch (e) { 104 | console.log(e) 105 | } finally { 106 | return Promise.resolve(1); 107 | } 108 | } 109 | async add_gold() { 110 | try { 111 | var sj = Math.random() * (7000 - 6000) + 1000 112 | this.url=newurl+'/yunonline/v1/add_gold' 113 | let body = 'unionid=' + this.unionid + '&time=7'; 114 | let urlObject = popu(this.url, body,this.unionid) 115 | //console.log(urlObject) 116 | await httpRequest('post', urlObject) 117 | let result = httpResult; 118 | if (result && result.data) { 119 | console.log('获得',result.data.gold,'金币') 120 | if (result.data.day_read == 100 || result.data.day_read == 101 ) { 121 | console.log('可能是检测文章,请去手动看2-3篇') 122 | msg += `\n======== 账号 ${this.idx} 可能遇到检测文章 ========\n` 123 | msg += '\n前两篇文章请手动阅读\n' 124 | } else{ 125 | await $.wait(sj) 126 | await this.dotask() 127 | } 128 | 129 | 130 | } else { 131 | console.log(result) 132 | } 133 | 134 | /* 135 | "success" == result.msg && console.log(`增加金币-> ${result.info.num} 阅读次数 ${result.info.read_num} 当前金币 ${result.info.read_money}`), 136 | result.code > 200 && (console.log(`已达到阅读量 等待刷新`), this.fx = 1); 137 | */ 138 | } catch (e) { 139 | console.log(e) 140 | } finally { 141 | return Promise.resolve(1); 142 | } 143 | } 144 | async gold() { 145 | try { 146 | let t = Date.now() 147 | let url = newurl+`/yunonline/v1/gold?unionid=${this.unionid}&time=`+t; 148 | let body = ``; 149 | let urlObject = popu(url, body,this.unionid) 150 | //console.log(urlObject) 151 | await httpRequest('get', urlObject) 152 | let result = httpResult; 153 | //console.log(result) 154 | 155 | 156 | if (result && result.data) { 157 | result = result.data 158 | 159 | console.log(`\n今日阅读数量/收益:${result.day_read}/${result.day_gold}金币 `) 160 | console.log(`当前余额:${result.last_gold}金币 `) 161 | this.fb = 1 162 | this.left_gold=result.last_gold 163 | if (result.day_read == 0 || result.day_read == 1) { 164 | console.log('前两篇文章请手动阅读') 165 | this.fb = 0 166 | msg += `\n======== 账号 ${this.idx} 可能遇到检测文章 ========\n` 167 | msg += '\n前两篇文章请手动阅读\n' 168 | 169 | } else if (result.day_read == 100 || result.day_read == 101) { 170 | console.log('101和102可能为检测文章,请手动阅读') 171 | this.fb=0 172 | msg += `\n======== 账号 ${this.idx} 可能遇到检测文章 ========\n` 173 | msg += '\n前两篇文章请手动阅读\n' 174 | } 175 | /* 176 | this.cishu = result.infoView.rest 177 | 178 | if (result.infoView.status != 1) { 179 | this.fb = 1 180 | } 181 | if (result.infoView.status == 3) { 182 | // console.log(result.infoView.msg) 183 | msg += '' 184 | console.log('检测文章,需手动过') 185 | msg += `\n${this.idx} 碰到检测文章\n` 186 | this.fb = 1 187 | 188 | } else if (result.infoView.status == 4) { 189 | console.log(result.infoView.msg) 190 | 191 | } else if (result.infoView.rest == 0){ 192 | console.log(result.infoView.msg) 193 | } 194 | */ 195 | } 196 | } catch (e) { 197 | console.log(e) 198 | } finally { 199 | return Promise.resolve(1); 200 | } 201 | } 202 | 203 | 204 | async withdrawal() { 205 | try { 206 | let t = Date.now() 207 | let url = newurl+`/yunonline/v1/user_gold`; 208 | let body = `unionid=${this.unionid}&request_id=4c33a60c5f1068b83e576ca806bd4b6b&gold=1000`; 209 | let urlObject = popu(url, body,this.unionid) 210 | await httpRequest('post', urlObject) 211 | let result = httpResult; 212 | if (result.msg=='success') { 213 | result = result.data 214 | console.log(`\n转化获得余额 ${result.money}元 \n`) 215 | if (result.money >= 0.3) { 216 | await this.doWithdraw() 217 | } 218 | /* 219 | if (this.f < 3) console.log(`\n 不满足0.3 提现门槛\n`) 220 | this.f >= 3 && this.f < 5 && (this.cash = .3), this.f >= 10 && this.f < 20 && (this.cash = 1), this.f >= 20 && this.f < 50 && (this.cash = 2), 221 | this.f >= 50 && this.f < 100 && (this.cash = 2), this.f >= 100 && this.f < 200 && (this.cash = 10), this.f >= 200 && (this.cash = 20) 222 | if (this.f >= 3) console.log(`\n可以提现 ${result.info.sum}金币 去提现 ${this.cash} 元\n`), await this.exchange() 223 | */ 224 | 225 | }else{ 226 | console.log(result) 227 | } 228 | } catch (e) { 229 | console.log(e) 230 | } finally { 231 | return Promise.resolve(1); 232 | } 233 | } 234 | async doWithdraw(tx) { 235 | try { 236 | 237 | let t = Date.now() 238 | let url = newurl+`/yunonline/v1/withdraw`; 239 | let body = `unionid=${this.unionid}&request_id=4c33a60c5f1068b83e576ca806bd4b6b&ua=2`; 240 | let urlObject = popu(url, body,this.unionid) 241 | await httpRequest('post', urlObject) 242 | let result = httpResult; 243 | console.log(result) 244 | 245 | } catch (e) { 246 | console.log(e) 247 | } finally { 248 | return Promise.resolve(1); 249 | } 250 | } 251 | async task() { 252 | try { 253 | 254 | let abc = [...new Array(15).keys()] 255 | 256 | console.log(`\n=========== ${this.idx} 开始阅读文章 ===========\n`) 257 | await this.gold() 258 | 259 | //console.log(this.fb) 260 | if (this.fb == 1) { 261 | await this.dotask() 262 | await this.gold() 263 | //await $.wait(15000) 264 | 265 | } 266 | if (this.left_gold >= 3000 && this.istx == 1) await this.withdrawal() 267 | 268 | } catch (e) { 269 | console.log(e) 270 | } finally { 271 | return Promise.resolve(1); 272 | } 273 | } 274 | } 275 | 276 | !(async () => { 277 | if (typeof $request !== "undefined") { 278 | await GetRewrite() 279 | } else { 280 | if (!(await checkEnv())) return; 281 | if (userList.length > 0) { 282 | //await gethost() 283 | //console.log('获取到newurl:'+newurl) 284 | for (let user of userList) { 285 | await user.task() 286 | } 287 | if (msg.indexOf('请手动阅读') !=-1) await notify.sendNotify('微信阅读检测文章',msg) 288 | } 289 | } 290 | })() 291 | .catch((e) => console.log(e)) 292 | .finally(() => $.done()) 293 | 294 | /////////////////////////////////////////////////////////////////// 295 | 296 | async function gethost() { 297 | try { 298 | let t = Date.now() 299 | let url = 'https://qun.haozhuang.cn.com/fq_url/rk'; 300 | let body = '' 301 | let urlObject = popugethost(url, body) 302 | await httpRequest('get', urlObject) 303 | let result = httpResult; 304 | //console.log(result) 305 | if (result.jump) { 306 | newurl = result.jump.slice(0,-1) 307 | 308 | } 309 | } catch (e) { 310 | console.log(e) 311 | } finally { 312 | return Promise.resolve(1); 313 | } 314 | } 315 | 316 | async function checkEnv() { 317 | if (userCookie) { 318 | let splitor = envSplitor[0]; 319 | for (let sp of envSplitor) { 320 | if (userCookie.indexOf(sp) > -1) { 321 | splitor = sp; 322 | break; 323 | } 324 | } 325 | for (let userCookies of userCookie.split(splitor)) { 326 | if (userCookies) 327 | userList.push(new UserInfo(userCookies)) 328 | 329 | } 330 | userCount = userList.length 331 | } else { 332 | } 333 | 334 | console.log(`找到[${ckName}] 变量 ${userCount}个账号`) 335 | 336 | 337 | 338 | return true 339 | } 340 | 341 | //////////////////////////////////////////////////////////////////// 342 | function popu(url, body = '',ck) { 343 | //console.log(ck) /?upuid\u003d10314864 344 | let host = url.replace('//', '/').split('/')[1] 345 | let urlObject = { 346 | url: url, 347 | headers: { 348 | "Host": "erd.jjt2019.top:10267", 349 | //"content-length": "50", 350 | "accept": "application/json, text/javascript, */*; q\u003d0.01", 351 | "x-requested-with": "XMLHttpRequest", 352 | "user-agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/5019 MMWEBSDK/20221206 Mobile Safari/537.36 MMWEBID/3684 MicroMessenger/8.0.32.2300(0x2800205D) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64", 353 | "content-type": "application/x-www-form-urlencoded; charset\u003dUTF-8", 354 | //"origin": "https://erd.jjt2019.top:10267", 355 | "sec-fetch-site": "same-origin", 356 | "sec-fetch-mode": "cors", 357 | "sec-fetch-dest": "empty", 358 | "referer": "https://erd.jjt2019.top:10267/yunonline/v8623/redirect/156db1c3b5dd01c24254aa07a793ff15?openid\u003doUDcn6KK6c8bQ1VAVgD8PAX0OqEE\u0026unionid\u003d"+ck, 359 | "accept-encoding": "gzip, deflate", 360 | "accept-language": "zh-CN,zh;q\u003d0.9,en-US;q\u003d0.8,en;q\u003d0.7" 361 | }, 362 | timeout: 5000, 363 | } 364 | if (body) { 365 | urlObject.body = body 366 | urlObject.headers['content-length'] = body.length 367 | } 368 | 369 | return urlObject; 370 | } 371 | function popugethost(url, body = '',ck) { 372 | //console.log(ck) 373 | let host = url.replace('//', '/').split('/')[1] 374 | let urlObject = { 375 | url: url, 376 | headers: { 377 | "Host": "qun.haozhuang.cn.com", 378 | "User-Agent": "Mozilla/5.0 (Linux; Android 12; M2012K11AC Build/SKQ1.211006.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/86.0.4240.99 XWEB/4425 MMWEBSDK/20221206 Mobile Safari/537.36 MMWEBID/4883 MicroMessenger/8.0.32.2300(0x2800205D) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64", 379 | "Accept": "*/*", 380 | "Origin": "https://kygj0209122405-1316151879.cos.ap-nanjing.myqcloud.com", 381 | "X-Requested-With": "com.tencent.mm", 382 | "Referer": "https://kygj0209122405-1316151879.cos.ap-nanjing.myqcloud.com/index.html?upuid\u003d10315076" 383 | }, 384 | timeout: 5000, 385 | } 386 | if (body) { 387 | urlObject.body = body 388 | } 389 | 390 | return urlObject; 391 | } 392 | 393 | async function httpRequest(method, url) { 394 | //console.log(url) 395 | httpResult = null, httpReq = null, httpResp = null; 396 | return new Promise((resolve) => { 397 | $.send(method, url, async (err, req, resp) => { 398 | try { 399 | httpReq = req; 400 | httpResp = resp; 401 | if (err) { 402 | } else { 403 | if (resp.body) { 404 | if (typeof resp.body == "object") { 405 | httpResult = resp.body; 406 | } else { 407 | try { 408 | httpResult = JSON.parse(resp.body); 409 | } catch (e) { 410 | httpResult = resp.body; 411 | } 412 | } 413 | } 414 | } 415 | } catch (e) { 416 | console.log(e); 417 | } finally { 418 | resolve(); 419 | } 420 | }); 421 | }); 422 | } 423 | //////////////////////////////////////////////////////////////////// 424 | function Env(a, b) { 425 | return "undefined" != typeof process && JSON.stringify(process.env).indexOf("GITHUB") > -1 && process.exit(0), new class { 426 | constructor(a, b) { 427 | this.name = a, this.notifyStr = "", this.startTime = (new Date).getTime(), Object.assign(this, b), console.log(`${this.name} 开始运行: 428 | `) 429 | } 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 } getdata(b) { let a = this.getval(b); if (/^@/.test(b)) { let [, c, f] = /^@(.*?)\.(.*?)$/.exec(b), d = c ? this.getval(c) : ""; if (d) try { let e = JSON.parse(d); a = e ? this.lodash_get(e, f, "") : a } catch (g) { a = "" } } return a } setdata(c, d) { let a = !1; if (/^@/.test(d)) { let [, b, e] = /^@(.*?)\.(.*?)$/.exec(d), f = this.getval(b), i = b ? "null" === f ? null : f || "{}" : "{}"; try { let g = JSON.parse(i); this.lodash_set(g, e, c), a = this.setval(JSON.stringify(g), b) } catch (j) { let h = {}; this.lodash_set(h, e, c), a = this.setval(JSON.stringify(h), b) } } else a = this.setval(c, d); return a } getval(a) { return this.isSurge() || this.isLoon() ? $persistentStore.read(a) : this.isQuanX() ? $prefs.valueForKey(a) : this.isNode() ? (this.data = this.loaddata(), this.data[a]) : this.data && this.data[a] || null } setval(b, a) { return this.isSurge() || this.isLoon() ? $persistentStore.write(b, a) : this.isQuanX() ? $prefs.setValueForKey(b, a) : this.isNode() ? (this.data = this.loaddata(), this.data[a] = b, this.writedata(), !0) : this.data && this.data[a] || null } send(b, a, f = () => { }) { if ("get" != b && "post" != b && "put" != b && "delete" != b) { console.log(`无效的http方法:${b}`); return } if ("get" == b && a.headers ? (delete a.headers["Content-Type"], delete a.headers["Content-Length"]) : a.body && a.headers && (a.headers["Content-Type"] || (a.headers["Content-Type"] = "application/x-www-form-urlencoded")), this.isSurge() || this.isLoon()) { this.isSurge() && this.isNeedRewrite && (a.headers = a.headers || {}, Object.assign(a.headers, { "X-Surge-Skip-Scripting": !1 })); let c = { method: b, url: a.url, headers: a.headers, timeout: a.timeout, data: a.body }; "get" == b && delete c.data, $axios(c).then(a => { let { status: b, request: c, headers: d, data: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }).catch(a => console.log(a)) } else if (this.isQuanX()) a.method = b.toUpperCase(), this.isNeedRewrite && (a.opts = a.opts || {}, Object.assign(a.opts, { hints: !1 })), $task.fetch(a).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, a => f(a)); else if (this.isNode()) { this.got = this.got ? this.got : require("got"); let { url: d, ...e } = a; this.instance = this.got.extend({ followRedirect: !1 }), this.instance[b](d, e).then(a => { let { statusCode: b, request: c, headers: d, body: e } = a; f(null, c, { statusCode: b, headers: d, body: e }) }, b => { let { message: c, response: a } = b; f(c, a, a && a.body) }) } } time(a) { let b = { "M+": (new Date).getMonth() + 1, "d+": (new Date).getDate(), "h+": (new Date).getHours(), "m+": (new Date).getMinutes(), "s+": (new Date).getSeconds(), "q+": Math.floor(((new Date).getMonth() + 3) / 3), S: (new Date).getMilliseconds() }; for (let c in /(y+)/.test(a) && (a = a.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length))), b) new RegExp("(" + c + ")").test(a) && (a = a.replace(RegExp.$1, 1 == RegExp.$1.length ? b[c] : ("00" + b[c]).substr(("" + b[c]).length))); return a } async showmsg() { if (!this.notifyStr) return; let a = this.name + " \u8FD0\u884C\u901A\u77E5\n\n" + this.notifyStr; if ($.isNode()) { var b = require("./sendNotify"); console.log("\n============== \u63A8\u9001 =============="), await b.sendNotify(this.name, a) } else this.msg(a) } logAndNotify(a) { console.log(a), this.notifyStr += a, this.notifyStr += "\n" } msg(d = t, a = "", b = "", e) { let f = a => { if (!a) return a; if ("string" == typeof a) return this.isLoon() ? a : this.isQuanX() ? { "open-url": a } : this.isSurge() ? { url: a } : void 0; if ("object" == typeof a) { if (this.isLoon()) { let b = a.openUrl || a.url || a["open-url"], c = a.mediaUrl || a["media-url"]; return { openUrl: b, mediaUrl: c } } if (this.isQuanX()) { let d = a["open-url"] || a.url || a.openUrl, e = a["media-url"] || a.mediaUrl; return { "open-url": d, "media-url": e } } if (this.isSurge()) return { url: a.url || a.openUrl || a["open-url"] } } }; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(d, a, b, f(e)) : this.isQuanX() && $notify(d, a, b, f(e))); let c = ["", "============== \u7CFB\u7EDF\u901A\u77E5 =============="]; c.push(d), a && c.push(a), b && c.push(b), console.log(c.join("\n")) } getMin(a, b) { return a < b ? a : b } getMax(a, b) { return a < b ? b : a } padStr(e, b, f = "0") { let a = String(e), g = b > a.length ? b - a.length : 0, c = ""; for (let d = 0; d < g; d++)c += f; return c + a } json2str(b, e, f = !1) { let c = []; for (let d of Object.keys(b).sort()) { let a = b[d]; a && f && (a = encodeURIComponent(a)), c.push(d + "=" + a) } return c.join(e) } str2json(e, f = !1) { let d = {}; for (let a of e.split("#")) { if (!a) continue; let b = a.indexOf("="); if (-1 == b) continue; let g = a.substr(0, b), c = a.substr(b + 1); f && (c = decodeURIComponent(c)), d[g] = c } return d } randomString(d, a = "abcdef0123456789") { let b = ""; for (let c = 0; c < d; c++)b += a.charAt(Math.floor(Math.random() * a.length)); return b } randomList(a) { let b = Math.floor(Math.random() * a.length); return a[b] } wait(a) { return new Promise(b => setTimeout(b, a)) } done(a = {}) { 430 | let b = (new Date).getTime(), c = (b - this.startTime) / 1e3; console.log(` 431 | ${this.name} 运行结束,共运行了 ${c} 秒!`), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(a) 432 | } 433 | }(a, b) 434 | } 435 | -------------------------------------------------------------------------------- /xiaomibbs.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # ------------------------------- 4 | # @Author : github@wd210010 https://github.com/wd210010/only_for_happy 5 | # @Upadate by Rookie-wb-WH: https://github.com/Rookie-wb-WH/ql_scripts 6 | # @Time : 2023/2/27 13:23 7 | # ------------------------------- 8 | # cron "30 8,10,15 * * *" script-path=xxx.py,tag=匹配cron用 9 | # const $ = new Env('小米社区任务得成长值') 10 | ''' 11 | 2023.11.13 修复签到 需要安装 pycryptodome 依赖 有封号风险 尽量别用 12 | 13 | 小米签到 小米社区任务得成长值 14 | 配置帐号密码 一一对应 按需增删 不对上会出错 若帐号密码填写没有错误 还是报错应该是账号在非常用设备上登录, 需要验证码, 使用该设备安装图形化工具后自行前去验证https://web-alpha.vip.miui.com/page/info/mio/mio/internalTest 图形化工具怎么安装可参考https://cloud.tencent.com/developer/article/2069955 15 | 图形化工具怎么安装可参考:centos7安装图形化界面图文详解 https://cloud.tencent.com/developer/article/2069955 16 | 使用该设备安装图形化工具后自行前去验证 https://web-alpha.vip.miui.com/page/info/mio/mio/internalTest 17 | 青龙变量export mi_account='' export mi_password='' 18 | ''' 19 | 20 | import base64 21 | import binascii 22 | import hashlib 23 | import json 24 | import random 25 | import re 26 | import requests 27 | import string 28 | import time 29 | import os 30 | 31 | from Crypto.Cipher import AES 32 | from Crypto.Cipher import PKCS1_v1_5 33 | from Crypto.PublicKey import RSA 34 | from Crypto.Util.Padding import pad 35 | 36 | mi_account = os.getenv("mi_account").split('&') 37 | mi_password = os.getenv("mi_password").split('&') 38 | 39 | 40 | # 获取 WebKitFormBoundary 随机字符串 41 | def generate_Boundary_random_string(length): 42 | letters_and_digits = string.ascii_letters + string.digits 43 | return ''.join(random.choice(letters_and_digits) for _ in range(length)) 44 | 45 | 46 | # 获取随机字符串 47 | def generate_random_string(length): 48 | s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()-=_+~`{}[]|:<>?/.' 49 | return ''.join(random.choice(s) for _ in range(length)) 50 | 51 | 52 | # AES加密 53 | def aes_encrypt(key, data): 54 | iv = '0102030405060708'.encode('utf-8') 55 | cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv) 56 | padded_data = pad(data.encode('utf-8'), AES.block_size, style='pkcs7') 57 | ciphertext = cipher.encrypt(padded_data) 58 | return base64.b64encode(ciphertext).decode('utf-8') 59 | 60 | 61 | # RSA加密 62 | def rsa_encrypt(key, data): 63 | public_key = RSA.import_key(key) 64 | cipher = PKCS1_v1_5.new(public_key) 65 | ciphertext = cipher.encrypt(base64.b64encode(data.encode('utf-8'))) 66 | return base64.b64encode(ciphertext).decode('utf-8') 67 | 68 | 69 | # 获取cookie 70 | def Phone(account, password): 71 | md5 = hashlib.md5() 72 | md5.update(password.encode()) 73 | Hash = md5.hexdigest() 74 | url = "https://account.xiaomi.com/pass/serviceLoginAuth2" 75 | headers = { 76 | "Content-Type": "application/x-www-form-urlencoded", 77 | "User-Agent": 78 | "Dalvik/2.1.0 (Linux; U; Android 12; M2007J17C Build/SKQ1.211006.001) APP/xiaomi.vipaccount APPV/220301 MK/UmVkbWkgTm90ZSA5IFBybw== PassportSDK/3.7.8 passport-ui/3.7.8", 79 | "Cookie": 80 | "deviceId=X0jMu7b0w-jcne-S; pass_o=2d25bb648d023d7f; sdkVersion=accountsdk-2020.01.09", 81 | "Host": "account.xiaomi.com", 82 | "Connection": "Keep-Alive", 83 | "Accept-Encoding": "gzip" 84 | } 85 | data = { 86 | "cc": "+86", 87 | "qs": "%3F_json%3Dtrue%26sid%3Dmiui_vip%26_locale%3Dzh_CN", 88 | "callback": "https://api.vip.miui.com/sts", 89 | "_json": "true", 90 | "user": account, 91 | "hash": Hash.upper(), 92 | "sid": "miui_vip", 93 | "_sign": "ZJxpm3Q5cu0qDOMkKdWYRPeCwps%3D", 94 | "_locale": "zh_CN" 95 | } 96 | Auth1 = requests.post(url=url, headers=headers, 97 | data=data).text.replace("&&&START&&&", "") 98 | Auth = json.loads(Auth1) 99 | ssecurity = Auth["ssecurity"] 100 | nonce = Auth["nonce"] 101 | sha1 = hashlib.sha1() 102 | Str = "nonce=" + str(nonce) + "&" + ssecurity 103 | sha1.update(Str.encode("utf-8")) 104 | clientSign = base64.encodebytes( 105 | binascii.a2b_hex(sha1.hexdigest().encode("utf-8"))).decode( 106 | encoding="utf-8").strip() 107 | nurl = Auth[ 108 | "location"] + "&_userIdNeedEncrypt=true&clientSign=" + clientSign 109 | 110 | resp = requests.get(url=nurl) 111 | return requests.utils.dict_from_cookiejar(resp.cookies) 112 | 113 | 114 | # 获取签到所需要的Token 115 | def get_token(): 116 | key = generate_random_string(16) 117 | public_key = """-----BEGIN PUBLIC KEY----- 118 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArxfNLkuAQ/BYHzkzVwtu 119 | g+0abmYRBVCEScSzGxJIOsfxVzcuqaKO87H2o2wBcacD3bRHhMjTkhSEqxPjQ/FE 120 | XuJ1cdbmr3+b3EQR6wf/cYcMx2468/QyVoQ7BADLSPecQhtgGOllkC+cLYN6Md34 121 | Uii6U+VJf0p0q/saxUTZvhR2ka9fqJ4+6C6cOghIecjMYQNHIaNW+eSKunfFsXVU 122 | +QfMD0q2EM9wo20aLnos24yDzRjh9HJc6xfr37jRlv1/boG/EABMG9FnTm35xWrV 123 | R0nw3cpYF7GZg13QicS/ZwEsSd4HyboAruMxJBPvK3Jdr4ZS23bpN0cavWOJsBqZ 124 | VwIDAQAB 125 | -----END PUBLIC KEY-----""" 126 | data = '{"type":0,"startTs":' + str(round(time.time() * 1000)) + ',"endTs":' + str(round( 127 | time.time() * 1000)) + ',"env":{"p1":"","p2":"","p3":"","p4":"","p5":"","p6":"","p7":"","p8":"","p9":"","p10":"","p11":"","p12":"","p13":"","p14":"","p15":"","p16":"","p17":"","p18":"","p19":5,"p20":"","p21":"","p22":5,"p23":"","p24":"","p25":"","p26":"","p28":"","p29":"","p30":"","p31":"","p32":"","p33":"","p34":""},"action":{"a1":[],"a2":[],"a3":[],"a4":[],"a5":[],"a6":[],"a7":[],"a8":[],"a9":[],"a10":[],"a11":[],"a12":[],"a13":[],"a14":[]},"force":false,"talkBack":false,"uid":"' + generate_random_string( 128 | 27) + '","nonce":{"t":' + str(round(time.time())) + ',"r":' + str( 129 | round(time.time())) + '},"version":"2.0","scene":"GROW_UP_CHECKIN"}' 130 | s = rsa_encrypt(public_key, key) 131 | d = aes_encrypt(key, data) 132 | url = 'https://verify.sec.xiaomi.com/captcha/v2/data?k=3dc42a135a8d45118034d1ab68213073&locale=zh_CN' 133 | data = {'s': s, 'd': d, 'a': 'GROW_UP_CHECKIN'} 134 | result = requests.post(url=url, data=data).json() 135 | if result['msg'] != '参数错误': 136 | return result['data']['token'] 137 | 138 | for i in range(len(mi_account)): 139 | c_list = [] 140 | for k in range(10): 141 | a = Phone(mi_account[i], mi_password[i]) 142 | if len(a) > 0: 143 | c_list.append(a) 144 | cookie = str(c_list[-1]).replace('{', '').replace('}', '').replace(',', ';').replace(': ', '=').replace('\'', 145 | '').replace( 146 | ' ', '') 147 | miui_vip_ph = "".join(re.findall('miui_vip_ph=(.*?);', cookie, re.S)) 148 | url = 'https://api.vip.miui.com/mtop/planet/vip/user/checkinV2' 149 | params = { 150 | 'ref': 'vipAccountShortcut', 151 | 'pathname': '/mio/checkIn', 152 | 'version': 'dev.231026', 153 | 'miui_vip_ph': miui_vip_ph 154 | } 155 | boundary = 'WebKitFormBoundary' + generate_Boundary_random_string(16) 156 | headers = { 157 | 'Host': 'api.vip.miui.com', 158 | 'Accept': 'application/json', 159 | 'Cookie': f'{cookie}', 160 | 'Content-Type': f'multipart/form-data; boundary=----{boundary}', 161 | 'Origin': 'https://web.vip.miui.com', 162 | 'Referer': 'https://web.vip.miui.com/' 163 | } 164 | formData = { 165 | 'miui_vip_ph': miui_vip_ph, 166 | 'token': get_token() 167 | } 168 | multipart_data = [] 169 | for key, value in formData.items(): 170 | multipart_data.append(f'------{boundary}\r\nContent-Disposition: form-data; name="{key}"\r\n\r\n{value}\r\n') 171 | multipart_data.append(f'------{boundary}--\r\n') 172 | user_url = 'https://api.vip.miui.com/api/community/user/home/page' 173 | html = requests.post(url=url, headers=headers, params=params, data=''.join(multipart_data)).json() 174 | html_user = requests.get(url=user_url, headers=headers) 175 | result_user = json.loads(html_user.text) 176 | userId = result_user['entity']['userId'] 177 | print('*************' + '\n' + f'开始第{i + 1}个账号签到' + '\n') 178 | print('userId: ' + userId + ' 用户名: ' + result_user['entity']['userName'] + ' 段位: ' + 179 | result_user['entity']['userGrowLevelInfo']['showLevel']) 180 | if html['status'] == 200: 181 | print("签到成功:获得成长值+" + str(html['entity'])) 182 | elif html['status'] == 401: 183 | print("签到失败:Cookie失效") 184 | else: 185 | print("签到失败:" + str(html['message'])) 186 | 187 | # 点赞任务 188 | print('开始加入点赞任务>>>>') 189 | for a in range(2): 190 | dzurl = 'https://api.vip.miui.com/mtop/planet/vip/content/announceThumbUp' 191 | dz_data = { 192 | 'postId': '36625780', 193 | 'sign': '36625780', 194 | 'timestamp': int(round(time.time() * 1000)) 195 | } 196 | dz_html = requests.get(url=dzurl, headers=headers, data=dz_data) 197 | dz_result = json.loads(dz_html.text) 198 | if dz_result['status'] == 200: 199 | print('点赞帖子成功成功') 200 | time.sleep(1) 201 | # 加入圈子 202 | print('开始加入圈子任务>>>>') 203 | unfollow_url = 'https://api.vip.miui.com/api/community/board/unfollow?boardId=558495' 204 | html_unfollow = requests.get(url=unfollow_url, headers=headers) 205 | result_unfollow = json.loads(html_user.text) 206 | if result_unfollow['status'] == 200: 207 | print('退出圈子成功') 208 | time.sleep(1) 209 | 210 | follow_url = 'https://api.vip.miui.com/api/community/board/follow?boardId=558495' 211 | html_follow = requests.get(url=follow_url, headers=headers) 212 | result_follow = json.loads(html_user.text) 213 | if result_follow['status'] == 200: 214 | print('加入圈子成功') 215 | time.sleep(1) 216 | 217 | # 浏览主页 218 | info_url = f'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByAction?userId={userId}&action=BROWSE_SPECIAL_PAGES_USER_HOME' 219 | html_info = requests.get(url=info_url, headers=headers) 220 | time.sleep(12) 221 | result_info = json.loads(html_info.text) 222 | if result_info['status'] == 200: 223 | print('浏览主页成功,获得积分: ' + str(result_info['entity']['score'])) 224 | else: 225 | print(result_info['message'] + ',今日已达上限') 226 | 227 | # 浏览专题 228 | print('开始浏览专题任务>>>>') 229 | llzt_url = f'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByAction?userId={userId}&action=BROWSE_SPECIAL_PAGES_SPECIAL_PAGE' 230 | html_llzt = requests.get(url=llzt_url, headers=headers) 231 | time.sleep(12) 232 | result_llzt = json.loads(html_llzt.text) 233 | # print(result_llzt) 234 | if result_llzt['status'] == 200: 235 | print('浏览主页成功,获得积分: ' + str(result_llzt['entity']['score'])) 236 | else: 237 | print(result_llzt['message'] + ',今日已达上限') 238 | 239 | # 浏览帖子 240 | print('开始浏览帖子任务>>>>') 241 | for a in range(3): 242 | watch_url = f'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByAction?userId={userId}&action=BROWSE_POST_10S' 243 | html_watch = requests.get(url=watch_url, headers=headers) 244 | time.sleep(12) 245 | result_watch = json.loads(html_watch.text) 246 | # print(result_watch) 247 | if result_watch['status'] == 200: 248 | print('浏览帖子成功,获得积分: ' + str(result_watch['entity']['score'])) 249 | else: 250 | print(result_watch['message'] + ',今日已达上限') 251 | # 拔萝卜 252 | carroturl = 'https://api.vip.miui.com/api/carrot/pull' 253 | resp_carrot = requests.post(url=carroturl, headers=headers, params=params) 254 | r_json = resp_carrot.json() 255 | if r_json['code'] == 401: 256 | print("社区拔萝卜失败:Cookie无效") 257 | elif r_json['code'] != 200: 258 | print("社区拔萝卜失败:" + str(r_json['entity']['message'])) 259 | print("社区拔萝卜结果:" + str(r_json['entity']['message'])) 260 | money_count = r_json['entity']['header']['moneyCount'] 261 | print("当前金币数:" + str(money_count)) 262 | -------------------------------------------------------------------------------- /xiaomibbs.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # ------------------------------- 4 | # @Author : github@wd210010 https://github.com/wd210010/just_for_happy 5 | # @Upadate by Rookie-wb-WH: https://github.com/Rookie-wb-WH/ql_scripts 6 | # @Time : 2023/2/27 13:23 7 | # ------------------------------- 8 | # cron "30 8,10,15 * * *" script-path=xxx.py,tag=匹配cron用 9 | # const $ = new Env('小米社区任务得成长值') 10 | ''' 11 | 2023.11.13 修复签到 需要安装 pycryptodome 依赖 12 | 13 | 小米签到 小米社区任务得成长值 14 | 配置帐号密码 一一对应 按需增删 不对上会出错 若帐号密码填写没有错误 还是报错应该是账号在非常用设备上登录, 需要验证码, 使用该设备安装图形化工具后自行前去验证https://web-alpha.vip.miui.com/page/info/mio/mio/internalTest 图形化工具怎么安装可参考https://cloud.tencent.com/developer/article/2069955 15 | 青龙变量export mi_account='' export mi_password='' 16 | 青龙变量 mi_account mi_password 17 | ''' 18 | 19 | import base64 20 | import binascii 21 | import hashlib 22 | import json 23 | import random 24 | import re 25 | import requests 26 | import string 27 | import time 28 | import os 29 | 30 | from Crypto.Cipher import AES 31 | from Crypto.Cipher import PKCS1_v1_5 32 | from Crypto.PublicKey import RSA 33 | from Crypto.Util.Padding import pad 34 | 35 | mi_account = os.getenv("mi_account").split('&') 36 | mi_password = os.getenv("mi_password").split('&') 37 | 38 | 39 | # 获取 WebKitFormBoundary 随机字符串 40 | def generate_Boundary_random_string(length): 41 | letters_and_digits = string.ascii_letters + string.digits 42 | return ''.join(random.choice(letters_and_digits) for _ in range(length)) 43 | 44 | 45 | # 获取随机字符串 46 | def generate_random_string(length): 47 | s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()-=_+~`{}[]|:<>?/.' 48 | return ''.join(random.choice(s) for _ in range(length)) 49 | 50 | 51 | # AES加密 52 | def aes_encrypt(key, data): 53 | iv = '0102030405060708'.encode('utf-8') 54 | cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv) 55 | padded_data = pad(data.encode('utf-8'), AES.block_size, style='pkcs7') 56 | ciphertext = cipher.encrypt(padded_data) 57 | return base64.b64encode(ciphertext).decode('utf-8') 58 | 59 | 60 | # RSA加密 61 | def rsa_encrypt(key, data): 62 | public_key = RSA.import_key(key) 63 | cipher = PKCS1_v1_5.new(public_key) 64 | ciphertext = cipher.encrypt(base64.b64encode(data.encode('utf-8'))) 65 | return base64.b64encode(ciphertext).decode('utf-8') 66 | 67 | 68 | # 获取cookie 69 | def Phone(account, password): 70 | md5 = hashlib.md5() 71 | md5.update(password.encode()) 72 | Hash = md5.hexdigest() 73 | url = "https://account.xiaomi.com/pass/serviceLoginAuth2" 74 | headers = { 75 | "Content-Type": "application/x-www-form-urlencoded", 76 | "User-Agent": 77 | "Dalvik/2.1.0 (Linux; U; Android 12; M2007J17C Build/SKQ1.211006.001) APP/xiaomi.vipaccount APPV/220301 MK/UmVkbWkgTm90ZSA5IFBybw== PassportSDK/3.7.8 passport-ui/3.7.8", 78 | "Cookie": 79 | "deviceId=X0jMu7b0w-jcne-S; pass_o=2d25bb648d023d7f; sdkVersion=accountsdk-2020.01.09", 80 | "Host": "account.xiaomi.com", 81 | "Connection": "Keep-Alive", 82 | "Accept-Encoding": "gzip" 83 | } 84 | data = { 85 | "cc": "+86", 86 | "qs": "%3F_json%3Dtrue%26sid%3Dmiui_vip%26_locale%3Dzh_CN", 87 | "callback": "https://api.vip.miui.com/sts", 88 | "_json": "true", 89 | "user": account, 90 | "hash": Hash.upper(), 91 | "sid": "miui_vip", 92 | "_sign": "ZJxpm3Q5cu0qDOMkKdWYRPeCwps%3D", 93 | "_locale": "zh_CN" 94 | } 95 | Auth1 = requests.post(url=url, headers=headers, 96 | data=data).text.replace("&&&START&&&", "") 97 | Auth = json.loads(Auth1) 98 | ssecurity = Auth["ssecurity"] 99 | nonce = Auth["nonce"] 100 | sha1 = hashlib.sha1() 101 | Str = "nonce=" + str(nonce) + "&" + ssecurity 102 | sha1.update(Str.encode("utf-8")) 103 | clientSign = base64.encodebytes( 104 | binascii.a2b_hex(sha1.hexdigest().encode("utf-8"))).decode( 105 | encoding="utf-8").strip() 106 | nurl = Auth[ 107 | "location"] + "&_userIdNeedEncrypt=true&clientSign=" + clientSign 108 | 109 | resp = requests.get(url=nurl) 110 | return requests.utils.dict_from_cookiejar(resp.cookies) 111 | 112 | 113 | # 获取签到所需要的Token 114 | def get_token(): 115 | key = generate_random_string(16) 116 | public_key = """-----BEGIN PUBLIC KEY----- 117 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArxfNLkuAQ/BYHzkzVwtu 118 | g+0abmYRBVCEScSzGxJIOsfxVzcuqaKO87H2o2wBcacD3bRHhMjTkhSEqxPjQ/FE 119 | XuJ1cdbmr3+b3EQR6wf/cYcMx2468/QyVoQ7BADLSPecQhtgGOllkC+cLYN6Md34 120 | Uii6U+VJf0p0q/saxUTZvhR2ka9fqJ4+6C6cOghIecjMYQNHIaNW+eSKunfFsXVU 121 | +QfMD0q2EM9wo20aLnos24yDzRjh9HJc6xfr37jRlv1/boG/EABMG9FnTm35xWrV 122 | R0nw3cpYF7GZg13QicS/ZwEsSd4HyboAruMxJBPvK3Jdr4ZS23bpN0cavWOJsBqZ 123 | VwIDAQAB 124 | -----END PUBLIC KEY-----""" 125 | data = '{"type":0,"startTs":' + str(round(time.time() * 1000)) + ',"endTs":' + str(round( 126 | time.time() * 1000)) + ',"env":{"p1":"","p2":"","p3":"","p4":"","p5":"","p6":"","p7":"","p8":"","p9":"","p10":"","p11":"","p12":"","p13":"","p14":"","p15":"","p16":"","p17":"","p18":"","p19":5,"p20":"","p21":"","p22":5,"p23":"","p24":"","p25":"","p26":"","p28":"","p29":"","p30":"","p31":"","p32":"","p33":"","p34":""},"action":{"a1":[],"a2":[],"a3":[],"a4":[],"a5":[],"a6":[],"a7":[],"a8":[],"a9":[],"a10":[],"a11":[],"a12":[],"a13":[],"a14":[]},"force":false,"talkBack":false,"uid":"' + generate_random_string( 127 | 27) + '","nonce":{"t":' + str(round(time.time())) + ',"r":' + str( 128 | round(time.time())) + '},"version":"2.0","scene":"GROW_UP_CHECKIN"}' 129 | s = rsa_encrypt(public_key, key) 130 | d = aes_encrypt(key, data) 131 | url = 'https://verify.sec.xiaomi.com/captcha/v2/data?k=3dc42a135a8d45118034d1ab68213073&locale=zh_CN' 132 | data = {'s': s, 'd': d, 'a': 'GROW_UP_CHECKIN'} 133 | result = requests.post(url=url, data=data).json() 134 | if result['msg'] != '参数错误': 135 | return result['data']['token'] 136 | 137 | for i in range(len(mi_account)): 138 | c_list = [] 139 | for k in range(10): 140 | a = Phone(mi_account[i], mi_password[i]) 141 | if len(a) > 0: 142 | c_list.append(a) 143 | cookie = str(c_list[-1]).replace('{', '').replace('}', '').replace(',', ';').replace(': ', '=').replace('\'', 144 | '').replace( 145 | ' ', '') 146 | miui_vip_ph = "".join(re.findall('miui_vip_ph=(.*?);', cookie, re.S)) 147 | url = 'https://api.vip.miui.com/mtop/planet/vip/user/checkinV2' 148 | params = { 149 | 'ref': 'vipAccountShortcut', 150 | 'pathname': '/mio/checkIn', 151 | 'version': 'dev.231026', 152 | 'miui_vip_ph': miui_vip_ph 153 | } 154 | boundary = 'WebKitFormBoundary' + generate_Boundary_random_string(16) 155 | headers = { 156 | 'Host': 'api.vip.miui.com', 157 | 'Accept': 'application/json', 158 | 'Cookie': f'{cookie}', 159 | 'Content-Type': f'multipart/form-data; boundary=----{boundary}', 160 | 'Origin': 'https://web.vip.miui.com', 161 | 'Referer': 'https://web.vip.miui.com/' 162 | } 163 | formData = { 164 | 'miui_vip_ph': miui_vip_ph, 165 | 'token': get_token() 166 | } 167 | multipart_data = [] 168 | for key, value in formData.items(): 169 | multipart_data.append(f'------{boundary}\r\nContent-Disposition: form-data; name="{key}"\r\n\r\n{value}\r\n') 170 | multipart_data.append(f'------{boundary}--\r\n') 171 | user_url = 'https://api.vip.miui.com/api/community/user/home/page' 172 | html = requests.post(url=url, headers=headers, params=params, data=''.join(multipart_data)).json() 173 | html_user = requests.get(url=user_url, headers=headers) 174 | result_user = json.loads(html_user.text) 175 | userId = result_user['entity']['userId'] 176 | print('*************' + '\n' + f'开始第{i + 1}个账号签到' + '\n') 177 | print('userId: ' + userId + ' 用户名: ' + result_user['entity']['userName'] + ' 段位: ' + 178 | result_user['entity']['userGrowLevelInfo']['showLevel']) 179 | if html['status'] == 200: 180 | print("签到成功:获得成长值+" + str(html['entity'])) 181 | elif html['status'] == 401: 182 | print("签到失败:Cookie失效") 183 | else: 184 | print("签到失败:" + str(html['message'])) 185 | 186 | # 点赞任务 187 | print('开始加入点赞任务>>>>') 188 | for a in range(2): 189 | dzurl = 'https://api.vip.miui.com/mtop/planet/vip/content/announceThumbUp' 190 | dz_data = { 191 | 'postId': '36625780', 192 | 'sign': '36625780', 193 | 'timestamp': int(round(time.time() * 1000)) 194 | } 195 | dz_html = requests.get(url=dzurl, headers=headers, data=dz_data) 196 | dz_result = json.loads(dz_html.text) 197 | if dz_result['status'] == 200: 198 | print('点赞帖子成功成功') 199 | time.sleep(1) 200 | # 加入圈子 201 | print('开始加入圈子任务>>>>') 202 | unfollow_url = 'https://api.vip.miui.com/api/community/board/unfollow?boardId=558495' 203 | html_unfollow = requests.get(url=unfollow_url, headers=headers) 204 | result_unfollow = json.loads(html_user.text) 205 | if result_unfollow['status'] == 200: 206 | print('退出圈子成功') 207 | time.sleep(1) 208 | 209 | follow_url = 'https://api.vip.miui.com/api/community/board/follow?boardId=558495' 210 | html_follow = requests.get(url=follow_url, headers=headers) 211 | result_follow = json.loads(html_user.text) 212 | if result_follow['status'] == 200: 213 | print('加入圈子成功') 214 | time.sleep(1) 215 | 216 | # 浏览主页 217 | info_url = f'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByAction?userId={userId}&action=BROWSE_SPECIAL_PAGES_USER_HOME' 218 | html_info = requests.get(url=info_url, headers=headers) 219 | time.sleep(12) 220 | result_info = json.loads(html_info.text) 221 | if result_info['status'] == 200: 222 | print('浏览主页成功,获得积分: ' + str(result_info['entity']['score'])) 223 | else: 224 | print(result_info['message'] + ',今日已达上限') 225 | 226 | # 浏览专题 227 | print('开始浏览专题任务>>>>') 228 | llzt_url = f'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByAction?userId={userId}&action=BROWSE_SPECIAL_PAGES_SPECIAL_PAGE' 229 | html_llzt = requests.get(url=llzt_url, headers=headers) 230 | time.sleep(12) 231 | result_llzt = json.loads(html_llzt.text) 232 | # print(result_llzt) 233 | if result_llzt['status'] == 200: 234 | print('浏览主页成功,获得积分: ' + str(result_llzt['entity']['score'])) 235 | else: 236 | print(result_llzt['message'] + ',今日已达上限') 237 | 238 | # 浏览帖子 239 | print('开始浏览帖子任务>>>>') 240 | for a in range(3): 241 | watch_url = f'https://api.vip.miui.com/mtop/planet/vip/member/addCommunityGrowUpPointByAction?userId={userId}&action=BROWSE_POST_10S' 242 | html_watch = requests.get(url=watch_url, headers=headers) 243 | time.sleep(12) 244 | result_watch = json.loads(html_watch.text) 245 | # print(result_watch) 246 | if result_watch['status'] == 200: 247 | print('浏览帖子成功,获得积分: ' + str(result_watch['entity']['score'])) 248 | else: 249 | print(result_watch['message'] + ',今日已达上限') 250 | # 拔萝卜 251 | carroturl = 'https://api.vip.miui.com/api/carrot/pull' 252 | resp_carrot = requests.post(url=carroturl, headers=headers, params=params) 253 | r_json = resp_carrot.json() 254 | if r_json['code'] == 401: 255 | print("社区拔萝卜失败:Cookie无效") 256 | elif r_json['code'] != 200: 257 | print("社区拔萝卜失败:" + str(r_json['entity']['message'])) 258 | print("社区拔萝卜结果:" + str(r_json['entity']['message'])) 259 | money_count = r_json['entity']['header']['moneyCount'] 260 | print("当前金币数:" + str(money_count)) 261 | -------------------------------------------------------------------------------- /xmbs.js: -------------------------------------------------------------------------------- 1 | 2 | 1 3 | /** 4 | 2 5 | * @ 临渊 6 | 3 7 | * 功能:小米运动刷步数 8 | 4 9 | * 日期:6-6 10 | 5 11 | * 变量格式:export xmbs='小米运动&密码&步数@xxx ' 多个账号用@分割 12 | 6 13 | * 定时一天一次 14 | 7 15 | * 更新成换行登录 16 | 8 17 | */ 18 | 9 19 | ​ 20 | 10 21 | const $ = new Env('小米步数'); 22 | 11 23 | const notify = $.isNode() ? require('./sendNotify') : ''; 24 | 12 25 | const Notify = 1; //0为关闭通知,1为打开通知,默认为1 26 | 13 27 | const debug = 0; //0为关闭调试,1为打开调试,默认为0 28 | 14 29 | ////////////////////// 30 | 15 31 | let xmbs = ($.isNode() ? process.env.xmbs : $.getdata("xmbs")) || ""; 32 | 16 33 | let xmbsArr = []; 34 | 17 35 | let data = ''; 36 | 18 37 | let msg = ''; 38 | 19 39 | let back = 0; 40 | 20 41 | 42 | 21 43 | 44 | 22 45 | !(async () => { 46 | 23 47 | 48 | 24 49 | if (!(await Envs())) 50 | 25 51 | return; 52 | 26 53 | else { 54 | 27 55 | 56 | 28 57 | ​ 58 | 29 59 | 60 | 30 61 | console.log(`\n\n========================================= \n脚本执行 - 北京时间(UTC+8):${new Date( 62 | 31 63 | new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 64 | 32 65 | 8 * 60 * 60 * 1000).toLocaleString()} \n=========================================\n`); 66 | 33 67 | ​ 68 | 34 69 | 70 | 35 71 | console.log(`\n=================== 共找到 ${xmbsArr.length} 个账号 ===================`) 72 | 36 73 | 74 | 37 75 | if (debug) { 76 | 38 77 | console.log(`【debug】 这是你的全部账号数组:\n ${xmbsArr}`); 78 | 39 79 | } 80 | 40 81 | 82 | 41 83 | 84 | 42 85 | for (let index = 0; index < xmbsArr.length; index++) { 86 | 43 87 | 88 | 44 89 | 90 | 45 91 | let num = index + 1 92 | 46 93 | console.log(`\n========= 开始【第 ${num} 个账号】=========\n`) 94 | 47 95 | 96 | 48 97 | bs = xmbsArr[index].split('&'); 98 | -------------------------------------------------------------------------------- /xqz.js: -------------------------------------------------------------------------------- 1 | /* 2 | @肥皂 3.22 闲趣赚 一天0.1-0.4或者更高(根据用户等级增加任务次数) 3 | 3.24 更新加入用户余额和信息。。。。 4 | 苹果&安卓下载地址:复制链接到微信打开 5 | 新人进去直接秒到账两个0.3.。。。(微信登录)花两分钟再完成下新人任务,大概秒到微信3元左右 6 | 感觉看账号等级,我的小号进去只能做五个任务,大号可以做十个。 7 | 建议做一下里面的任务,单价还是不错的,做完等级升上来了挂脚本收益也多一点。 8 | 抓取域名 wap.quxianzhuan.com 抓取cookie的全部数据。。 9 | 青龙变量 xqzck 多账户@隔开 10 | 更新加入用户余额和信息。。。。 11 | */ 12 | var _0xodm='jsjiami.com.v6',_0xodm_=['‮_0xodm'],_0x47f7=[_0xodm,'IsOGIMKifQ==','PMOQw4A=','w4c3f8O7wrQ=','ZemVnOi3vei3rOS4jeWLp++9mQ==','WBDCuiI=','wpDCpicUwr8=','wqjplb7otprotZrkua7liKjvvbo=','w5/DocKtEwc=','eDHCiUIhHwVmw7DCvMK4axzDjsOiwqLCjy/Dp8KrDsOww68wwoJbwrQ6w48aUDkJ','acKCVMOEBQ==','F1rDqsKSwowJw5XDgsOrw5XDg0NzS8Kdw4FGwrrCpQvDgsK6Bg3CsWDDg8KUcMKFwrLDuC8nwoE3MMKmwrczw5jCu8KJwrdEw6LCqMOdU8ORw6p3woLCihjDmsKrSFrDjlNGQ8KmQBHCkgYxCsOQwr8Ow4bCo19uwp7DvcOaV8KnRcKNKMOPUUg1w5HDtcKTAMOSw6LDtAs2RsOJw7xNOHzClcKEw7sywo7CgsODBk/Dr3EOdcKjD8Ktwrhpw7gLwpwNJcKMwopDw6QNdSbCvXjCjEMlwo5Jdj1RwopQQwHDtH3DtsOLwrksw6ltNg7CshZfK2p+w5IywoNDXsOHwrDCtgXDhMOqwrLCrsKLw4oIw5HDlMOOwqsOw4vCoMKVZsOYw7Ehw5TDqsOpwpLCksKPcC3CjMKgFg7CkS1pFMOzRH8oMcKxfcOLw4sIw7jCjDjCgsK6XsOSw6PDkjTDvcOUb8O8WMKMw5R9HsKmwrjDgsKrw5chwq9DaFYfwpDDtDrDo3JiDDNbw7/Cg8Kiw4FSw7vDg8OfJiI+N8OwZTzDsMKUw7rCsgoAworCozjDvMKqCsKow4XCjcK+wp4lwr/DhSkmw7x0wo7Cj8OOfBIRwoVywoJOw49lZQnDt2RGQMKIEsK5PHBdWcKJIsKqwqY8L8O5w5VdKsKsSX9OwpdDw6rCvsO9wooBGMK8aMO5FRdOwoEjJMKUwrsjdCPCpMKdRMO4wopQbsOxw6zCl8KVwq/CuTwbf8KTwpF1FWxgIHklwqIQcMKFwo0UwoBxw7lqwqjDtcK5QsKzw7PCpcOqRsOGw7BbLiXDqMOwQj3CqExPwqocKyjDncKLw6LCpsOkwqEJwp9HworCrcOAwo/DusKAEsOHwrJ3w7fCllUPTMONw6HCjgXCpiLDjcOhwqPCgA3DusOrwrgDw7bChsK7wqlPw5lzw6PDmsKUw5cew4HCjDbCmx/CmMONwqB9U0UcwpvDg3zDqwkOw5cZw40/GMO5w47DvnbCvRNEwosMPSdPw6B5w4ouw6oPwp7Dj0lWBMOKw7lsbx7ClsK6wqdAwr9bF8KUfw3DksKQJj4NwqR3wqnDpjZFw5vDsgTCjTbCggLCpRoAw6zCmBw8w60Sw6vClRDCsMKAw7TDsVTDlmE9w6bCicKmw519VVHCs1IKwqrClk/DmMOYOGzCuyNZwqBdVMKOw47CnsKswprDhkbCtDTCghQbTsK6UsOWw7nCtlkXwqNpAAzDlg7Cun3Ct8OFwpw9woIPCMKhwownwoVPQ8KTQDHCgz/DoXcyL2ZBwqhXw5bDrMOvFmnDncKow4XCk8OCwojCjF3CjCB7w6/CqyfClGsfw7F4IQ9FwoNFw7dhbMKON3QOLMKIwpDClTIHa8OAwrjDmV3Cv2oaIMOxw4LClygnE1x2MDjDlUNFwrAdw7zDlSPDusKXKmFXw4VHRMOUAEwOwpfDjDcabnLDiMK2C2gcwq/DrgBEw63Dm8OBwpoEwoBFTMOwwojCnWDDiWDCmMK1AMOoTjhBw4hHw7/CgHRYwrw0HcKbwpM5wrQbBhJcYcKjwrkqQcOEw7cAw6Irw4XDn05kwoBuw7p6HA3CuMOVMQ==','w7Y0Cw==','Uh5uD8KS','W+mVs+i0qui2oOmesuS4t+eUp+aIt++/j+ODhQ==','a8OiVcK4Og==','TR50CMKVw4g=','6Zej6La76LeZA8KIwr1A','wozCnsKAw6hmMQ==','w4M9VmF5wr54IyM=','w5I9ZQ==','w5TDp8KOPyA=','wp7DmcK2w7TCk8KzwpzDmEo=','w5HDgD8rwp4=','HyjChcOHJQ==','QT7CuhjCoQ==','dTNXIcKc','w5QCSmYm','w68eZsOew5E=','w7AMaw==','wo/CoRQtwrjCpE10w5Vawoshwr4o5Yee','w7AGYkkiwpc=','5Lme6Lac5YyVejfCogJmIsK8FgXCmFtsBsKt','w7YgeGRc','F8Ouw6bCi8KO','wo3ClC4Aw6Q=','GcO3BcKFew==','HcOPMMOSwpkr','w5rDni3DqMO8','Az7DrA==','fuW+uuWkqeOBh+mXqOi0rOi1tQ==','wrPCthITw48=','PsOww45ww5k=','w4fDtinDiTA=','PcOdJg==','wp3plK7oto7otrbpnabkuIXnlrzmioTvv6XjgY0=','44K5wrhGwrDljYbmjaPnjKPkv5rpoa7jgI0=','cyTCiVE6','w4TDtwzDlcObw4E=','w4bDo1dl','wrrCiMKiw7dw','aCLDtcOhWA==','w7nDh8KM','YOmUrOi3gei3ieS4tuWKh++9kg==','wrLCrAIGw4TCvXrDm8KwwqwKw7PDvcKqVMOHTMO9I3otIcOow6hrG0xhwpHDu8OJwpUtMijDkA7DhEDCi18hWy1ZwoEAb8KLw5DCgnDCkcO7F8Kfw6pQw7vCjMKTDB5Mbj8=','HzDDuRAM','wrjCsMKZ','elDDkl9n','XlAwBcKa','PgzCocOLDw==','w4DDl1srYQ==','w6/DqVREQg==','PMObw5wUKQ==','EMKcwp1ybg==','56+75bybA0jnp5fnubXnu4Hku7/kuoHku7bliq0=','w47DuEFpSw==','wqPDrsKhw7PCsw==','eA7Cp8OJFA==','w5nDpXBJWw==','w6fDgcKbNB8=','dyDChMOUJFk4bnY7wq4fBULCksKFw4ROw708wp/DksK7bHA9C8O0RsKyHcO9wr7Cun1RwrTCsgrDo14XFHPCm8OQQMOKw5M=','e8OEw6/DgE5hwoDDk8O3woE=','wroFY1w7wpdUwoHCtcKP','w7zChg80wod0w7BUwrQ=','wq/CusKeTA==','EMOGw47CkMKT','BUZabMK3','GcObwpY0cg==','44C+UcO+duWMguaMu+eMo+S+j+mhuOOCig==','ejFsjigbbaCUmiuU.coDSKm.WGtWv6=='];if(function(_0x2d158c,_0x5267c3,_0x228c42){function _0x247644(_0x3a135d,_0x2a2af7,_0x49ff78,_0x19dbdb,_0x48e387,_0x1d2c4f){_0x2a2af7=_0x2a2af7>>0x8,_0x48e387='po';var _0x2c4df0='shift',_0x4548da='push',_0x1d2c4f='‮';if(_0x2a2af7<_0x3a135d){while(--_0x3a135d){_0x19dbdb=_0x2d158c[_0x2c4df0]();if(_0x2a2af7===_0x3a135d&&_0x1d2c4f==='‮'&&_0x1d2c4f['length']===0x1){_0x2a2af7=_0x19dbdb,_0x49ff78=_0x2d158c[_0x48e387+'p']();}else if(_0x2a2af7&&_0x49ff78['replace'](/[eFgbbCUuUDSKWGtW=]/g,'')===_0x2a2af7){_0x2d158c[_0x4548da](_0x19dbdb);}}_0x2d158c[_0x4548da](_0x2d158c[_0x2c4df0]());}return 0xd98cb;};return _0x247644(++_0x5267c3,_0x228c42)>>_0x5267c3^_0x228c42;}(_0x47f7,0xfa,0xfa00),_0x47f7){_0xodm_=_0x47f7['length']^0xfa;};function _0x39d2(_0x14a187,_0x2c8b59){_0x14a187=~~'0x'['concat'](_0x14a187['slice'](0x1));var _0x1dcceb=_0x47f7[_0x14a187];if(_0x39d2['cyBWSE']===undefined){(function(){var _0x5620f1=typeof window!=='undefined'?window:typeof process==='object'&&typeof require==='function'&&typeof global==='object'?global:this;var _0x28fd2d='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';_0x5620f1['atob']||(_0x5620f1['atob']=function(_0x36d503){var _0x27a8c2=String(_0x36d503)['replace'](/=+$/,'');for(var _0x14c4b5=0x0,_0x398741,_0x2e0bac,_0x341908=0x0,_0x13699b='';_0x2e0bac=_0x27a8c2['charAt'](_0x341908++);~_0x2e0bac&&(_0x398741=_0x14c4b5%0x4?_0x398741*0x40+_0x2e0bac:_0x2e0bac,_0x14c4b5++%0x4)?_0x13699b+=String['fromCharCode'](0xff&_0x398741>>(-0x2*_0x14c4b5&0x6)):0x0){_0x2e0bac=_0x28fd2d['indexOf'](_0x2e0bac);}return _0x13699b;});}());function _0x145597(_0x433724,_0x2c8b59){var _0x5de13e=[],_0x205ea1=0x0,_0x52aed6,_0x39de4b='',_0x63fd89='';_0x433724=atob(_0x433724);for(var _0x385398=0x0,_0x532dd4=_0x433724['length'];_0x385398<_0x532dd4;_0x385398++){_0x63fd89+='%'+('00'+_0x433724['charCodeAt'](_0x385398)['toString'](0x10))['slice'](-0x2);}_0x433724=decodeURIComponent(_0x63fd89);for(var _0x2218a7=0x0;_0x2218a7<0x100;_0x2218a7++){_0x5de13e[_0x2218a7]=_0x2218a7;}for(_0x2218a7=0x0;_0x2218a7<0x100;_0x2218a7++){_0x205ea1=(_0x205ea1+_0x5de13e[_0x2218a7]+_0x2c8b59['charCodeAt'](_0x2218a7%_0x2c8b59['length']))%0x100;_0x52aed6=_0x5de13e[_0x2218a7];_0x5de13e[_0x2218a7]=_0x5de13e[_0x205ea1];_0x5de13e[_0x205ea1]=_0x52aed6;}_0x2218a7=0x0;_0x205ea1=0x0;for(var _0x3915c7=0x0;_0x3915c7<_0x433724['length'];_0x3915c7++){_0x2218a7=(_0x2218a7+0x1)%0x100;_0x205ea1=(_0x205ea1+_0x5de13e[_0x2218a7])%0x100;_0x52aed6=_0x5de13e[_0x2218a7];_0x5de13e[_0x2218a7]=_0x5de13e[_0x205ea1];_0x5de13e[_0x205ea1]=_0x52aed6;_0x39de4b+=String['fromCharCode'](_0x433724['charCodeAt'](_0x3915c7)^_0x5de13e[(_0x5de13e[_0x2218a7]+_0x5de13e[_0x205ea1])%0x100]);}return _0x39de4b;}_0x39d2['weUfxi']=_0x145597;_0x39d2['eNnPgT']={};_0x39d2['cyBWSE']=!![];}var _0x36f452=_0x39d2['eNnPgT'][_0x14a187];if(_0x36f452===undefined){if(_0x39d2['zGiWHB']===undefined){_0x39d2['zGiWHB']=!![];}_0x1dcceb=_0x39d2['weUfxi'](_0x1dcceb,_0x2c8b59);_0x39d2['eNnPgT'][_0x14a187]=_0x1dcceb;}else{_0x1dcceb=_0x36f452;}return _0x1dcceb;};const $=new Env(_0x39d2('‮0','XzrC'));let status;status=(status=$[_0x39d2('‮1','#4H(')](_0x39d2('‮2','uIh3'))||'1')>0x1?''+status:'';let xqzckArr=[],xqzcount='';let xqzck=($['isNode']()?process[_0x39d2('‫3','weK&')]['xqzck']:$['getdata']('xqzck'))||'';let xqzid='',xqztk='';!(async()=>{var _0x55a7c1={'orBje':function(_0x3d9df1){return _0x3d9df1();},'WLXvS':function(_0x59adb7,_0x5f06d4,_0x142623){return _0x59adb7(_0x5f06d4,_0x142623);},'mCwUH':function(_0x1c7e11,_0x16d57c){return _0x1c7e11+_0x16d57c;},'HEDSc':function(_0x1f5d99,_0x5cba52){return _0x1f5d99*_0x5cba52;},'rFFxU':function(_0x6159b8,_0x5668d1){return _0x6159b8-_0x5668d1;},'FFWmu':function(_0xcefed9,_0x245794){return _0xcefed9!==_0x245794;},'MyPAY':'VkgaL','nOiNL':function(_0x33e25c){return _0x33e25c();},'JLMMf':'LcqgK','MlTvQ':function(_0x16c644,_0xb3e2de){return _0x16c644!==_0xb3e2de;},'Fooqo':_0x39d2('‫4','EUbI'),'JpigR':function(_0x52bc02){return _0x52bc02();}};if(typeof $request!==_0x39d2('‫5','KA3y')){if(_0x55a7c1[_0x39d2('‫6','%iIs')](_0x55a7c1['MyPAY'],'VkgaL')){_0x55a7c1[_0x39d2('‮7','v0Nn')](resolve);}else{await _0x55a7c1[_0x39d2('‫8','GV6i')](xqzck);}}else{if(_0x55a7c1[_0x39d2('‮9','JUv5')]!==_0x39d2('‮a','qAxn')){xqzckArr=xqzck[_0x39d2('‮b','RHFD')]('@');console[_0x39d2('‮c','qAxn')](_0x39d2('‮d','z[7J')+xqzckArr[_0x39d2('‫e','qAxn')]+_0x39d2('‫f',']!Q4'));for(let _0x2c0f0c=0x0;_0x2c0f0c/)[0x1];console[_0x39d2('‮1b','lZuR')](_0x39d2('‮1c','*ScD')+_0x5497b6+_0x39d2('‮1d','F)D0')+_0x5e3e9e+'】');}}})()[_0x39d2('‫1e','K94p')](_0x848d15=>$[_0x39d2('‮1f','F)D0')](_0x848d15))['finally'](()=>$[_0x39d2('‫20','z[7J')]());function xqzlb(_0x8d8167=0x0){var _0x3bf983={'NVffO':function(_0x434d83,_0x1d93f5){return _0x434d83+_0x1d93f5;},'bCdXO':function(_0x54e068){return _0x54e068();},'rIiSd':function(_0x47304e,_0x49bb07){return _0x47304e===_0x49bb07;},'XytsM':'lDtXA','QsViw':function(_0x14a394,_0x4e71ae){return _0x14a394===_0x4e71ae;},'FAXle':'wGNFK'};return new Promise(_0x28fe4c=>{if(_0x3bf983[_0x39d2('‫21','#4H(')](_0x3bf983[_0x39d2('‮22','a)uq')],'NHhEC')){console[_0x39d2('‮23','EUbI')](_0x39d2('‮24','fwM@')+result['msg']);}else{let _0x3df897={'url':_0x39d2('‫25','A#B#'),'headers':JSON[_0x39d2('‫26','nY6I')]('{\x22Host\x22:\x22wap.quxianzhuan.com\x22,\x22Connection\x22:\x22keep-alive\x22,\x22Upgrade-Insecure-Requests\x22:\x221\x22,\x22User-Agent\x22:\x22Mozilla/5.0\x20(Linux;\x20Android\x2010;\x2016s\x20Pro\x20Build/QKQ1.191222.002;\x20wv)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Version/4.0\x20Chrome/83.0.4103.106\x20Mobile\x20Safari/537.36\x20\x20XiaoMi/MiuiBrowser/10.8.1\x20LT-APP/44/200\x22,\x22Accept\x22:\x22text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\x22,\x22x-app\x22:\x2296c1ea5a-9a52-44c9-8ac4-8dceafa065c8\x22,\x22X-Requested-With\x22:\x22com.quxianzhuan.wap\x22,\x22Sec-Fetch-Site\x22:\x22none\x22,\x22Sec-Fetch-Mode\x22:\x22navigate\x22,\x22Sec-Fetch-User\x22:\x22?1\x22,\x22Sec-Fetch-Dest\x22:\x22document\x22,\x22Referer\x22:\x22https://wap.quxianzhuan.com/reward/list/?xapp-target=blank\x22,\x22Accept-Encoding\x22:\x22gzip,\x20deflate\x22,\x22Accept-Language\x22:\x22zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\x22,\x22Cookie\x22:\x22'+xqzck+'\x22}')};$[_0x39d2('‫27','D[2Z')](_0x3df897,async(_0x190220,_0x3af933,_0x409111)=>{var _0x1d5449={'khrUf':function(_0x56d23f){return _0x56d23f();}};try{xqzid=_0x409111[_0x39d2('‫28','vIQK')](/reward_id":"(\d+)",/)[0x1];xqztk=xqzck[_0x39d2('‮29','MJIk')](/tzb_formhash_cookie=(\w+);/)[0x1];console[_0x39d2('‮c','qAxn')](_0x3bf983[_0x39d2('‮2a','v0Nn')]('\x0a闲趣赚匹配任务ID:',xqzid));await _0x3bf983['bCdXO'](xqzrw);}catch(_0x32f4e6){}finally{if(_0x3bf983[_0x39d2('‮2b','IKE$')](_0x39d2('‮2c','6#ww'),_0x3bf983[_0x39d2('‫2d','wh%A')])){_0x28fe4c();}else{_0x1d5449[_0x39d2('‫2e','Lb&R')](_0x28fe4c);}}},_0x8d8167);}});}function xqzrw(_0x2888ee=0x0){var _0x5ea225={'gZWmC':function(_0x53beb3,_0x918b3c){return _0x53beb3+_0x918b3c;},'ZHPUX':_0x39d2('‮2f','IKE$'),'tqjiW':function(_0x1277a6){return _0x1277a6();},'ripfJ':_0x39d2('‫30','6#ww')};return new Promise(_0x41ce33=>{var _0x4b087c={'ZLCPS':_0x39d2('‮31','KA3y'),'NjTne':function(_0x1bf7c4,_0x3e6c23){return _0x1bf7c4==_0x3e6c23;},'sSGZa':function(_0x1e0e2f,_0x32be6d){return _0x1e0e2f+_0x32be6d;},'pdleX':function(_0x1b23d9,_0x23a9f1){return _0x5ea225[_0x39d2('‮32','Ve8i')](_0x1b23d9,_0x23a9f1);},'coVjE':_0x5ea225[_0x39d2('‫33','6#ww')],'JIFAR':function(_0x32f184){return _0x5ea225['tqjiW'](_0x32f184);},'MARWE':_0x5ea225[_0x39d2('‮34','EUbI')]};let _0x579dd9={'url':_0x39d2('‮35','Ve8i'),'headers':JSON['parse']('{\x22Host\x22:\x22wap.quxianzhuan.com\x22,\x22Connection\x22:\x22keep-alive\x22,\x22Upgrade-Insecure-Requests\x22:\x221\x22,\x22User-Agent\x22:\x22Mozilla/5.0\x20(Linux;\x20Android\x2010;\x2016s\x20Pro\x20Build/QKQ1.191222.002;\x20wv)\x20AppleWebKit/537.36\x20(KHTML,\x20like\x20Gecko)\x20Version/4.0\x20Chrome/83.0.4103.106\x20Mobile\x20Safari/537.36\x20\x20XiaoMi/MiuiBrowser/10.8.1\x20LT-APP/44/200\x22,\x22Accept\x22:\x22text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\x22,\x22x-app\x22:\x2296c1ea5a-9a52-44c9-8ac4-8dceafa065c8\x22,\x22X-Requested-With\x22:\x22com.quxianzhuan.wap\x22,\x22Sec-Fetch-Site\x22:\x22none\x22,\x22Sec-Fetch-Mode\x22:\x22navigate\x22,\x22Sec-Fetch-User\x22:\x22?1\x22,\x22Sec-Fetch-Dest\x22:\x22document\x22,\x22Referer\x22:\x22https://wap.quxianzhuan.com/reward/list/?xapp-target=blank\x22,\x22Accept-Encoding\x22:\x22gzip,\x20deflate\x22,\x22Accept-Language\x22:\x22zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\x22,\x22Cookie\x22:\x22'+xqzck+'\x22}'),'body':_0x39d2('‫36','MPxS')+xqzid+_0x39d2('‫37','qAxn')+xqztk+_0x39d2('‫38','mVvS')};$[_0x39d2('‮39','D[2Z')](_0x579dd9,async(_0x216874,_0x50e484,_0x53fa76)=>{if(_0x39d2('‫3a','NiW#')===_0x4b087c['ZLCPS']){try{let _0x4dbc7e=_0x53fa76[_0x39d2('‫3b','YLkM')](/available_money":(.+?),"/)[0x1];let _0x6e63b2=_0x53fa76[_0x39d2('‮3c',']!Q4')](/UID:(.+?)\<\/span\>/)[0x1];console['log']('\x0a闲趣赚靓仔用户:【'+_0x6e63b2+_0x39d2('‫3d','GV6i')+_0x4dbc7e+'】');}catch(_0x20e178){}finally{_0x41ce33();}}else{try{const _0x35ebda=JSON['parse'](_0x53fa76);if(_0x4b087c['NjTne'](_0x35ebda[_0x39d2('‫3e','lZuR')],0x1)){console[_0x39d2('‮3f','GlR)')](_0x4b087c['sSGZa'](_0x4b087c[_0x39d2('‮40','weK&')](_0x39d2('‫41','K@)D'),_0x35ebda['msg']),_0x4b087c['coVjE']));await $[_0x39d2('‮42','GV6i')](0x2af8);await _0x4b087c[_0x39d2('‮43','mVvS')](xqzlb);}else{console['log'](_0x39d2('‫44','z[7J')+_0x35ebda['msg']);}}catch(_0x1ec8c9){}finally{if('xdnrf'!==_0x4b087c['MARWE']){_0x4b087c[_0x39d2('‫45','EUbI')](_0x41ce33);}else{_0x41ce33();}}}},_0x2888ee);});}function xqzxx(_0x330473=0x0){return new Promise(_0x51f24f=>{let _0x54f1fa={'url':_0x39d2('‫46','K94p'),'headers':JSON[_0x39d2('‫47','GPfi')](_0x39d2('‫48','s[%2')+xqzck+'\x22}')};$[_0x39d2('‫49','PP[x')](_0x54f1fa,async(_0x3bfce3,_0x1a61ad,_0x4ac891)=>{try{let _0x31cd8c=_0x4ac891['match'](/available_money":(.+?),"/)[0x1];let _0x318a42=_0x4ac891[_0x39d2('‫4a','JUv5')](/UID:(.+?)\<\/span\>/)[0x1];console['log'](_0x39d2('‮4b','NiW#')+_0x318a42+'】\x20-\x20可提现余额【'+_0x31cd8c+'】');}catch(_0x147b1e){}finally{_0x51f24f();}},_0x330473);});}function rand(_0x55047e,_0x5f4ee9){var _0x253226={'ggzfO':function(_0x217605,_0x739a8,_0x25f69f){return _0x217605(_0x739a8,_0x25f69f);},'fwQfS':function(_0x52c6b1,_0x59640f){return _0x52c6b1+_0x59640f;},'SwwXA':function(_0x3efd66,_0x4d12ef){return _0x3efd66-_0x4d12ef;}};return _0x253226[_0x39d2('‮4c','bV^@')](parseInt,_0x253226['fwQfS'](Math[_0x39d2('‫4d','JUv5')]()*(_0x253226['SwwXA'](_0x5f4ee9,_0x55047e)+0x1),_0x55047e),0xa);};_0xodm='jsjiami.com.v6'; 13 | 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, 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("", `\ud83d\udd14${this.name}, \u5f00\u59cb!`) } 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("@"), a = { url: `http://${h}/v1/scripting/evaluate`, body: { script_text: t, mock_type: "cron", timeout: r }, headers: { "X-Key": o, Accept: "*/*" } }; this.post(a, (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(); 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) { let e = { "M+": (new Date).getMonth() + 1, "d+": (new Date).getDate(), "H+": (new Date).getHours(), "m+": (new Date).getMinutes(), "s+": (new Date).getSeconds(), "q+": Math.floor(((new Date).getMonth() + 3) / 3), S: (new Date).getMilliseconds() }; /(y+)/.test(t) && (t = t.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length))); for (let s in e) new RegExp("(" + s + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[s] : ("00" + e[s]).substr(("" + e[s]).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 } } } }; this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r))); let h = ["", "==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="]; h.push(e), s && h.push(s), i && h.push(i), console.log(h.join("\n")), this.logs = this.logs.concat(h) } 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("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t) } wait(t) { return new Promise(e => setTimeout(e, t)) } done(t = {}) { const e = (new Date).getTime(), s = (e - this.startTime) / 1e3; this.log("", `\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`), this.log(), (this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t) } }(t, e) } 14 | -------------------------------------------------------------------------------- /yysign.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | # -- coding: utf-8 -- 3 | # @Time : 2023/6/30 10:23 4 | # @Author : github@wd210010 5 | # @Source : https://github.com/wd210010/only_for_happly 6 | # ------------------------------- 7 | # cron "0 0 6,8,20 * * *" script-path=xxx.py,tag=匹配cron用 8 | # const $ = new Env('雨云签到'); 9 | 10 | import json,requests,os,time 11 | 12 | 13 | ##变量雨云账号密码 注册地址https://www.rainyun.com/MTQwODE4_ 登录后积分中心里面 赚钱积分 (如绑定微信 直接就有2000分)就可以用积分兑换主机 需要每天晚上八点蹲点 14 | yyusername=os.getenv("yyusername") 15 | yypassword=os.getenv("yypassword") 16 | 17 | 18 | import json ,requests ,os ,time #line:8 19 | yyusername =os .getenv ("yyusername")#line:12 20 | yypassword =os .getenv ("yypassword")#line:13 21 | def login_sign ():#line:17 22 | O00OOO00O0OO0OO00 =requests .session ()#line:18 23 | OOOO000000000O0O0 =O00OOO00O0OO0OO00 .post ('https://api.v2.rainyun.com/user/login',headers ={"Content-Type":"application/json"},data =json .dumps ({"field":f"{yyusername}","password":f"{yypassword}"}))#line:19 24 | if OOOO000000000O0O0 .text .find ("200")>-1 :#line:20 25 | print ("登录成功")#line:21 26 | O000OOOOO000OOO0O =OOOO000000000O0O0 .cookies .get_dict ()['X-CSRF-Token']#line:22 27 | else :#line:24 28 | print (f"登录失败,响应信息:{OOOO000000000O0O0.text}")#line:25 29 | O000O0OOOO00OOOOO ={'x-csrf-token':O000OOOOO000OOO0O ,}#line:31 30 | O0O0O000OOOO0OOO0 =O00OOO00O0OO0OO00 .post ('https://api.v2.rainyun.com/user/reward/tasks',headers =O000O0OOOO00OOOOO ,data =json .dumps ({"task_name":"每日签到","verifyCode":""}))#line:32 31 | print ('开始签到:签到结果 '+O0O0O000OOOO0OOO0 .text )#line:33 32 | print ('尝试20次服务器兑换!')#line:35 33 | for OO00000OO0OO0000O in range (200):#line:36 34 | try: 35 | OOOO00OO000O0O000 =O00OOO00O0OO0OO00 .post ('https://api.v2.rainyun.com/user/reward/items',headers =O000O0OOOO00OOOOO ,data ='{"item_id":107}')#line:37 36 | OOO0O0OO0O000O0O0 =O00OOO00O0OO0OO00 .post ('https://api.v2.rainyun.com/user/reward/items',headers =O000O0OOOO00OOOOO ,data ='{"item_id":106}')#line:38 37 | print (f'第{OO00000OO0OO0000O+1}次尝试兑换云服务器 '+json .loads (OOOO00OO000O0O000 .text )['message'])#line:39 38 | print (f'第{OO00000OO0OO0000O+1}次尝试兑换云服务器 '+json .loads (OOO0O0OO0O000O0O0 .text )['message'])#line:40 39 | except: 40 | print('try later!!') 41 | time .sleep (5 )#line:41 42 | if __name__ =='__main__':#line:44 43 | login_sign ()#line:45 44 | -------------------------------------------------------------------------------- /七猫抽奖领宝箱.py: -------------------------------------------------------------------------------- 1 | import json 2 | import random 3 | import requests 4 | import time 5 | 6 | 教程地址:https:wjkjy.cn 7 | #只需要Authorization,写在脚本里就行了,手动挂满听书180分钟就可以,一天跑一次,一定先挂满180分钟再跑 8 | Authorization = "" 9 | t = time.time() 10 | # 查余额 11 | def coin(): 12 | url = "https://api-gw.wtzw.com/welf/h5/v1/task-list" 13 | headers = { 14 | "Authorization": Authorization 15 | } 16 | data = { 17 | "module_sign": [ 18 | { 19 | "sign": "9fdefb36c2ec66942d79b1a9a0a8d85d", 20 | "category": "time_limit" 21 | }, 22 | { 23 | "sign": "0d7debfbc25c2184926b23b480bd2450", 24 | "category": "daily_task" 25 | } 26 | ], 27 | "t": t 28 | } 29 | getJson = json.dumps(data).encode("utf-8") 30 | response = requests.post(url=url, headers=headers, data=getJson) 31 | # print(response.text) 32 | jsondata = json.loads(response.text) 33 | result = jsondata["user"]["coin_data"] 34 | print("余额是" + result + "金币") 35 | 36 | 37 | # 五次幸运抽奖 38 | def lucky_draw(): 39 | print("=======开始幸运抽奖=======\r") 40 | url = "https://xiaoshuo.wtzw.com/api/v2/lucky-draw/do-extractin" 41 | headers = { 42 | "Authorization": Authorization 43 | } 44 | data = { 45 | "t": t, 46 | "apiVersion": 20190309143259 - 1.9 47 | } 48 | for i in range(0, 5): 49 | response = requests.get(url=url, headers=headers, params=data) 50 | print(response.text) 51 | time.sleep(random.randint(1, 5)) 52 | 53 | 54 | # 五次幸运7抽奖 55 | def lucky_draw_seven(): 56 | print("=======开始幸运7抽奖=======\r") 57 | url = "https://api-gw.wtzw.com/lucky-seven/h5/v1/lottery" 58 | querystring = {"t": t} 59 | payload = "source=3&apiVersion=20190309143259 - 1.9" 60 | headers = { 61 | "Authorization": Authorization, 62 | "content-type": "application/x-www-form-urlencoded" 63 | } 64 | for i in range(0, 5): 65 | response = requests.post(url=url, data=payload, headers=headers, params=querystring) 66 | jsondata = json.loads(response.text) 67 | result = jsondata["data"]["title"] 68 | print(result) 69 | time.sleep(random.randint(1, 5)) 70 | 71 | 72 | # 领宝箱 73 | def box(): 74 | print("=======开始领宝箱=======\r") 75 | url = "https://api-gw.wtzw.com/welf/h5/v1/task/treasure/reward" 76 | headers = { 77 | "Authorization": Authorization, 78 | "content-type": "multipart/form-data;" 79 | } 80 | querystring_box = {"t": t} 81 | response_box = requests.post(url=url,headers=headers, params=querystring_box) 82 | print(response_box.text) 83 | time.sleep(random.randint(1, 5)) 84 | 85 | 86 | # 领宝箱视频 87 | def box_video(): 88 | print("=======开始领宝箱视频=======\r") 89 | url = "https://api-gw.wtzw.com/welf/h5/v1/task/treasure/video/reward" 90 | headers = { 91 | "Authorization": Authorization, 92 | "content-type": "application/json" 93 | } 94 | querystring = {"t": t} 95 | payload = { 96 | "position": "welfare_treasurebox_timely", 97 | "video_prefix": "task_video_two" 98 | } 99 | 100 | response = requests.request("POST", url, json=payload, headers=headers, params=querystring) 101 | print(response.text) 102 | time.sleep(random.randint(1, 5)) 103 | 104 | 105 | # 100次金币 106 | def coin_150(): 107 | print("=======开始领取100次150金币=======\r") 108 | url = "https://api-ks.wtzw.com/api/v1/coin/add" 109 | payload = "position_id=inchapter_top&type=6&sign=1" 110 | headers = { 111 | "Authorization": Authorization, 112 | "Host": "api-ks.wtzw.com", 113 | "Content-Type": "application/x-www-form-urlencoded" 114 | } 115 | for i in range(0, 101): 116 | response = requests.post(url=url, data=payload, headers=headers) 117 | jsondata = json.loads(response.text) 118 | print("增加了" + jsondata["data"]["coin"] + "金币", "剩余" + jsondata["data"]["times"] + "次") 119 | time.sleep(random.randint(1, 5)) 120 | 121 | 122 | def finish_reward(): 123 | # 113,161 124 | task_id = [22, 24, 154, 155, 156, 157, 158, 159, 160, 100, 105, 111, 113, 115, 116, 161, 42, 43, 44, 45, 46, 47] 125 | url = "https://api-gw.wtzw.com/welf/h5/v1/task/finish-task" 126 | do_url = "https://api-gw.wtzw.com/welf/h5/v1/task/reward" 127 | headers = { 128 | "Authorization": Authorization 129 | } 130 | for id in task_id: 131 | data = { 132 | "t": t, 133 | "task_id": id 134 | 135 | } 136 | task_data = { 137 | "t": t, 138 | "task_id": id, 139 | "type_prefix": "task" 140 | } 141 | video_data = { 142 | "t": t, 143 | "task_id": id, 144 | "type_prefix": "video" 145 | } 146 | if id == 113: 147 | for i in range(0, 5): 148 | r4 = requests.post(url=url, headers=headers, data=data) 149 | print(r4.text) 150 | time.sleep(random.randint(1, 5)) 151 | r5 = requests.post(url=do_url, headers=headers, data=task_data) 152 | print(r5.text) 153 | time.sleep(random.randint(1, 5)) 154 | r6 = requests.post(url=do_url, headers=headers, data=video_data) 155 | print(r6.text) 156 | time.sleep(random.randint(1, 5)) 157 | else: 158 | r1 = requests.post(url=url, headers=headers, data=data) 159 | print(r1.text) 160 | time.sleep(random.randint(1, 5)) 161 | r2 = requests.post(url=do_url, headers=headers, data=task_data) 162 | print(r2.text) 163 | time.sleep(random.randint(1, 5)) 164 | r3 = requests.post(url=do_url, headers=headers, data=video_data) 165 | print(r3.text) 166 | time.sleep(random.randint(1, 5)) 167 | 168 | 169 | if __name__ == '__main__': 170 | # lucky_draw() 171 | # coin_150() 172 | lucky_draw_seven() 173 | box() 174 | box_video() 175 | finish_reward() 176 | # coin() 177 | --------------------------------------------------------------------------------