mirror of
https://github.com/okyyds/yyds.git
synced 2026-07-13 19:21:19 +08:00
1136 lines
41 KiB
JavaScript
1136 lines
41 KiB
JavaScript
/*
|
||
京东手机狂欢城
|
||
脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js
|
||
===================quantumultx================
|
||
[task_local]
|
||
#京东手机狂欢城
|
||
0 0-18/6 * * * https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_carnivalcity.js, tag=京东手机狂欢城, img-url=https://raw.githubusercontent.com/Orz-3/mini/master/Color/jd.png, enabled=true
|
||
=====================Loon================
|
||
[Script]
|
||
cron "0 0-18/6 * * *" script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_carnivalcity.js, tag=京东手机狂欢城
|
||
====================Surge================
|
||
京东手机狂欢城 = type=cron,cronexp=0 0-18/6 * * *,wake-system=1,timeout=3600,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_carnivalcity.js
|
||
============小火箭=========
|
||
京东手机狂欢城 = type=cron,script-path=https://raw.githubusercontent.com/Aaron-lv/sync/jd_scripts/jd_carnivalcity.js, cronexpr="0 0-18/6 * * *", timeout=3600, enable=true
|
||
*/
|
||
|
||
const $ = new Env('京东手机狂欢城');
|
||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||
let cookiesArr = [], cookie = '', message = '', allMessage = '';
|
||
if ($.isNode()) {
|
||
Object.keys(jdCookieNode).forEach((item) => {
|
||
cookiesArr.push(jdCookieNode[item])
|
||
})
|
||
if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {
|
||
};
|
||
if (JSON.stringify(process.env).indexOf('GITHUB') > -1) process.exit(0)
|
||
} else {
|
||
cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item);
|
||
}
|
||
let inviteCodes = [];
|
||
$.shareCodesArr = [];
|
||
const JD_API_HOST = 'https://api.m.jd.com/api';
|
||
const activeEndTime = '2022/4/23 00:00:00+08:00';//活动结束时间
|
||
let nowTime = new Date().getTime() + new Date().getTimezoneOffset() * 60 * 1000 + 8 * 60 * 60 * 1000;
|
||
!(async () => {
|
||
if (!cookiesArr[0]) {
|
||
$.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', {"open-url": "https://bean.m.jd.com/bean/signIndex.action"});
|
||
return;
|
||
}
|
||
$.temp = [];
|
||
if (nowTime > new Date(activeEndTime).getTime()) {
|
||
$.msg($.name, '活动已结束', `该活动累计获得京豆:${$.jingBeanNum}个\n请删除此脚本\n咱江湖再见`);
|
||
if ($.isNode()) await notify.sendNotify($.name + '活动已结束', `请删除此脚本\n咱江湖再见`);
|
||
return
|
||
}
|
||
await updateShareCodesCDN();
|
||
|
||
for (let i = 0; i < cookiesArr.length; i++) {
|
||
if (cookiesArr[i]) {
|
||
cookie = cookiesArr[i];
|
||
$.index = i + 1;
|
||
$.canHelp = true;//能否助力
|
||
$.UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1])
|
||
getUA()
|
||
await supportList();//助力情况
|
||
await getHelp();//获取邀请码
|
||
if ($.updatePkActivityIdRes && $.updatePkActivityIdRes.length) {
|
||
$.temp = [...new Set([...$.temp, ...$.updatePkActivityIdRes])]
|
||
}
|
||
}
|
||
}
|
||
|
||
console.log('助力排队:', $.temp)
|
||
for (let i = 0; i < cookiesArr.length; i++) {
|
||
cookie = cookiesArr[i];
|
||
$.index = i + 1;
|
||
$.canHelp = true;//能否助力
|
||
$.UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1])
|
||
getUA()
|
||
if ((cookiesArr && cookiesArr.length >= 1) && $.canHelp) {
|
||
console.log(`\n先自己账号内部相互邀请助力\n`);
|
||
for (let item of $.temp) {
|
||
console.log(`\n${$.UserName} 去参助力 ${item}`);
|
||
const helpRes = await toHelp(item.trim());
|
||
if (helpRes.data.status === 5) {
|
||
console.log(`助力机会已耗尽,跳出助力`);
|
||
$.canHelp = false;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
for (let i = 0; i < cookiesArr.length; i++) {
|
||
if (cookiesArr[i]) {
|
||
cookie = cookiesArr[i];
|
||
$.UserName = decodeURIComponent(cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1])
|
||
$.index = i + 1;
|
||
$.isLogin = true;
|
||
$.nickName = $.UserName;
|
||
$.jingBeanNum = 0;//累计获得京豆
|
||
$.integralCount = 0;//累计获得积分
|
||
$.integer = 0;//当天获得积分
|
||
$.lasNum = 0;//当天参赛人数
|
||
$.num = 0;//当天排名
|
||
$.beans = 0;//本次运行获得京豆数量
|
||
$.blockAccount = false;//黑号
|
||
message = '';
|
||
console.log(`\n开始【京东账号${$.index}】${$.nickName || $.UserName}\n`);
|
||
getUA()
|
||
await JD818();
|
||
}
|
||
}
|
||
|
||
if (allMessage) {
|
||
if ($.isNode()) {
|
||
await notify.sendNotify($.name, allMessage, {url: JD_API_HOST});
|
||
$.msg($.name, '', allMessage);
|
||
}
|
||
}
|
||
}
|
||
)
|
||
()
|
||
|
||
async function JD818() {
|
||
try {
|
||
await indexInfo();//获取任务
|
||
if ($.blockAccount) return
|
||
await indexInfo(true);//获取任务
|
||
await doHotProducttask();//做热销产品任务
|
||
await doBrandTask();//做品牌手机任务
|
||
await doBrowseshopTask();//逛好货街,做任务
|
||
// await doHelp();
|
||
await myRank();//领取往期排名奖励
|
||
await getListRank();
|
||
await getListIntegral();
|
||
await getListJbean();
|
||
// await check();//查询抽奖记录(未兑换的,发送提醒通知);
|
||
await showMsg()
|
||
} catch (e) {
|
||
$.logErr(e)
|
||
}
|
||
}
|
||
|
||
async function doHotProducttask() {
|
||
$.hotProductList = $.hotProductList.filter(v => !!v && v['status'] === "1");
|
||
if ($.hotProductList && $.hotProductList.length) console.log(`开始 【浏览热销手机产品】任务,需等待6秒`)
|
||
for (let item of $.hotProductList) {
|
||
await doBrowse(item['id'], "", "hot", "browse", "browseHotSku");
|
||
await $.wait(1000 * 6);
|
||
if ($.browseId) {
|
||
await getBrowsePrize($.browseId)
|
||
}
|
||
}
|
||
}
|
||
|
||
//做任务 API
|
||
function doBrowse(id = "", brandId = "", taskMark = "hot", type = "browse", logMark = "browseHotSku") {
|
||
$.browseId = ''
|
||
return new Promise(resolve => {
|
||
const body = {
|
||
"brandId": `${brandId}`,
|
||
"id": `${id}`,
|
||
"taskMark": `${taskMark}`,
|
||
"type": `${type}`,
|
||
"logMark": `${logMark}`
|
||
};
|
||
const options = taskPostUrl('/khc/task/doBrowse', body)
|
||
$.post(options, (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
console.log(`doBrowse 做${taskMark}任务:${data}`);
|
||
data = JSON.parse(data);
|
||
if (data && data['code'] === 200) {
|
||
$.browseId = data['data']['browseId'] || "";
|
||
} else {
|
||
console.log(`doBrowse异常`);
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve();
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
//领取奖励
|
||
function getBrowsePrize(browseId, brandId = '') {
|
||
return new Promise(resolve => {
|
||
const body = {"browseId": browseId, "brandId": `${brandId}`};
|
||
const options = taskPostUrl('/khc/task/getBrowsePrize', body)
|
||
$.post(options, (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
console.log(`getBrowsePrize 领取奖励 结果:${data}`);
|
||
data = JSON.parse(data);
|
||
if (data && data['code'] === 200) {
|
||
if (data['data']['jingBean']) $.beans += data['data']['jingBean'];
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
// 关注
|
||
function followShop(browseId, brandId = '') {
|
||
return new Promise(resolve => {
|
||
const body = {"id": `${browseId}`, "brandId": `${brandId}`};
|
||
const options = taskPostUrl('/khc/task/followShop', body)
|
||
$.post(options, (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
console.log(`followShop 领取奖励 结果:${data}`);
|
||
data = JSON.parse(data);
|
||
if (data && data['code'] === 200) {
|
||
if (data['data']['jingBean']) $.beans += data['data']['jingBean'];
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
async function doBrandTask() {
|
||
for (let brand of $.brandList) {
|
||
await brandTaskInfo(brand['brandId']);
|
||
}
|
||
}
|
||
|
||
function brandTaskInfo(brandId) {
|
||
const body = {"brandId": `${brandId}`};
|
||
const options = taskPostUrl('/khc/index/brandTaskInfo', body)
|
||
$.skuTask = [];
|
||
$.shopTask = [];
|
||
$.meetingTask = [];
|
||
$.questionTask = {};
|
||
return new Promise((resolve) => {
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = $.toObj(data);
|
||
if (data.code === 200) {
|
||
let brandId = data['data']['brandId'];
|
||
$.skuTask = data['data']['skuTask'] || [];
|
||
$.shopTask = data['data']['shopTask'] || [];
|
||
$.meetingTask = data['data']['meetingTask'] || [];
|
||
$.questionTask = data['data']['questionTask'] || [];
|
||
let flag = true
|
||
for (let sku of $.shopTask.filter(vo => !!vo && vo['status'] !== '4')) {
|
||
if (flag) console.log(`\n开始做 品牌手机 【${data['data']['brandName']}】 任务`)
|
||
if (flag) flag = false
|
||
console.log(`开始浏览 1-F 关注 任务 ${sku['name']}`);
|
||
if (sku['status'] == 3) {
|
||
await followShop(sku['id'], brandId);
|
||
} else if (sku['status'] == 8) {
|
||
await doBrowse(sku['id'], brandId, "brand", "follow", "browseShop");
|
||
await $.wait(1000 * 6);
|
||
if ($.browseId) await getBrowsePrize($.browseId, brandId);
|
||
} else {
|
||
console.log(`未知任务状态 ${sku['status']}`)
|
||
}
|
||
}
|
||
flag = true
|
||
for (let sku of $.skuTask.filter(vo => !!vo && vo['status'] !== '4')) {
|
||
if (flag) console.log(`\n开始做 品牌手机 【${data['data']['brandName']}】 任务`)
|
||
if (flag) flag = false
|
||
console.log(`开始浏览 2-F 单品区 任务 ${sku['name']}`);
|
||
await doBrowse(sku['id'], brandId, "brand", "presell", "browseSku");
|
||
await $.wait(1000 * 6);
|
||
if ($.browseId) await getBrowsePrize($.browseId, brandId);
|
||
}
|
||
flag = true
|
||
for (let sku of $.meetingTask.filter(vo => !!vo && vo['status'] !== '4')) {
|
||
if (flag) console.log(`\n开始做 品牌手机 【${data['data']['brandName']}】 任务`)
|
||
if (flag) flag = false
|
||
console.log(`开始浏览 3-F 综合区 任务 ${sku['name']},需等待10秒`);
|
||
await doBrowse(sku['id'], brandId, "brand", "meeting", "browseVenue");
|
||
await $.wait(10500);
|
||
if ($.browseId) await getBrowsePrize($.browseId, brandId);
|
||
}
|
||
flag = true
|
||
if ($.questionTask.hasOwnProperty('id') && $.questionTask['result'] === '0') {
|
||
if (flag) console.log(`\n开始做 品牌手机 【${data['data']['brandName']}】 任务`)
|
||
if (flag) flag = false
|
||
console.log(`开始做答题任务 ${$.questionTask['question']}`);
|
||
let result = 0;
|
||
for (let i = 0; i < $.questionTask['answers'].length; i++) {
|
||
if ($.questionTask['answers'][i]['right']) {
|
||
result = i + 1;//正确答案
|
||
}
|
||
}
|
||
if (result !== 0) {
|
||
await doQuestion(brandId, $.questionTask['id'], result);
|
||
}
|
||
}
|
||
} else {
|
||
console.log(`失败:${JSON.stringify(data)}`);
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp);
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
});
|
||
}
|
||
|
||
function doQuestion(brandId, questionId, result) {
|
||
return new Promise(resolve => {
|
||
const body = {"brandId": `${brandId}`, "questionId": `${questionId}`, "result": result};
|
||
const options = taskPostUrl('/khc/task/doQuestion', body)
|
||
$.post(options, (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
console.log(`doQuestion 领取答题任务奖励 结果:${data}`);
|
||
data = JSON.parse(data);
|
||
if (data && data['code'] === 200) {
|
||
if (data['data']['jingBean']) $.beans += data['data']['jingBean'];
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
//逛好货街,做任务
|
||
async function doBrowseshopTask() {
|
||
$.browseshopList = $.browseshopList.filter(v => !!v && v['status'] === "6");
|
||
if ($.browseshopList && $.browseshopList.length) console.log(`\n开始 【逛好货街,做任务】,需等待10秒`)
|
||
for (let shop of $.browseshopList) {
|
||
await doBrowse(shop['id'], "", "browseShop", "browse", "browseShop");
|
||
await $.wait(10000);
|
||
if ($.browseId) {
|
||
await getBrowsePrize($.browseId)
|
||
}
|
||
}
|
||
}
|
||
|
||
function indexInfo(flag = false) {
|
||
const options = taskPostUrl(`/khc/index/indexInfo`, {})
|
||
$.hotProductList = [];
|
||
$.brandList = [];
|
||
$.browseshopList = [];
|
||
return new Promise((resolve) => {
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = $.toObj(data);
|
||
if (data.code === 200) {
|
||
$.hotProductList = data['data']['hotProductList'] ?? [];
|
||
$.brandList = data['data']['brandList'] ?? [];
|
||
$.browseshopList = data['data']['browseshopList'] ?? [];
|
||
} else {
|
||
console.log(`异常:${JSON.stringify(data)}`)
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp);
|
||
} finally {
|
||
resolve();
|
||
}
|
||
})
|
||
});
|
||
}
|
||
|
||
//获取助力信息
|
||
function supportList() {
|
||
const options = taskPostUrl('/khc/index/supportList', {})
|
||
return new Promise((resolve) => {
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
if (data.code === 200) {
|
||
console.log(`助力情况:${data['data']['supportedNums']}/${data['data']['supportNeedNums']}`);
|
||
message += `邀请好友助力:${data['data']['supportedNums']}/${data['data']['supportNeedNums']}\n`
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp);
|
||
} finally {
|
||
resolve();
|
||
}
|
||
})
|
||
});
|
||
}
|
||
|
||
//积分抽奖
|
||
function lottery() {
|
||
const options = taskPostUrl('/khc/record/lottery', {})
|
||
return new Promise((resolve) => {
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
if (data.code === 200) {
|
||
if (data.data.prizeId !== 8) {
|
||
//已中奖
|
||
const url = 'https://carnivalcity.m.jd.com/#/integralDetail';
|
||
console.log(`积分抽奖获得:${data.data.prizeName}`);
|
||
message += `积分抽奖获得:${data.data.prizeName}\n`;
|
||
$.msg($.name, '', `京东账号 ${$.index} ${$.nickName || $.UserName}\n积分抽奖获得:${data.data.prizeName}\n兑换地址:${url}`, {'open-url': url});
|
||
if ($.isNode()) await notify.sendNotify($.name, `京东账号 ${$.index} ${$.nickName || $.UserName}\n积分抽奖获得:${data.data.prizeName}\n兑换地址:${url}`);
|
||
} else {
|
||
console.log(`积分抽奖结果:${data['data']['prizeName']}}`);
|
||
}
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp);
|
||
} finally {
|
||
resolve();
|
||
}
|
||
})
|
||
});
|
||
}
|
||
|
||
//查询抽奖记录(未兑换的)
|
||
function check() {
|
||
const options = taskPostUrl('/khc/record/convertRecord', {pageNum: 1})
|
||
return new Promise((resolve) => {
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
let str = '';
|
||
if (data.code === 200) {
|
||
for (let obj of data.data) {
|
||
if (obj.hasOwnProperty('fillStatus') && obj.fillStatus !== true) {
|
||
str += JSON.stringify(obj);
|
||
}
|
||
}
|
||
}
|
||
if (str.length > 0) {
|
||
const url = 'https://carnivalcity.m.jd.com/#/integralDetail';
|
||
$.msg($.name, '', `京东账号 ${$.index} ${$.nickName || $.UserName}\n积分抽奖获得:${str}\n兑换地址:${url}`, {'open-url': url});
|
||
if ($.isNode()) await notify.sendNotify($.name, `京东账号 ${$.index} ${$.nickName || $.UserName}\n积分抽奖获得:${str}\n兑换地址:${url}`);
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp);
|
||
} finally {
|
||
resolve();
|
||
}
|
||
})
|
||
});
|
||
}
|
||
|
||
function myRank() {
|
||
return new Promise(resolve => {
|
||
const options = taskPostUrl("/khc/rank/myPastRanks", {});
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
if (data.code === 200) {
|
||
if (data.data && data.data.length) {
|
||
for (let i = 0; i < data.data.length; i++) {
|
||
$.date = data.data[i]['date'];
|
||
if (data.data[i].status === '1') {
|
||
console.log(`开始领取往期奖励【${data.data[i]['prizeName']}】`)
|
||
let res = await saveJbean($.date);
|
||
// console.log('领奖结果', res)
|
||
if (res && res.code === 200) {
|
||
$.beans += Number(res.data);
|
||
console.log(`${data.data[i]['date']}日 【${res.data}】京豆奖励领取成功`)
|
||
} else {
|
||
console.log(`往期奖励领取失败:${JSON.stringify(res)}`);
|
||
}
|
||
await $.wait(500);
|
||
} else if (data.data[i].status === '3') {
|
||
console.log(`${data.data[i]['date']}日 【${data.data[i]['prizeName']}】往期京豆奖励已领取~`)
|
||
} else {
|
||
console.log(`${data.data[i]['date']}日 【${data.data[i]['status']}】往期京豆奖励,今日争取进入前30000名哦~`)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
//领取往期奖励API
|
||
function saveJbean(date) {
|
||
return new Promise(resolve => {
|
||
const body = {"date": `${date}`};
|
||
const options = taskPostUrl('/khc/rank/getRankJingBean', body)
|
||
$.post(options, (err, resp, data) => {
|
||
try {
|
||
// console.log('领取京豆结果', data);
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
async function doHelp() {
|
||
console.log(`\n开始助力好友`);
|
||
for (let i in $.newShareCodes) {
|
||
let item = $.newShareCodes[i]
|
||
console.log('好友助力码:', item)
|
||
if (!item) continue;
|
||
const helpRes = await toHelp(item.trim());
|
||
if (helpRes.data.status === 5) {
|
||
console.log(`助力机会已耗尽,跳出助力`);
|
||
break;
|
||
} else if (helpRes.data.status === 4) {
|
||
console.log(`该助力码[${item}]已达上限`);
|
||
$.newShareCodes[i] = ''
|
||
}
|
||
}
|
||
}
|
||
|
||
//助力API
|
||
function toHelp(code) {
|
||
return new Promise(resolve => {
|
||
const body = {"shareId": `${code}`};
|
||
const options = taskPostUrl('/khc/task/doSupport', body)
|
||
$.post(options, (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
console.log(`助力结果:${data}`);
|
||
data = JSON.parse(data);
|
||
if (data && data['code'] === 200) {
|
||
if (data['data']['status'] === 6) console.log(`助力成功\n`)
|
||
if (data['data']['jdNums']) $.beans += data['data']['jdNums'];
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
//获取邀请码API
|
||
function getHelp() {
|
||
return new Promise(resolve => {
|
||
const body = {"apiMapping": "/khc/task/getSupport"}
|
||
$.get(taskUrl(body), async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
if (data.code === 200) {
|
||
console.log(`\n\n${$.name}互助码每天都变化,旧的不可继续使用`);
|
||
$.log(`【京东账号${$.index}(${$.UserName})的${$.name}好友互助码】${data.data.shareId}\n\n`);
|
||
$.temp.push(data.data.shareId);
|
||
} else {
|
||
console.log(`获取邀请码失败:${JSON.stringify(data)}`);
|
||
if (data.code === 1002) $.blockAccount = true;
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
function taskUrl(body = {}) {
|
||
return {
|
||
url: `${JD_API_HOST}?appid=guardian-starjd&functionId=carnivalcity_jd_prod&body=${JSON.stringify(body)}&t=${Date.now()}&loginType=2`,
|
||
headers: {
|
||
"accept": "application/json, text/plain, */*",
|
||
"accept-encoding": "gzip, deflate, br",
|
||
"accept-language": "zh-cn",
|
||
"referer": "https://carnivalcity.m.jd.com/",
|
||
"origin": "https://carnivalcity.m.jd.com",
|
||
"Cookie": cookie,
|
||
"User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1")
|
||
}
|
||
}
|
||
}
|
||
|
||
//获取当前活动总京豆数量
|
||
function getListJbean() {
|
||
return new Promise(resolve => {
|
||
const body = {
|
||
pageNum: ``
|
||
}
|
||
const options = taskPostUrl("/khc/record/jingBeanRecord", body);
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
if (data.code === 200) {
|
||
$.jingBeanNum = data.data.jingBeanNum || 0;
|
||
message += `累计获得京豆:${$.jingBeanNum}🐶\n`;
|
||
} else {
|
||
console.log(`jingBeanRecord失败:${JSON.stringify(data)}`);
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
//查询累计获得积分
|
||
function getListIntegral() {
|
||
return new Promise(resolve => {
|
||
const body = {
|
||
pageNum: ``
|
||
}
|
||
const options = taskPostUrl("/khc/record/integralRecord", body);
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
if (data.code === 200) {
|
||
$.integralCount = data.data.integralNum || 0;//累计活动积分
|
||
message += `累计获得积分:${$.integralCount}\n`;
|
||
console.log(`开始抽奖,当前积分可抽奖${parseInt($.integralCount / 50)}次\n`);
|
||
// for (let i = 0; i < parseInt($.integralCount / 50); i++) {
|
||
// await lottery();
|
||
// await $.wait(500);
|
||
// }
|
||
} else {
|
||
console.log(`integralRecord失败:${JSON.stringify(data)}`);
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
//查询今日累计积分与排名
|
||
function getListRank() {
|
||
return new Promise(resolve => {
|
||
const options = taskPostUrl("/khc/rank/dayRank", {});
|
||
$.post(options, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data);
|
||
if (data.code === 200) {
|
||
if (data.data.myRank) {
|
||
$.integer = data.data.myRank.integral;//当前获得积分
|
||
$.num = data.data.myRank.rank;//当前排名
|
||
message += `当前获得积分:${$.integer}\n`;
|
||
message += `当前获得排名:${$.num}\n`;
|
||
}
|
||
if (data.data.lastRank) {
|
||
$.lasNum = data.data.lastRank.rank;//当前参加活动人数
|
||
message += `当前参赛人数:${$.lasNum}\n`;
|
||
}
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
function updateShareCodesCDN() {
|
||
return new Promise(resolve => {
|
||
$.get({
|
||
url: "https://api.jdsharecode.xyz/api/carnivalcity/30",
|
||
headers: {"User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1")},
|
||
timeout: 10000
|
||
}, async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
data = JSON.parse(data)
|
||
$.updatePkActivityIdRes = data.data;
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve();
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
function taskPostUrl(a, t = {}) {
|
||
const body = $.toStr({...t, "apiMapping": `${a}`})
|
||
return {
|
||
url: `${JD_API_HOST}`,
|
||
body: `appid=guardian-starjd&functionId=carnivalcity_jd_prod&body=${body}&t=${Date.now()}&loginType=2`,
|
||
headers: {
|
||
"Host": "api.m.jd.com",
|
||
"Content-Type": "application/x-www-form-urlencoded",
|
||
"Origin": "https://carnivalcity.m.jd.com",
|
||
"User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1"),
|
||
"Referer": "https://carnivalcity.m.jd.com/",
|
||
"Cookie": cookie
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
async function showMsg() {
|
||
if ($.beans) {
|
||
allMessage += `京东账号${$.index} ${$.nickName || $.UserName}\n本次运行获得:${$.beans}京豆\n${message}活动地址:https://carnivalcity.m.jd.com${$.index !== cookiesArr.length ? '\n\n' : ''}`
|
||
}
|
||
$.msg($.name, `京东账号${$.index} ${$.nickName || $.UserName}`, `${message}具体详情点击弹窗跳转后即可查看`, {"open-url": "https://carnivalcity.m.jd.com"});
|
||
}
|
||
|
||
function getUA() {
|
||
$.UA = `jdapp;iPhone;10.0.10;14.3;${randomString(40)};network/wifi;model/iPhone12,1;addressid/4199175193;appBuild/167741;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`
|
||
}
|
||
|
||
function randomString(e) {
|
||
e = e || 32;
|
||
let t = "abcdef0123456789", a = t.length, n = "";
|
||
for (i = 0; i < e; i++)
|
||
n += t.charAt(Math.floor(Math.random() * a));
|
||
return n
|
||
}
|
||
|
||
function jsonParse(str) {
|
||
if (typeof str == "string") {
|
||
try {
|
||
return JSON.parse(str);
|
||
} catch (e) {
|
||
console.log(e);
|
||
$.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie')
|
||
return [];
|
||
}
|
||
}
|
||
}
|
||
|
||
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)
|
||
}
|
||
|
||
function getFarmShareCode(cookie) {
|
||
return new Promise(resolve => {
|
||
$.post({
|
||
url: "https://api.m.jd.com/client.action?functionId=initForFarm",
|
||
body: `body=${escape(JSON.stringify({"version": 4}))}&appid=wh5&clientVersion=9.1.0`,
|
||
headers: {
|
||
"cookie": cookie,
|
||
"origin": "https://home.m.jd.com",
|
||
"referer": "https://home.m.jd.com/myJd/newhome.action",
|
||
"User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1")
|
||
}
|
||
}, (err, resp, data) => {
|
||
data = $.toObj(data)
|
||
if (data.farmUserPro)
|
||
resolve(data.farmUserPro.shareCode)
|
||
else
|
||
resolve("")
|
||
})
|
||
})
|
||
}
|
||
|
||
function getBeanShareCode(cookie) {
|
||
return new Promise(resolve => {
|
||
$.post({
|
||
url: "https://api.m.jd.com/client.action",
|
||
body: `functionId=plantBeanIndex&body=${escape(
|
||
JSON.stringify({version: "9.0.0.1", "monitor_source": "plant_app_plant_index", "monitor_refer": ""})
|
||
)}&appid=ld&client=apple&area=5_274_49707_49973&build=167283&clientVersion=9.1.0`,
|
||
headers: {
|
||
"cookie": cookie,
|
||
"Host": "api.m.jd.com",
|
||
"User-Agent": $.isNode() ? (process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)) : ($.getdata('JDUA') ? $.getdata('JDUA') : "jdapp;iPhone;9.4.4;14.3;network/4g;Mozilla/5.0 (iPhone; CPU iPhone OS 14_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1")
|
||
}
|
||
}, (err, resp, data) => {
|
||
data = $.toObj(data)
|
||
if (data.data?.jwordShareInfo?.shareUrl)
|
||
resolve(data.data.jwordShareInfo.shareUrl.split('Uuid=')[1])
|
||
else
|
||
resolve("")
|
||
})
|
||
})
|
||
} |