From de1c1dc859a31c860a0dd7c944a63bfbbdcc77d1 Mon Sep 17 00:00:00 2001 From: Hex Date: Thu, 23 Mar 2023 14:34:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=B3=E6=B3=A8=E5=93=81?= =?UTF-8?q?=E7=89=8C=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + bot.js | 2 +- smzdm_task.js | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d6b53c..3045376 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ * ~免费抽奖~ * 关注用户 * 关注栏目 + * 关注品牌 * 限时累计活动 ## 使用方法 diff --git a/bot.js b/bot.js index 7df0929..5e6e154 100644 --- a/bot.js +++ b/bot.js @@ -47,7 +47,7 @@ const signFormData = (data) => { }; const keys = Object.keys(newData).filter(key => newData[key] !== '').sort(); - const signData = keys.map(key => `${key}=${newData[key]}`).join('&'); + const signData = keys.map(key => `${key}=${String(newData[key]).replace(/\s+/, '')}`).join('&'); const sign = crypto.createHash('md5').update(`${signData}&key=${SIGN_KEY}`).digest('hex').toUpperCase(); return { diff --git a/smzdm_task.js b/smzdm_task.js index b26885a..2e344ad 100644 --- a/smzdm_task.js +++ b/smzdm_task.js @@ -90,6 +90,15 @@ class SmzdmTaskBot extends SmzdmBot { $.log('等候 5 秒'); await $.wait(5000); } + // 关注品牌 + else if (task.task_event_type == 'interactive.follow.brand') { + const { isSuccess } = await this.doFollowBrandTask(task); + + notifyMsg += `${isSuccess ? '🟢' : '❌'}完成[${task.task_name}]任务${isSuccess ? '成功' : '失败!请查看日志'}\n`; + + $.log('等候 5 秒'); + await $.wait(5000); + } // 收藏任务 else if (task.task_event_type == 'interactive.favorite') { const { isSuccess } = await this.doFavoriteTask(task); @@ -308,6 +317,52 @@ class SmzdmTaskBot extends SmzdmBot { return await this.receiveReward(task.task_id); } + // 执行关注品牌任务(先取关,再关注,最后取关) + async doFollowBrandTask(task) { + $.log(`开始任务: ${task.task_name}`); + + // 获取品牌信息 + const brandDetail = await this.getBrandDetail(task.task_redirect_url.link_val); + + if (!brandDetail.id) { + return { + isSuccess: false + }; + } + + $.log('等候 3 秒'); + await $.wait(3000); + + await this.followBrand({ + method: 'dingyue_lanmu_del', + keywordId: brandDetail.id, + keyword: brandDetail.title + }); + + $.log('等候 3 秒'); + await $.wait(3000); + + await this.followBrand({ + method: 'dingyue_lanmu_add', + keywordId: brandDetail.id, + keyword: brandDetail.title + }); + + $.log('等候 3 秒'); + await $.wait(3000); + + await this.followBrand({ + method: 'dingyue_lanmu_del', + keywordId: brandDetail.id, + keyword: brandDetail.title + }); + + $.log('延迟 5 秒领取奖励'); + await $.wait(5000); + + return await this.receiveReward(task.task_id); + } + // 执行抽奖任务 async doCrowdTask(task) { $.log(`开始任务: ${task.task_name}`); @@ -959,6 +1014,66 @@ class SmzdmTaskBot extends SmzdmBot { return JSON.stringify({...defaultObj, ...obj}); } + + // 关注品牌 + async followBrand({keywordId, keyword, method}) { + const touchstone = this.getTouchstoneEvent({ + event_value: { + cid: '44', + is_detail: true, + aid: String(keywordId) + }, + sourceMode: '百科_品牌详情页', + sourcePage: `Android/其他/品牌详情页/${keyword}/${keywordId}/`, + upperLevel_url: '个人中心/赚奖励/' + }); + + const { isSuccess, response } = await requestApi(`https://dingyue-api.smzdm.com/dy/util/api/user_action`, { + method: 'post', + headers: this.getHeaders(), + data: { + action: method, + params: JSON.stringify({ + keyword: keywordId, + keyword_id: keywordId, + type: 'brand' + }), + refer: `Android/其他/品牌详情页/${keyword}/${keywordId}/`, + touchstone_event: touchstone + } + }); + + if (isSuccess) { + $.log(`${method} 关注成功: ${keyword}`); + } + else { + $.log(`${method} 关注失败!${response}`); + } + + return { + isSuccess, + response + }; + } + + // 获取品牌信息 + async getBrandDetail(id) { + const { isSuccess, data, response } = await requestApi('https://brand-api.smzdm.com/brand/brand_basic', { + headers: this.getHeaders(), + data: { + brand_id: id + } + }); + + if (isSuccess) { + return data.data; + } + else { + $.log(`获取品牌信息失败!${response}`); + + return {}; + } + } } !(async () => {