From 6f9c3b6dbee45a119c18bd4e890dcf04ec8bfc9a Mon Sep 17 00:00:00 2001 From: Hex Date: Mon, 6 Mar 2023 16:37:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E6=8A=BD=E5=A5=96=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bot.js | 5 +- smzdm_lottery.js | 181 ++++++++++++++++++++++++++++------------------- 2 files changed, 112 insertions(+), 74 deletions(-) diff --git a/bot.js b/bot.js index 2a910a5..673fa89 100644 --- a/bot.js +++ b/bot.js @@ -7,7 +7,7 @@ const APP_VERSION = '10.4.26'; const APP_VERSION_REV = '866'; const DEFAULT_USER_AGENT = `smzdm_android_V${APP_VERSION} rv:${APP_VERSION_REV} (Redmi Note 3;Android10.0;zh)smzdmapp`; -const DEFAULT_WEB_USER_AGENT = `Mozilla/5.0 (Linux; Android 10.0; Redmi Build/Redmi Note 3; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36{ smzdm_android_V${APP_VERSION} rv:${APP_VERSION_REV} (Redmi;Android10.0;zh) jsbv_1.0.0 webv_2.0 smzdmapp }`; +const DEFAULT_WEB_USER_AGENT = `Mozilla/5.0 (Linux; Android 10.0; Redmi Build/Redmi Note 3; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36 smzdm_android_V${APP_VERSION} rv:${APP_VERSION_REV} (Redmi;Android10.0;zh) jsbv_1.0.0 webv_2.0 smzdmapp`; const SIGN_KEY = 'apr1$AwP!wRRT$gJ/q.X24poeBInlUJC'; @@ -157,5 +157,6 @@ class SmzdmBot { module.exports = { SmzdmBot, requestApi, - removeTags + removeTags, + parseJSON }; diff --git a/smzdm_lottery.js b/smzdm_lottery.js index ed49771..9dd0e7b 100644 --- a/smzdm_lottery.js +++ b/smzdm_lottery.js @@ -6,106 +6,143 @@ cron: 10 8 * * * */ const Env = require('./env'); +const { SmzdmBot, requestApi, parseJSON } = require('./bot'); const notify = require('./sendNotify'); +// ------------------------------------ + const $ = new Env('什么值得买抽奖'); -let cookiesArr = []; - -// 判断环境变量里面是否有 cookie -if (process.env.SMZDM_COOKIE) { - if (process.env.SMZDM_COOKIE.indexOf('&') > -1) { - cookiesArr = process.env.SMZDM_COOKIE.split('&'); - } else if (process.env.SMZDM_COOKIE.indexOf('\n') > -1) { - cookiesArr = process.env.SMZDM_COOKIE.split('\n'); - } else { - cookiesArr = [process.env.SMZDM_COOKIE]; +class SmzdmLotteryBot extends SmzdmBot { + constructor(cookie) { + super(cookie); } -} -// 每日抽奖 -async function lottery(cookie) { - let activeId = ''; + async run() { + const activityId = await this.getActivityId(); - try { - const resp = await $.http.get({ - url: "https://m.smzdm.com/zhuanti/life/choujiang/", + if (!activityId) { + return { + isSuccess: false + }; + } + + const { isSuccess, data, response } = await requestApi('https://zhiyou.smzdm.com/user/lottery/jsonp_get_current', { + sign: false, + parseJSON: false, headers: { - Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", - "Accept-Encoding": "gzip, deflate, br", - "Accept-Language": "zh-cn", - Connection: "keep-alive", - Host: "m.smzdm.com", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/smzdm 10.4.25 rv:93.4 (iPhone13,4; iOS 14.5; zh_CN)/iphone_smzdmapp/10.4.25/wkwebview/jsbv_1.0.0", - Cookie: cookie + ...this.getHeadersForWeb(), + Referer: 'https://m.smzdm.com/' + }, + data: { + active_id: activityId, + callback: `jQuery34107538452897131465_${new Date().getTime()}` } }); - let _activeId = /name\s?=\s?\"lottery_activity_id\"\s+value\s?=\s?\"([a-zA-Z0-9]*)\"/.exec(resp.body); - if (_activeId) { - activeId = _activeId[1]; - } else { - $.log(`获取每日抽奖activeId失败`); - } + if (isSuccess) { + const match = data.match(/\((.*)\)/); - if (!!activeId) { - const resp = await $.http.get({ - url: `https://zhiyou.smzdm.com/user/lottery/jsonp_draw?callback=jQuery34109305207178886287_${new Date().getTime()}&active_id=${activeId}&_=${new Date().getTime()}`, - headers: { - Accept: "*/*", - "Accept-Encoding": "gzip, deflate, br", - "Accept-Language": "zh-cn", - Connection: "keep-alive", - Host: "zhiyou.smzdm.com", - Referer: "https://m.smzdm.com/zhuanti/life/choujiang/", - "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148/smzdm 10.4.25 rv:93.4 (iPhone13,4; iOS 14.5; zh_CN)/iphone_smzdmapp/10.4.25/wkwebview/jsbv_1.0.0", - Cookie: cookie + if (match) { + const result = parseJSON(match[1]); + + if (result.error_code == 0 || result.error_code == 1 || result.error_code == 4) { + return result.error_msg; } - }); + else { + $.log(`每日抽奖失败,接口响应异常:${response}`); - let data = /\((.*)\)/.exec(resp.body); - let obj = JSON.parse(data[1]); - if ( - obj["error_code"] === 0 || - obj["error_code"] === 1 || - obj["error_code"] === 4 - ) { - return obj["error_msg"]; - } else { - $.log(`每日抽奖失败,接口响应异常:${data}`); - return "每日抽奖失败,接口响应异常"; + return '每日抽奖失败,接口响应异常'; + } + } + else { + $.log(`每日抽奖失败,接口响应异常: ${response}`); + + return '每日抽奖失败,接口响应异常'; } } - } catch (error) { - $.log(`每日抽奖失败,${error}`); - return "每日抽奖失败,接口响应异常"; + else { + $.log(`每日抽奖失败,接口响应异常: ${response}`); + + return '每日抽奖失败,接口响应异常'; + } + } + + async getActivityId() { + const { isSuccess, data, response } = await requestApi('https://m.smzdm.com/zhuanti/life/choujiang/', { + sign: false, + parseJSON: false, + headers: this.getHeadersForWeb() + }); + + if (isSuccess) { + const match = data.match(/name\s?=\s?"lottery_activity_id"\s+value\s?=\s?"([a-zA-Z0-9]*)"/i); + + if (match) { + $.log(`转盘抽奖ID: ${match[1]}`); + + return match[1]; + } + else { + $.log(`未找到转盘抽奖ID`); + + return false; + } + } + else { + $.log(`获取转盘抽奖失败: ${response}`); + + return false; + } } } !(async () => { - if (!cookiesArr[0]) { + let cookies = []; + + // 判断环境变量里面是否有 cookie + if (process.env.SMZDM_COOKIE) { + if (process.env.SMZDM_COOKIE.indexOf('&') > -1) { + cookies = process.env.SMZDM_COOKIE.split('&'); + } + else if (process.env.SMZDM_COOKIE.indexOf('\n') > -1) { + cookies = process.env.SMZDM_COOKIE.split('\n'); + } + else { + cookies = [process.env.SMZDM_COOKIE]; + } + } + + if (!cookies[0]) { $.log('\n请先设置 SMZDM_COOKIE 环境变量'); + return; } let notifyContent = ''; - for (let i = 0; i < cookiesArr.length; i++) { - if (cookiesArr[i]) { - if (i > 0) { - $.log('\n延时 5 秒执行\n'); - await $.wait(5000) - } + for (let i = 0; i < cookies.length; i++) { + const cookie = cookies[i]; - const cookie = cookiesArr[i]; - const sep = `\n******开始账号${i + 1}******\n`; - - const msg = await lottery(cookie); - - notifyContent += sep + msg + "\n"; - - $.log(sep + msg + "\n"); + if (!cookie) { + continue; } + + if (i > 0) { + $.log('\n延迟 5 秒执行\n'); + await $.wait(5000); + } + + const sep = `\n******开始账号${i + 1}******\n`; + + $.log(sep); + + const bot = new SmzdmLotteryBot(cookie); + const msg = await bot.run(); + + $.log(msg + '\n'); + + notifyContent += sep + msg + '\n'; } await notify.sendNotify($.name, notifyContent);