mirror of
https://github.com/lan-tianxiang/clone_scripts.git
synced 2025-07-19 10:23:46 +08:00
235 lines
8.7 KiB
JavaScript
Executable File
235 lines
8.7 KiB
JavaScript
Executable File
/*
|
||
天天优惠大乐透
|
||
活动入口-领券-券后9.9
|
||
脚本兼容: QuantumultX, Surge, Loon, JSBox, Node.js
|
||
============Quantumultx===============
|
||
[task_local]
|
||
15 6 * * * jd_DrawEntrance.js, tag=天天优惠大乐透, enabled=true
|
||
================Loon==============
|
||
[Script]
|
||
cron "15 6 * * *" script-path=jd_DrawEntrance.js,tag=天天优惠大乐透
|
||
===============Surge=================
|
||
天天优惠大乐透 = type=cron,cronexp="15 6 * * *",wake-system=1,timeout=3600,script-path=jd_DrawEntrance.js
|
||
============小火箭=========
|
||
天天优惠大乐透 = type=cron,script-path=jd_DrawEntrance.js, cronexpr="15 6 * * *", timeout=3600, enable=true
|
||
*/
|
||
const jd_helpers = require("./utils/JDHelpers.js");
|
||
const jd_env = require("./utils/JDEnv.js");
|
||
const $ = jd_env.env("天天优惠大乐透");
|
||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||
//Node.js用户请在jdCookie.js处填写京东ck;
|
||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||
let jdNotify = false; //是否关闭通知,false打开通知推送,true关闭通知推送
|
||
//IOS等用户直接用NobyDa的jd cookie
|
||
let cookiesArr = [],
|
||
cookie = '',
|
||
message = '';
|
||
if ($.isNode()) {
|
||
Object.keys(jdCookieNode).forEach((item) => {
|
||
cookiesArr.push(jdCookieNode[item])
|
||
})
|
||
if (process.env.JD_DEBUG && process.env.JD_DEBUG === 'false') console.log = () => {};
|
||
} else {
|
||
cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jd_helpers.safeGet($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item);
|
||
}
|
||
const JD_API_HOST = 'https://api.m.jd.com/api';
|
||
!(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;
|
||
}
|
||
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 = '';
|
||
// message = ''; //不重置信息内容
|
||
await TotalBean();
|
||
console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`);
|
||
if (!$.isLogin) {
|
||
$.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/bean/signIndex.action`, {
|
||
"open-url": "https://bean.m.jd.com/bean/signIndex.action"
|
||
});
|
||
|
||
if ($.isNode()) {
|
||
await notify.sendNotify(`${$.name}cookie已失效 - ${$.UserName}`, `京东账号${$.index} ${$.UserName}\n请重新登录获取cookie`);
|
||
}
|
||
continue
|
||
}
|
||
$.ADID = getUUID('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 1);
|
||
$.UUID = getUUID('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
|
||
$.noChance = false;
|
||
await extend();
|
||
for (let x = 0; x < 3; x++) {
|
||
if ($.noChance) {
|
||
continue
|
||
}
|
||
$.log("\n尝试抽奖")
|
||
await doLuckDrawEntrance();
|
||
await $.wait(1000 * 1)
|
||
}
|
||
}
|
||
}
|
||
if (message !== "") {
|
||
if ($.isNode()) {
|
||
await notify.sendNotify($.name, message)
|
||
} else {
|
||
$.msg($.name, '', message)
|
||
}
|
||
}
|
||
})()
|
||
.catch((e) => {
|
||
$.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '')
|
||
})
|
||
.finally(() => {
|
||
$.done();
|
||
})
|
||
|
||
function extend() {
|
||
return new Promise(resolve => {
|
||
$.post(taskUrl("getLuckyDrawResourceConfig", {
|
||
"platformType": "1"
|
||
}), async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(err)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
if (jd_helpers.safeGet(data)) {
|
||
data = JSON.parse(data);
|
||
$.extend = data.result.luckyDrawConfig.extend
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
function doLuckDrawEntrance() {
|
||
let body = {
|
||
"platformType": "1",
|
||
"extend": $.extend
|
||
}
|
||
return new Promise(resolve => {
|
||
$.post(taskUrl("doLuckDrawEntrance", body), async (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
if (jd_helpers.safeGet(data)) {
|
||
data = JSON.parse(data);
|
||
if (data.success && "luckyDrawData" in data.result) {
|
||
if (data.result.luckyDrawData.checkWinOrNot) { //调整判断的顺序
|
||
switch (data.result.luckyDrawData.couponType) {
|
||
case '2':
|
||
console.log(` 成功领取优惠券:${data.result.luckyDrawData.discount}\n ${data.result.luckyDrawData.quotaDesc},${data.result.luckyDrawData.prizeName}`)
|
||
break;
|
||
case '0':
|
||
console.log(` 成功领取无门槛红包:${data.result.luckyDrawData.quota}`)
|
||
//message += `\n【京东账号${$.index}】${$.nickName || $.UserName} \n 成功领取无门槛红包:${data.result.luckyDrawData.quota}`//增加通知内容
|
||
break;
|
||
default:
|
||
console.log(JSON.stringify(data)) //这边把对象已文本形式输出,避免对象中的属性有数组形式造成不完全打印
|
||
break;
|
||
}
|
||
} else {
|
||
$.noChance = true;
|
||
console.log("已经没有次数了");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve(data);
|
||
}
|
||
})
|
||
})
|
||
}
|
||
|
||
function taskUrl(function_id, body = {}) {
|
||
return {
|
||
url: `${JD_API_HOST}?functionId=${function_id}&body=${escape(JSON.stringify(body))}&appid=XPMSGC2019&client=m&clientVersion=1.0.0&area=19_1601_3633_63252&geo=[object Object]&uuid=${$.UUID}`,
|
||
headers: {
|
||
"Cookie": cookie,
|
||
"Host": "api.m.jd.com",
|
||
"Origin": "https://h5.m.jd.com",
|
||
"Content-Length": "0",
|
||
"Connection": "keep-alive",
|
||
"Accept": "application/json, text/plain, */*",
|
||
"User-Agent": `jdapp;iPhone;9.5.0;13.5;${$.UUID};network/wifi;ADID/${$.ADID};supportApplePay/0;hasUPPay/0;hasOCPay/0;model/iPhone11,6;addressid/138222502;supportBestPay/0;appBuild/167638;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`,
|
||
"Accept-Language": "zh-cn",
|
||
"Referer": "https://h5.m.jd.com/babelDiy/Zeus/yj8mbcm6roENn7qhNdhiekyeqtd/index.html",
|
||
"Accept-Encoding": "gzip, deflate, br",
|
||
"Content-Type": "text/plain",
|
||
}
|
||
}
|
||
}
|
||
|
||
function getUUID(format = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', UpperCase = 0) {
|
||
return format.replace(/[xy]/g, function (c) {
|
||
var r = Math.random() * 16 | 0,
|
||
v = c == 'x' ? r : (r & 0x3 | 0x8);
|
||
if (UpperCase) {
|
||
uuid = v.toString(36).toUpperCase();
|
||
} else {
|
||
uuid = v.toString(36)
|
||
}
|
||
return uuid;
|
||
});
|
||
}
|
||
|
||
function TotalBean() {
|
||
return new Promise(async resolve => {
|
||
const options = {
|
||
"url": `https://wq.jd.com/user/info/QueryJDUserInfo?sceneval=2`,
|
||
"headers": {
|
||
"Accept": "application/json,text/plain, */*",
|
||
"Content-Type": "application/x-www-form-urlencoded",
|
||
"Accept-Encoding": "gzip, deflate, br",
|
||
"Accept-Language": "zh-cn",
|
||
"Connection": "keep-alive",
|
||
"Cookie": cookie,
|
||
"Referer": "https://wqs.jd.com/my/jingdou/my.shtml?sceneval=2",
|
||
"User-Agent": `jdapp;iPhone;9.5.0;13.5;${$.UUID};network/wifi;ADID/${$.ADID};supportApplePay/0;hasUPPay/0;hasOCPay/0;model/iPhone11,6;addressid/138222502;supportBestPay/0;appBuild/167638;jdSupportDarkMode/0;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1`,
|
||
}
|
||
}
|
||
$.post(options, (err, resp, data) => {
|
||
try {
|
||
if (err) {
|
||
console.log(`${JSON.stringify(err)}`)
|
||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||
} else {
|
||
if (data) {
|
||
data = JSON.parse(data);
|
||
if (data['retcode'] === 13) {
|
||
$.isLogin = false; //cookie过期
|
||
return
|
||
}
|
||
if (data['retcode'] === 0) {
|
||
$.nickName = (data['base'] && data['base'].nickname) || $.UserName;
|
||
} else {
|
||
$.nickName = $.UserName
|
||
}
|
||
} else {
|
||
console.log(`京东服务器返回空数据`)
|
||
}
|
||
}
|
||
} catch (e) {
|
||
$.logErr(e, resp)
|
||
} finally {
|
||
resolve();
|
||
}
|
||
})
|
||
})
|
||
} |