From 7e01b4b610e5be419946ebc1d8d938d15126fa5d Mon Sep 17 00:00:00 2001 From: lxk0301 <778732665@qq.com> Date: Thu, 26 Nov 2020 15:12:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9C=E4=B8=9C=E5=B7=A5=E5=8E=82=E4=B8=8A?= =?UTF-8?q?=E7=BA=BF=E9=9A=8F=E6=9C=BA=E4=BA=92=E5=8A=A9=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8Csecret/=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8FDDFACTORY?= =?UTF-8?q?=5FSHARECODES=20=E8=A7=84=E5=88=99=E5=92=8C=E7=A7=8D=E8=B1=86?= =?UTF-8?q?=E5=86=9C=E5=9C=BA=E7=AD=89=E7=AD=89=E4=B8=80=E6=A0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jdFactoryShareCodes.js | 31 ++++++++++++++++ jd_jdfactory.js | 80 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 jdFactoryShareCodes.js diff --git a/jdFactoryShareCodes.js b/jdFactoryShareCodes.js new file mode 100644 index 00000000..4bbbe487 --- /dev/null +++ b/jdFactoryShareCodes.js @@ -0,0 +1,31 @@ +/* +京东种豆得豆互助码 +此文件为Node.js专用。其他用户请忽略 +支持京东N个账号 + */ +//云服务器腾讯云函数等NOde.js用户在此处填写东东萌宠的好友码。 +// github action用户的好友互助码填写到Action->Settings->Secrets->new Secret里面(Name填写 PLANT_BEAN_SHARECODES(此处的Name必须按此来写,不能随意更改),内容处填写互助码,填写规则如下) +// 同一个京东账号的好友互助码用@符号隔开,不同京东账号之间用&符号或者换行隔开,下面给一个示例 +// 如: 京东账号1的shareCode1@京东账号1的shareCode2&京东账号2的shareCode1@京东账号2的shareCode2 +let shareCodes = [ + '',//账号一的好友shareCode,不同好友中间用@符号隔开 + '',//账号二的好友shareCode,不同好友中间用@符号隔开 +] +// 判断github action里面是否有东东萌宠互助码 +if (process.env.DDFACTORY_SHARECODES) { + if (process.env.DDFACTORY_SHARECODES.indexOf('&') > -1) { + console.log(`您的互助码选择的是用&隔开\n`) + shareCodes = process.env.DDFACTORY_SHARECODES.split('&'); + } else if (process.env.DDFACTORY_SHARECODES.indexOf('\n') > -1) { + console.log(`您的互助码选择的是用换行隔开\n`) + shareCodes = process.env.DDFACTORY_SHARECODES.split('\n'); + } else { + shareCodes = process.env.DDFACTORY_SHARECODES.split(); + } +} else if (process.env.JD_COOKIE) { + console.log(`由于您secret里面未提供助力码,故此处运行将会给脚本内置的码进行助力,请知晓!`) +} +for (let i = 0; i < shareCodes.length; i++) { + const index = (i + 1 === 1) ? '' : (i + 1); + exports['shareCodes' + index] = shareCodes[i]; +} \ No newline at end of file diff --git a/jd_jdfactory.js b/jd_jdfactory.js index 4bc5b756..2ff8a1f8 100644 --- a/jd_jdfactory.js +++ b/jd_jdfactory.js @@ -34,6 +34,7 @@ const notify = $.isNode() ? require('./sendNotify') : ''; //Node.js用户请在jdCookie.js处填写京东ck; const jdCookieNode = $.isNode() ? require('./jdCookie.js') : ''; let jdNotify = true;//是否关闭通知,false打开通知推送,true关闭通知推送 +const randomCount = $.isNode() ? 20 : 5; //IOS等用户直接用NobyDa的jd cookie let cookiesArr = [], cookie = '', message; if ($.isNode()) { @@ -48,6 +49,7 @@ let wantProduct = ``;//心仪商品名称 const JD_API_HOST = 'https://api.m.jd.com/client.action'; const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVWnYaS5m9cZ2ariXVJwHf0bgkG7Uo']; !(async () => { + await requireConfig(); if (!cookiesArr[0]) { $.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"}); return; @@ -72,6 +74,7 @@ const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVW } continue } + await shareCodesFormat(); await jdFactory() } } @@ -84,7 +87,7 @@ const inviteCodes = [`P04z54XCjVWnYaS5u2ak7ZCdan1Bdd2GGiWvC6_uERj`, 'P04z54XCjVW }) async function jdFactory() { await jdfactory_getHomeData(); - await helpFriends(inviteCodes); + await helpFriends(); // $.newUser !==1 && $.haveProduct === 2,老用户但未选购商品 // $.newUser === 1新用户 if ($.newUser === 1) return @@ -210,10 +213,14 @@ async function algorithm() { }) }) } -async function helpFriends(inviteCodes) { - for (let code of inviteCodes) { +async function helpFriends() { + for (let code of $.newShareCodes) { if (!code) continue - await jdfactory_collectScore(code); + const helpRes = await jdfactory_collectScore(code); + if (helpRes.code === 0 && helpRes.data.bizCode === -7) { + console.log(`助力机会已耗尽,跳出`); + break + } } } async function doTask() { @@ -335,7 +342,7 @@ function jdfactory_collectScore(taskToken) { } catch (e) { $.logErr(e, resp) } finally { - resolve(); + resolve(data); } }) }) @@ -531,6 +538,69 @@ function jdfactory_getHomeData() { }) }) } +function readShareCode() { + console.log(`开始`) + return new Promise(async resolve => { + $.get({url: `http://api.turinglabs.net/api/v1/jd/ddfactory/read/${randomCount}/`}, (err, resp, data) => { + try { + if (err) { + console.log(`${JSON.stringify(err)}`) + console.log(`${$.name} API请求失败,请检查网路重试`) + } else { + if (data) { + console.log(`随机取个${randomCount}码放到您固定的互助码后面`) + data = JSON.parse(data); + } + } + } catch (e) { + $.logErr(e, resp) + } finally { + resolve(data); + } + }) + // await $.wait(2000); + // resolve() + }) +} +//格式化助力码 +function shareCodesFormat() { + return new Promise(async resolve => { + // console.log(`第${$.index}个京东账号的助力码:::${$.shareCodesArr[$.index - 1]}`) + $.newShareCodes = []; + if ($.shareCodesArr[$.index - 1]) { + $.newShareCodes = $.shareCodesArr[$.index - 1].split('@'); + } else { + console.log(`由于您第${$.index}个京东账号未提供shareCode,将采纳本脚本自带的助力码\n`) + const tempIndex = $.index > inviteCodes.length ? (inviteCodes.length - 1) : ($.index - 1); + $.newShareCodes = inviteCodes[tempIndex].split('@'); + } + const readShareCodeRes = await readShareCode(); + if (readShareCodeRes && readShareCodeRes.code === 200) { + $.newShareCodes = [...new Set([...$.newShareCodes, ...(readShareCodeRes.data || [])])]; + } + console.log(`第${$.index}个京东账号将要助力的好友${JSON.stringify($.newShareCodes)}`) + resolve(); + }) +} +function requireConfig() { + return new Promise(resolve => { + console.log(`开始获取${$.name}配置文件\n`); + //Node.js用户请在jdCookie.js处填写京东ck; + const shareCodes = $.isNode() ? require('./jdFactoryShareCodes.js') : ''; + console.log(`共${cookiesArr.length}个京东账号\n`) + if ($.isNode()) { + $.shareCodesArr = []; + Object.keys(shareCodes).forEach((item) => { + if (shareCodes[item]) { + $.shareCodesArr.push(shareCodes[item]) + } + }) + } + // console.log(`\n种豆得豆助力码::${JSON.stringify($.shareCodesArr)}`); + console.log(`您提供了${$.shareCodesArr.length}个账号的${$.name}助力码\n`); + resolve() + }) +} function taskPostUrl(function_id, body = {}, function_id2) { let url = `${JD_API_HOST}`; if (function_id2) {