mirror of
https://github.com/shufflewzc/faker2.git
synced 2025-04-23 02:48:44 +08:00
update
This commit is contained in:
parent
f901d380c4
commit
916dd7f485
File diff suppressed because one or more lines are too long
724
gua_city.js
724
gua_city.js
File diff suppressed because one or more lines are too long
298
jd_20zn.js
298
jd_20zn.js
File diff suppressed because one or more lines are too long
24
jd_AJMH.js
24
jd_AJMH.js
File diff suppressed because one or more lines are too long
36
jd_AJYX.js
36
jd_AJYX.js
File diff suppressed because one or more lines are too long
@ -1,857 +0,0 @@
|
||||
/*
|
||||
cron "40 8,10,12,14 * * *" ZY_big_winner_Mod.js
|
||||
省钱大赢家之翻翻乐分组版本,兼容资产通知查询的变量,标题为 省钱大赢家之翻翻乐#2 省钱大赢家之翻翻乐#3 省钱大赢家之翻翻乐#4 省钱大赢家之翻翻乐
|
||||
*/
|
||||
//详细说明参考 https://github.com/ccwav/QLScript2.
|
||||
const $ = new Env('省钱大赢家之翻翻乐');
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
//Node.js用户请在jdCookie.js处填写京东ck;
|
||||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||||
//IOS等用户直接用NobyDa的jd cookie
|
||||
let cookiesArr = [], cookie = '', message = '', linkId = 'WMDf1PTHmh8MYBpD97sieQ', fflLinkId = 'WMDf1PTHmh8MYBpD97sieQ';
|
||||
const money = $.isNode() ? (process.env.BIGWINNER_MONEY ? process.env.BIGWINNER_MONEY * 1 : 0.3) : ($.getdata("BIGWINNER_MONEY") ? $.getdata("BIGWINNER_MONEY") * 1 : 0.3)
|
||||
const JD_API_HOST = 'https://api.m.jd.com/api';
|
||||
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"),
|
||||
...$.toObj($.getdata("CookiesJD") || "[]").map((item) => item.cookie)].filter((item) => !!item);
|
||||
}
|
||||
const len = cookiesArr.length;
|
||||
|
||||
let MessageUserGp2 = "";
|
||||
let MessageUserGp3 = "";
|
||||
let MessageUserGp4 = "";
|
||||
|
||||
let MessageGp2 = "";
|
||||
let MessageGp3 = "";
|
||||
let MessageGp4 = "";
|
||||
let MessageAll = "";
|
||||
|
||||
let userIndex2 = -1;
|
||||
let userIndex3 = -1;
|
||||
let userIndex4 = -1;
|
||||
|
||||
let IndexGp2 = 0;
|
||||
let IndexGp3 = 0;
|
||||
let IndexGp4 = 0;
|
||||
let IndexAll = 0;
|
||||
|
||||
let allMessageGp2 = '';
|
||||
let allMessageGp3 = '';
|
||||
let allMessageGp4 = '';
|
||||
let allMessage = '';
|
||||
|
||||
let ReturnMessage = "";
|
||||
let ReturnMessageTitle = "";
|
||||
|
||||
|
||||
|
||||
if ($.isNode() && process.env.BEANCHANGE_USERGP2) {
|
||||
MessageUserGp2 = process.env.BEANCHANGE_USERGP2 ? process.env.BEANCHANGE_USERGP2.split('&') : [];
|
||||
console.log(`检测到设定了分组推送2`);
|
||||
}
|
||||
|
||||
if ($.isNode() && process.env.BEANCHANGE_USERGP3) {
|
||||
MessageUserGp3 = process.env.BEANCHANGE_USERGP3 ? process.env.BEANCHANGE_USERGP3.split('&') : [];
|
||||
console.log(`检测到设定了分组推送3`);
|
||||
}
|
||||
|
||||
if ($.isNode() && process.env.BEANCHANGE_USERGP4) {
|
||||
MessageUserGp4 = process.env.BEANCHANGE_USERGP4 ? process.env.BEANCHANGE_USERGP4.split('&') : [];
|
||||
console.log(`检测到设定了分组推送4`);
|
||||
}
|
||||
|
||||
let strNoRunPin = "";
|
||||
let NoRunIndex3=-1;
|
||||
if ($.isNode() && process.env.BIGNORUNPIN) {
|
||||
strNoRunPin = process.env.BIGNORUNPIN ? process.env.BIGNORUNPIN.split('&') : [];
|
||||
console.log(`检测到账号跳过的设定`);
|
||||
}
|
||||
|
||||
|
||||
let WP_APP_TOKEN_ONE = "";
|
||||
if ($.isNode() && process.env.WP_APP_TOKEN_ONE) {
|
||||
WP_APP_TOKEN_ONE = process.env.WP_APP_TOKEN_ONE;
|
||||
}
|
||||
|
||||
!(async() => {
|
||||
$.redPacketId = []
|
||||
if (!cookiesArr[0]) {
|
||||
$.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {
|
||||
"open-url": "https://bean.m.jd.com/"
|
||||
});
|
||||
return;
|
||||
}
|
||||
for (let i = 0; i < len; i++) {
|
||||
if (cookiesArr[i]) {
|
||||
cookie = cookiesArr[i];
|
||||
$.pt_pin = (cookie.match(/pt_pin=([^; ]+)(?=;?)/) && cookie.match(/pt_pin=([^; ]+)(?=;?)/)[1]);
|
||||
$.UserName = decodeURIComponent(cookie.match(/pt_pin=(.+?);/) && cookie.match(/pt_pin=(.+?);/)[1]);
|
||||
$.index = i + 1;
|
||||
$.isLogin = true;
|
||||
$.nickName = '';
|
||||
|
||||
if (strNoRunPin) {
|
||||
NoRunIndex3 = strNoRunPin.findIndex((item) => item === $.pt_pin);
|
||||
if (NoRunIndex3 != -1) {
|
||||
console.log(`账号跳过:`+$.UserName);
|
||||
continue;
|
||||
}
|
||||
NoRunIndex3 = strNoRunPin.findIndex((item) => item === $.UserName);
|
||||
if (NoRunIndex3 != -1) {
|
||||
console.log(`账号跳过:`+$.UserName);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (MessageUserGp4) {
|
||||
userIndex4 = MessageUserGp4.findIndex((item) => item === $.pt_pin);
|
||||
}
|
||||
if (MessageUserGp2) {
|
||||
userIndex2 = MessageUserGp2.findIndex((item) => item === $.pt_pin);
|
||||
}
|
||||
if (MessageUserGp3) {
|
||||
userIndex3 = MessageUserGp3.findIndex((item) => item === $.pt_pin);
|
||||
}
|
||||
if (userIndex4 != -1) {
|
||||
IndexGp4 += 1;
|
||||
ReturnMessageTitle = `【账号${IndexGp4}🆔】${$.nickName || $.UserName}\n`;
|
||||
}
|
||||
if (userIndex2 != -1) {
|
||||
IndexGp2 += 1;
|
||||
ReturnMessageTitle = `【账号${IndexGp2}🆔】${$.nickName || $.UserName}\n`;
|
||||
}
|
||||
if (userIndex3 != -1) {
|
||||
IndexGp3 += 1;
|
||||
ReturnMessageTitle = `【账号${IndexGp3}🆔】${$.nickName || $.UserName}\n`;
|
||||
}
|
||||
if (userIndex4 == -1 && userIndex2 == -1 && userIndex3 == -1) {
|
||||
IndexAll += 1;
|
||||
ReturnMessageTitle = `【账号${IndexAll}🆔】${$.nickName || $.UserName}\n`;
|
||||
}
|
||||
|
||||
ReturnMessage = "";
|
||||
|
||||
console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`);
|
||||
await main()
|
||||
if (ReturnMessage) {
|
||||
|
||||
|
||||
if ($.isNode() && WP_APP_TOKEN_ONE) {
|
||||
await notify.sendNotifybyWxPucher(`${$.name}`,`【账号名称】${$.nickName || $.UserName}\n`+`${ReturnMessage}`,`${$.UserName}`);
|
||||
}
|
||||
|
||||
ReturnMessage = ReturnMessageTitle + ReturnMessage;
|
||||
|
||||
if (userIndex4 != -1) {
|
||||
allMessageGp4 += ReturnMessage;
|
||||
}
|
||||
|
||||
if (userIndex2 != -1) {
|
||||
allMessageGp2 += ReturnMessage;
|
||||
}
|
||||
if (userIndex3 != -1) {
|
||||
allMessageGp3 += ReturnMessage;
|
||||
}
|
||||
if (userIndex4 == -1 && userIndex2 == -1 && userIndex3 == -1) {
|
||||
allMessage += ReturnMessage;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($.isNode() && allMessageGp2) {
|
||||
console.log("分组2:" + `\n` + allMessageGp2);
|
||||
await notify.sendNotify(`${$.name}#2`, `${allMessageGp2}`, {
|
||||
url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean`
|
||||
})
|
||||
await $.wait(5000);
|
||||
}
|
||||
if ($.isNode() && allMessageGp3) {
|
||||
console.log("分组3:" + `\n` + allMessageGp3);
|
||||
await notify.sendNotify(`${$.name}#3`, `${allMessageGp3}`, {
|
||||
url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean`
|
||||
})
|
||||
await $.wait(5000);
|
||||
}
|
||||
if ($.isNode() && allMessageGp4) {
|
||||
console.log("分组4:" + `\n` + allMessageGp4);
|
||||
await notify.sendNotify(`${$.name}#4`, `${allMessageGp4}`, {
|
||||
url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean`
|
||||
})
|
||||
await $.wait(5000);
|
||||
}
|
||||
if ($.isNode() && allMessage) {
|
||||
console.log("其他组:" + `\n` + allMessage);
|
||||
await notify.sendNotify(`${$.name}`, `${allMessage}`, {
|
||||
url: `https://bean.m.jd.com/beanDetail/index.action?resourceValue=bean`
|
||||
})
|
||||
await $.wait(5000);
|
||||
}
|
||||
})()
|
||||
.catch((e) => {
|
||||
$.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '')
|
||||
})
|
||||
.finally(() => {
|
||||
$.done();
|
||||
})
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
$.canApCashWithDraw = false;
|
||||
$.changeReward = true;
|
||||
$.canOpenRed = true;
|
||||
await gambleHomePage();
|
||||
if (!$.time) {
|
||||
console.log(`开始进行翻翻乐拿红包\n`)
|
||||
await gambleOpenReward(); //打开红包
|
||||
if ($.canOpenRed) {
|
||||
while (!$.canApCashWithDraw && $.changeReward) {
|
||||
await openRedReward();
|
||||
await $.wait(1000);
|
||||
}
|
||||
if ($.canApCashWithDraw) {
|
||||
//提现
|
||||
await openRedReward('gambleObtainReward', $.rewardData.rewardType);
|
||||
await apCashWithDraw($.rewardData.id, $.rewardData.poolBaseId, $.rewardData.prizeGroupId, $.rewardData.prizeBaseId, $.rewardData.prizeType);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
$.logErr(e)
|
||||
}
|
||||
}
|
||||
|
||||
//查询剩余多长时间可进行翻翻乐
|
||||
function gambleHomePage() {
|
||||
const headers = {
|
||||
'Host': 'api.m.jd.com',
|
||||
'Origin': 'https://openredpacket-jdlite.jd.com',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'User-Agent': 'jdltapp;iPhone;3.3.2;14.4.1;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
|
||||
'Referer': `https://618redpacket.jd.com/withdraw?activityId=${linkId}&channel=wjicon&lng=&lat=&sid=&un_area=`,
|
||||
'Accept-Language': 'zh-cn',
|
||||
'Cookie': cookie
|
||||
}
|
||||
const body = {
|
||||
'linkId': fflLinkId
|
||||
};
|
||||
const options = {
|
||||
url: `https://api.m.jd.com/?functionId=gambleHomePage&body=${encodeURIComponent(JSON.stringify(body))}&appid=activities_platform&clientVersion=3.5.0`,
|
||||
headers,
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
$.get(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['code'] === 0) {
|
||||
if (data.data.leftTime === 0) {
|
||||
$.time = data.data.leftTime;
|
||||
} else {
|
||||
$.time = (data.data.leftTime / (60 * 1000)).toFixed(2);
|
||||
}
|
||||
console.log(`\n查询下次翻翻乐剩余时间成功:\n京东账号【${$.UserName}】距开始剩 ${$.time} 分钟`);
|
||||
} else {
|
||||
console.log(`查询下次翻翻乐剩余时间失败:${JSON.stringify(data)}\n`);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
$.logErr(e, resp)
|
||||
}
|
||||
finally {
|
||||
resolve()
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
//打开翻翻乐红包
|
||||
function gambleOpenReward() {
|
||||
const headers = {
|
||||
'Host': 'api.m.jd.com',
|
||||
'Origin': 'https://openredpacket-jdlite.jd.com',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'User-Agent': 'jdltapp;iPhone;3.3.2;14.4.1;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
|
||||
'Referer': `https://618redpacket.jd.com/withdraw?activityId=${linkId}&channel=wjicon&lng=&lat=&sid=&un_area=`,
|
||||
'Accept-Language': 'zh-cn',
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
'Cookie': cookie
|
||||
}
|
||||
const body = {
|
||||
'linkId': fflLinkId
|
||||
};
|
||||
const options = {
|
||||
url: `https://api.m.jd.com/`,
|
||||
headers,
|
||||
body: `functionId=gambleOpenReward&body=${encodeURIComponent(JSON.stringify(body))}&t=${+new Date()}&appid=activities_platform&clientVersion=3.5.0`
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
$.post(options, (err, resp, data) => {
|
||||
try {
|
||||
if (err) {
|
||||
console.log(`${JSON.stringify(err)}`)
|
||||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||||
} else {
|
||||
if (data) {
|
||||
data = JSON.parse(data);
|
||||
$.rewardData = data.data;
|
||||
if (data['code'] === 0) {
|
||||
console.log(`翻翻乐打开红包 成功,获得:${data.data.rewardValue}元红包\n`);
|
||||
} else {
|
||||
console.log(`翻翻乐打开红包 失败:${JSON.stringify(data)}\n`);
|
||||
if (data.code === 20007) {
|
||||
$.canOpenRed = false;
|
||||
console.log(`翻翻乐打开红包 失败,今日活动参与次数已达上限`)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
$.logErr(e, resp)
|
||||
}
|
||||
finally {
|
||||
resolve()
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
//翻倍红包
|
||||
function openRedReward(functionId = 'gambleChangeReward', type) {
|
||||
const headers = {
|
||||
'Host': 'api.m.jd.com',
|
||||
'Origin': 'https://openredpacket-jdlite.jd.com',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'User-Agent': 'jdltapp;iPhone;3.3.2;14.4.1;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
|
||||
'Referer': `https://618redpacket.jd.com/withdraw?activityId=${linkId}&channel=wjicon&lng=&lat=&sid=&un_area=`,
|
||||
'Accept-Language': 'zh-cn',
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
'Cookie': cookie
|
||||
}
|
||||
const body = {
|
||||
'linkId': fflLinkId
|
||||
};
|
||||
if (type)
|
||||
body['rewardType'] = type;
|
||||
const options = {
|
||||
url: `https://api.m.jd.com/`,
|
||||
headers,
|
||||
body: `functionId=${functionId}&body=${encodeURIComponent(JSON.stringify(body))}&t=${+new Date()}&appid=activities_platform&clientVersion=3.5.0`
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
$.post(options, (err, resp, data) => {
|
||||
try {
|
||||
if (err) {
|
||||
console.log(`${JSON.stringify(err)}`)
|
||||
console.log(`${$.name} API请求失败,请检查网路重试`)
|
||||
$.changeReward = false;
|
||||
} else {
|
||||
if (data) {
|
||||
console.log(`翻翻乐结果:${data}\n`);
|
||||
data = JSON.parse(data);
|
||||
if (data['code'] === 0) {
|
||||
$.rewardData = data.data;
|
||||
if (data.data.rewardState === 1) {
|
||||
if (data.data.rewardValue >= money) {
|
||||
//已翻倍到0.3元,可以提现了
|
||||
$.canApCashWithDraw = true;
|
||||
$.changeReward = false;
|
||||
// message += `${data.data.rewardValue}元现金\n`
|
||||
}
|
||||
if (data.data.rewardType === 1) {
|
||||
console.log(`翻翻乐 第${data.data.changeTimes}次翻倍 成功,获得:${data.data.rewardValue}元红包\n`);
|
||||
} else if (data.data.rewardType === 2) {
|
||||
console.log(`翻翻乐 第${data.data.changeTimes}次翻倍 成功,获得:${data.data.rewardValue}元现金\n`);
|
||||
// $.canApCashWithDraw = true;
|
||||
} else {
|
||||
console.log(`翻翻乐 第${data.data.changeTimes}次翻倍 成功,获得:${JSON.stringify(data)}\n`);
|
||||
}
|
||||
} else if (data.data.rewardState === 3) {
|
||||
console.log(`翻翻乐 第${data.data.changeTimes}次翻倍 失败,奖品溜走了/(ㄒoㄒ)/~~\n`);
|
||||
$.changeReward = false;
|
||||
} else {
|
||||
if (type) {
|
||||
console.log(`翻翻乐领取成功:${data.data.amount}现金\n`)
|
||||
ReturnMessage += `${new Date().getHours()}点:${data.data.amount}现金\n`;
|
||||
} else {
|
||||
console.log(`翻翻乐 翻倍 成功,获得:${JSON.stringify(data)}\n`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$.canApCashWithDraw = true;
|
||||
$.changeReward = false;
|
||||
console.log(`翻翻乐 翻倍 失败:${JSON.stringify(data)}\n`);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
$.logErr(e, resp)
|
||||
}
|
||||
finally {
|
||||
resolve()
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
//翻翻乐提现
|
||||
function apCashWithDraw(id, poolBaseId, prizeGroupId, prizeBaseId, prizeType) {
|
||||
const headers = {
|
||||
'Host': 'api.m.jd.com',
|
||||
'Origin': 'https://openredpacket-jdlite.jd.com',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'User-Agent': 'jdltapp;iPhone;3.3.2;14.4.1;network/wifi;Mozilla/5.0 (iPhone; CPU iPhone OS 14_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
|
||||
'Referer': `https://618redpacket.jd.com/withdraw?activityId=${linkId}&channel=wjicon&lng=&lat=&sid=&un_area=`,
|
||||
'Accept-Language': 'zh-cn',
|
||||
"Content-Type": "application/x-www-form-urlencoded",
|
||||
'Cookie': cookie
|
||||
}
|
||||
const body = {
|
||||
"businessSource": "GAMBLE",
|
||||
"base": {
|
||||
id,
|
||||
"business": "redEnvelopeDouble",
|
||||
poolBaseId,
|
||||
prizeGroupId,
|
||||
prizeBaseId,
|
||||
prizeType
|
||||
},
|
||||
"linkId": fflLinkId
|
||||
};
|
||||
const options = {
|
||||
url: `https://api.m.jd.com/`,
|
||||
headers,
|
||||
body: `functionId=apCashWithDraw&body=${encodeURIComponent(JSON.stringify(body))}&t=${+new Date()}&appid=activities_platform&clientVersion=3.5.0`
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
$.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['code'] === 0) {
|
||||
if (data['data']['status'] === '310') {
|
||||
console.log(`翻翻乐提现 成功🎉,详情:${JSON.stringify(data)}\n`);
|
||||
ReturnMessage += `提现至微信钱包成功🎉\n\n`;
|
||||
} else {
|
||||
console.log(`翻翻乐提现 失败,详情:${JSON.stringify(data)}\n`);
|
||||
ReturnMessage += `提现至微信钱包失败\n详情:${JSON.stringify(data)}\n`;
|
||||
ReturnMessage +="温馨提示: 如果是没有绑定,请至微信搜索京东小程序登录即可.\n"
|
||||
}
|
||||
} else {
|
||||
console.log(`翻翻乐提现 失败:${JSON.stringify(data)}\n`);
|
||||
ReturnMessage += `提现至微信钱包失败\n详情:${JSON.stringify(data)}\n\n`;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
$.logErr(e, resp)
|
||||
}
|
||||
finally {
|
||||
resolve()
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
// prettier-ignore
|
||||
function Env(t, e) {
|
||||
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("", `\ud83d\udd14${this.name}, \u5f00\u59cb!`)
|
||||
}
|
||||
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("@"),
|
||||
a = {
|
||||
url: `http://${h}/v1/scripting/evaluate`,
|
||||
body: {
|
||||
script_text: t,
|
||||
mock_type: "cron",
|
||||
timeout: r
|
||||
},
|
||||
headers: {
|
||||
"X-Key": o,
|
||||
Accept: "*/*"
|
||||
}
|
||||
};
|
||||
this.post(a, (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();
|
||||
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) {
|
||||
let e = {
|
||||
"M+": (new Date).getMonth() + 1,
|
||||
"d+": (new Date).getDate(),
|
||||
"H+": (new Date).getHours(),
|
||||
"m+": (new Date).getMinutes(),
|
||||
"s+": (new Date).getSeconds(),
|
||||
"q+": Math.floor(((new Date).getMonth() + 3) / 3),
|
||||
S: (new Date).getMilliseconds()
|
||||
};
|
||||
/(y+)/.test(t) && (t = t.replace(RegExp.$1, ((new Date).getFullYear() + "").substr(4 - RegExp.$1.length)));
|
||||
for (let s in e)
|
||||
new RegExp("(" + s + ")").test(t) && (t = t.replace(RegExp.$1, 1 == RegExp.$1.length ? e[s] : ("00" + e[s]).substr(("" + e[s]).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
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
this.isMute || (this.isSurge() || this.isLoon() ? $notification.post(e, s, i, o(r)) : this.isQuanX() && $notify(e, s, i, o(r)));
|
||||
let h = ["", "==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];
|
||||
h.push(e),
|
||||
s && h.push(s),
|
||||
i && h.push(i),
|
||||
console.log(h.join("\n")),
|
||||
this.logs = this.logs.concat(h)
|
||||
}
|
||||
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("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t.stack) : this.log("", `\u2757\ufe0f${this.name}, \u9519\u8bef!`, t)
|
||||
}
|
||||
wait(t) {
|
||||
return new Promise(e => setTimeout(e, t))
|
||||
}
|
||||
done(t = {}) {
|
||||
const e = (new Date).getTime(),
|
||||
s = (e - this.startTime) / 1e3;
|
||||
this.log("", `\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),
|
||||
this.log(),
|
||||
(this.isSurge() || this.isQuanX() || this.isLoon()) && $done(t)
|
||||
}
|
||||
}
|
||||
(t, e)
|
||||
}
|
281
jd_bigwinner.py
281
jd_bigwinner.py
@ -1,281 +0,0 @@
|
||||
# -*- coding:utf-8 -*-
|
||||
"""
|
||||
Python 3.9.7
|
||||
作者:doubi
|
||||
日期:2022年10月30日
|
||||
注:脚本运行后会生成一个black.txt,之后如果出现车头pin找不到的情况下,请在black.txt搜索然后删除
|
||||
注意事项 pin 为助力pin 必须保证ck在里面
|
||||
作者要求 注释不能删除 否则后续不再更新
|
||||
作者授权发布KR库。搬运请完整保留注释。
|
||||
环境变量说明:
|
||||
export dyjpin="需要助力的pin值"
|
||||
|
||||
cron: 6 6 6 6 *
|
||||
new Env('赚钱大赢家');
|
||||
"""
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import time
|
||||
import uuid
|
||||
import json
|
||||
import random
|
||||
import logging
|
||||
import requests
|
||||
import traceback
|
||||
from hashlib import sha1
|
||||
from urllib.parse import quote_plus, unquote_plus, quote
|
||||
|
||||
activity_name = "京东极速版-赚钱大赢家"
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format="%(asctime)s %(levelname)s %(lineno)d %(message)s",
|
||||
datefmt="%H:%M:%S"
|
||||
)
|
||||
logger = logging.getLogger(activity_name)
|
||||
index = 0
|
||||
h5st_appid = 'd06f1'
|
||||
appCode = 'msc588d6d5'
|
||||
activeId = '63526d8f5fe613a6adb48f03'
|
||||
task_fn = ['打扫店铺']
|
||||
invite_taskId = None
|
||||
need_invite = 0
|
||||
not_tx = [0.3, 1, 3]
|
||||
black_user_file = 'black'
|
||||
|
||||
|
||||
class Userinfo:
|
||||
cookie_obj = []
|
||||
index = 0
|
||||
|
||||
def __init__(self, cookie):
|
||||
global index
|
||||
index += 1
|
||||
self.user_index = index
|
||||
self.cookie = cookie
|
||||
try:
|
||||
self.pt_pin = re.findall(r'pt_pin=(.*?);', self.cookie)[0]
|
||||
except Exception:
|
||||
logger.info(f"取值错误['pt_pin']:{traceback.format_exc()}")
|
||||
return
|
||||
self.name = unquote_plus(self.pt_pin)
|
||||
self.UA = 'jdltapp;iPhone;4.2.0;;;M/5.0;hasUPPay/0;pushNoticeIsOpen/1;lang/zh_CN;hasOCPay/0;appBuild/1217;supportBestPay/0;jdSupportDarkMode/0;ef/1;ep/%7B%22ciphertype%22%3A5%2C%22cipher%22%3A%7B%22ud%22%3A%22DtCzCNvwDzc4CwG0CWY2ZWTvENVwCJS3EJDvEWDsDNHuCNU2YJqnYm%3D%3D%22%2C%22sv%22%3A%22CJSkDy42%22%2C%22iad%22%3A%22C0DOGzumHNSjDJvMCy0nCUVOBJvLEOYjG0PNGzCmHOZNEJO2%22%7D%2C%22ts%22%3A1667286187%2C%22hdid%22%3A%22JM9F1ywUPwflvMIpYPok0tt5k9kW4ArJEU3lfLhxBqw%3D%22%2C%22version%22%3A%221.0.3%22%2C%22appname%22%3A%22com.360buy.jdmobile%22%2C%22ridx%22%3A-1%7D;Mozilla/5.0 (iPhone; CPU iPhone OS 12_7_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E126;supportJDSHWK/1'
|
||||
self.account_hot = False
|
||||
self.help_status = False
|
||||
Userinfo.cookie_obj.append(self)
|
||||
self.sha = sha1(str(self.pt_pin).encode('utf-8')).hexdigest()
|
||||
self.headers = {
|
||||
"Host": "wq.jd.com",
|
||||
"Cookie": self.cookie + f"sid={self.sha}",
|
||||
"User-Agent": self.UA,
|
||||
"Referer": f"https://wqs.jd.com/sns/202210/20/make-money-shop/guest.html?activeId={activeId}&type=sign&shareId=&__navVer=1",
|
||||
}
|
||||
self.shareUuid = ""
|
||||
self.invite_success = 0
|
||||
self.task_list = []
|
||||
self.need_help = False
|
||||
|
||||
def getData(self, task_name, shareId):
|
||||
url = f'https://wq.jd.com/makemoneyshop/{task_name}?g_ty=h5&g_tk=&appCode={appCode}&activeId={activeId}&shareId={shareId}&_stk=activeId,shareId&_ste=1&sceneval=2'
|
||||
res = requests.get(url=url, headers=self.headers, timeout=10).json()
|
||||
return res
|
||||
|
||||
def UserTask(self):
|
||||
home_res = self.getData('home', '')
|
||||
if home_res['code'] != 0:
|
||||
logger.info(f"车头账户[{self.name}]:{home_res['msg']}")
|
||||
return
|
||||
else:
|
||||
self.shareUuid = home_res['data']['shareId']
|
||||
logger.info(f"车头账户[{self.name}]:已获取助力码[{self.shareUuid}]")
|
||||
logger.info(f"车头账户[{self.name}]:当前营业币约[{home_res['data']['canUseCoinAmount']}]元")
|
||||
self.GetUserTaskStatusList()
|
||||
if self.need_help:
|
||||
logger.info(f"当前从{Userinfo.index}继续")
|
||||
for cookie in Userinfo.cookie_obj[Userinfo.index:]:
|
||||
if cookie.pt_pin == self.pt_pin:
|
||||
continue
|
||||
if cookie.account_hot:
|
||||
continue
|
||||
res = cookie.getData('guesthelp', self.shareUuid)
|
||||
if res['code'] == 147: # 火爆
|
||||
cookie.account_hot = True
|
||||
logger.info(f"工具人账户[{cookie.user_index}][{cookie.name}]:{res['msg']}")
|
||||
if res['code'] == 1007:
|
||||
logger.info(f"工具人账户[{cookie.user_index}][{cookie.name}]:{res['msg']}")
|
||||
if res['code'] == 1008:
|
||||
logger.info(f"工具人账户[{cookie.user_index}][{cookie.name}]:{res['msg']}")
|
||||
if str(res).find("助力任务已完成") > -1:
|
||||
self.reward(invite_taskId)
|
||||
if res['code'] == 0:
|
||||
self.reward(invite_taskId)
|
||||
self.invite_success += 1
|
||||
logger.info(f"工具人账户[{cookie.user_index}][{cookie.name}]:助力成功,当前助力成功{self.invite_success}次")
|
||||
|
||||
if self.invite_success >= need_invite:
|
||||
logger.info(f"车头账户[{self.name}]:助力已满")
|
||||
return self.exchange_query()
|
||||
Userinfo.index += 1
|
||||
# time.sleep(round(random.uniform(0.7, 1.3), 2))
|
||||
|
||||
else:
|
||||
return self.exchange_query()
|
||||
|
||||
def exchange_query(self):
|
||||
url = f'https://wq.jd.com/makemoneyshop/exchangequery?g_ty=h5&g_tk=&appCode={appCode}&activeId={activeId}&sceneval=2'
|
||||
res = requests.get(url=url, headers=self.headers).json()
|
||||
if res['code'] == 0:
|
||||
logger.info(f"车头账户[{self.name}]:获取微信提现信息成功")
|
||||
canUseCoinAmount = float(res['data']['canUseCoinAmount'])
|
||||
logger.info(f"车头账户[{self.name}]:当前余额[{canUseCoinAmount}]元")
|
||||
for data in res['data']['cashExchangeRuleList'][::-1]:
|
||||
if float(data['cashoutAmount']) not in not_tx:
|
||||
if canUseCoinAmount >= float(data['cashoutAmount']):
|
||||
logger.info(f"车头账户[{self.name}]:当前余额[{canUseCoinAmount}]元,符合提现规则[{data['cashoutAmount']}]门槛")
|
||||
rule_id = data['id']
|
||||
self.tx(rule_id)
|
||||
|
||||
else:
|
||||
logger.info(f"车头账户[{self.name}]:当前余额[{canUseCoinAmount}]元,不足提现[{data['cashoutAmount']}]门槛")
|
||||
else:
|
||||
logger.info(f"车头账户[{self.name}]:当前余额[{canUseCoinAmount}]元,不提现[{not_tx}]门槛")
|
||||
|
||||
def tx(self, rule_id):
|
||||
url = f'https://wq.jd.com/prmt_exchange/client/exchange?g_ty=h5&g_tk=&appCode={appCode}&bizCode=makemoneyshop&ruleId={rule_id}&sceneval=2'
|
||||
res = requests.get(url=url, headers=self.headers).json()
|
||||
if res['ret'] == 0:
|
||||
logger.info(f"车头账户[{self.name}]:提现成功")
|
||||
return True
|
||||
if res['ret'] == 232:
|
||||
logger.info(f"车头账户[{self.name}]:{res['msg']}")
|
||||
return False
|
||||
if res['ret'] == 604:
|
||||
logger.info(f"车头账户[{self.name}]:{res['msg']}")
|
||||
return True
|
||||
else:
|
||||
logger.info(f"车头账户[{self.name}]:{res}")
|
||||
|
||||
def GetUserTaskStatusList(self):
|
||||
global invite_taskId, need_invite
|
||||
url = f'https://wq.jd.com/newtasksys/newtasksys_front/GetUserTaskStatusList?g_ty=h5&g_tk=&appCode={appCode}&__t={getTime()}&source=makemoneyshop&bizCode=makemoneyshop&sceneval=2'
|
||||
res = requests.get(url=url, headers=self.headers, timeout=10).json()
|
||||
if res['ret'] == 0:
|
||||
msg = []
|
||||
for taskid, task in enumerate(res['data']['userTaskStatusList'], 1):
|
||||
taskName = task['taskName']
|
||||
reward = int(task['reward']) / 100
|
||||
taskId = task['taskId']
|
||||
configTargetTimes = task['configTargetTimes']
|
||||
status = str(task['gettaskStatus'])
|
||||
if taskName == '邀请好友打卡':
|
||||
self.invite_success = task['realCompletedTimes']
|
||||
if invite_taskId is None:
|
||||
invite_taskId = task['taskId']
|
||||
logger.info(f"已成功获取邀请好友打卡任务ID:{invite_taskId}")
|
||||
if need_invite == 0:
|
||||
need_invite = int(task['configTargetTimes'])
|
||||
if self.invite_success < need_invite:
|
||||
self.need_help = True
|
||||
logger.info(
|
||||
f"最高可邀请[{need_invite}]人,目前已邀请[{self.invite_success}]人,还需邀请[{int(need_invite) - int(self.invite_success)}]人")
|
||||
else:
|
||||
logger.info(f"最高可邀请[{need_invite}]人,目前已邀请[{self.invite_success}]人,助力已满,换号")
|
||||
|
||||
self.task_list.append(
|
||||
{
|
||||
"status": status,
|
||||
"taskName": taskName,
|
||||
"taskId": taskId,
|
||||
"configTargetTimes": configTargetTimes
|
||||
}
|
||||
)
|
||||
msg.append(
|
||||
f"{taskid} : {taskName} -- {reward}个营业币 -- {status.replace('1', '未完成').replace('2', '已完成')}")
|
||||
|
||||
print('\n'.join(msg))
|
||||
self.do_task()
|
||||
|
||||
def reward(self, taskId):
|
||||
url = f'https://wq.jd.com/newtasksys/newtasksys_front/Award?g_ty=h5&g_tk=&appCode={appCode}&__t={getTime()}&source=makemoneyshop&taskId={taskId}&bizCode=makemoneyshop&sceneval=2'
|
||||
self.headers[
|
||||
'Referer'] = f'https://wqs.jd.com/sns/202210/20/make-money-shop/index.html?activeId={activeId}&lng=118.389971&lat=24.974751&sid={self.sha}&un_area=16_1341_1343_44855'
|
||||
res = requests.get(url=url, headers=self.headers, timeout=10).json()
|
||||
if res['ret'] == 0:
|
||||
logger.info(f"车头账户[{self.name}]:领取成功")
|
||||
else:
|
||||
logger.info(f"车头账户[{self.name}]:{res['msg']}")
|
||||
|
||||
def do_task(self):
|
||||
for task in self.task_list:
|
||||
if task['taskName'] in task_fn and task['status'] != "2":
|
||||
logger.info(f"车头账户[{self.name}]:去做[{task['taskName']}]")
|
||||
self.reward(task['taskId'])
|
||||
|
||||
|
||||
def getTime():
|
||||
return int(time.time() * 1000)
|
||||
|
||||
|
||||
def black_user():
|
||||
if os.path.exists(f'{black_user_file}.txt'):
|
||||
with open(f'{black_user_file}.txt', 'r') as f:
|
||||
return f.read().split('&')
|
||||
else:
|
||||
with open(f'{black_user_file}.txt', 'a'):
|
||||
logger.info(f"文件:{black_user_file}不存在,创建")
|
||||
return []
|
||||
|
||||
|
||||
def del_black(pin):
|
||||
cookie_copy = Userinfo.cookie_obj.copy()
|
||||
for cookie in cookie_copy:
|
||||
if pin in cookie.pt_pin and pin != '':
|
||||
Userinfo.cookie_obj.remove(cookie)
|
||||
|
||||
|
||||
def main():
|
||||
try:
|
||||
cookies = os.environ['JD_COOKIE'].split('&')
|
||||
except:
|
||||
with open(os.path.join(os.path.dirname(__file__), 'cklist.txt'), 'r') as f:
|
||||
cookies = f.read().split('\n')
|
||||
helpPin = os.environ.get('dyjpin', "")
|
||||
if helpPin == "":
|
||||
logger.info("您尚未填写'dyjpin'-- pin1&pin2&pin")
|
||||
sys.exit()
|
||||
try:
|
||||
helpPin = helpPin.split('&')
|
||||
except:
|
||||
logger.info("dyjpin填写格式错误,pin1&pin2&pin3")
|
||||
sys.exit()
|
||||
[Userinfo(cookie) for cookie in cookies]
|
||||
black = black_user()
|
||||
if black:
|
||||
del black[-1]
|
||||
for pin in black:
|
||||
del_black(pin)
|
||||
logger.info(f"共去除{len(black)}个黑名单pin")
|
||||
logger.info(f"当前剩余[{len(Userinfo.cookie_obj)}]个cookie可助力")
|
||||
inviterList = (
|
||||
[cookie_obj for cookie_obj in Userinfo.cookie_obj for name in helpPin if name in cookie_obj.pt_pin])
|
||||
if not inviterList:
|
||||
logger.info(f"没有找到车头:{helpPin}")
|
||||
sys.exit()
|
||||
logger.info(f"共找到[{len(inviterList)}]车头")
|
||||
for inviter in inviterList:
|
||||
logger.info(f"开启助力车头:{inviter.pt_pin}")
|
||||
inviter.UserTask()
|
||||
time.sleep(round(random.uniform(0.7, 1.3), 2))
|
||||
for cookie in Userinfo.cookie_obj:
|
||||
if cookie.account_hot:
|
||||
if cookie.pt_pin in str(black):
|
||||
continue
|
||||
if cookie.pt_pin in helpPin:
|
||||
continue
|
||||
with open(f'{black_user_file}.txt', 'a') as w:
|
||||
w.write(cookie.pt_pin + '&')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
21
jd_book.js
21
jd_book.js
File diff suppressed because one or more lines are too long
619
jd_cash_nolan.js
619
jd_cash_nolan.js
File diff suppressed because one or more lines are too long
262
jd_cash_wx.js
262
jd_cash_wx.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
330
jd_fc_winner.js
330
jd_fc_winner.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
148
jd_fuli.js
148
jd_fuli.js
File diff suppressed because one or more lines are too long
11
jd_gwxj_v.js
11
jd_gwxj_v.js
File diff suppressed because one or more lines are too long
13
jd_hmyy.js
13
jd_hmyy.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
360
jd_superBrand.js
360
jd_superBrand.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
155
jd_tewu.ts
155
jd_tewu.ts
@ -1,155 +0,0 @@
|
||||
/**
|
||||
* 京东-下拉
|
||||
* cron: 15 8,20 * * *
|
||||
*/
|
||||
|
||||
import USER_AGENT, {requireConfig, wait, o2s, getshareCodeHW, post} from './TS_USER_AGENTS'
|
||||
|
||||
interface ShareCode {
|
||||
activityId: number,
|
||||
encryptProjectId: string,
|
||||
encryptAssignmentId: string,
|
||||
itemId: string
|
||||
}
|
||||
|
||||
let cookie: string = '', UserName: string = '', res: any = '', message: string = '', shareCodes: ShareCode[] = [], shareCodesSelf: ShareCode[] = [], shareCodesHW: any = [], black: string[] = []
|
||||
|
||||
!(async () => {
|
||||
let cookiesArr: string[] = await requireConfig()
|
||||
let activityId: number
|
||||
for (let [index, value] of cookiesArr.entries()) {
|
||||
cookie = value
|
||||
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
|
||||
console.log(`\n开始【京东账号${index + 1}】${UserName}\n`)
|
||||
|
||||
res = await api('showSecondFloorCardInfo', {"source": "card"})
|
||||
try {
|
||||
activityId = res.data.result.activityBaseInfo.activityId
|
||||
} catch (e) {
|
||||
console.log('获取活动信息错误')
|
||||
black.push(UserName)
|
||||
await wait(2000)
|
||||
continue
|
||||
}
|
||||
let encryptProjectId: string = res.data.result.activityBaseInfo.encryptProjectId
|
||||
await wait(1000)
|
||||
|
||||
// 任务
|
||||
res = await api('superBrandTaskList', {"source": "card", "activityId": activityId, "assistInfoFlag": 1})
|
||||
o2s(res)
|
||||
|
||||
for (let t of res.data.result.taskList) {
|
||||
if (t.completionCnt !== t.assignmentTimesLimit) {
|
||||
// 浏览、关注
|
||||
if (t.ext?.shoppingActivity || t.ext?.followShop) {
|
||||
let tp = t.ext?.shoppingActivity || t.ext?.followShop
|
||||
tp = tp[0]
|
||||
console.log(tp.title || tp.shopName, tp.itemId)
|
||||
res = await api('superBrandDoTask', {"source": "card", "activityId": activityId, "encryptProjectId": encryptProjectId, "encryptAssignmentId": t.encryptAssignmentId, "assignmentType": t.assignmentType, "itemId": tp.itemId, "actionType": 0})
|
||||
console.log(res.data?.bizMsg)
|
||||
await wait(2000)
|
||||
}
|
||||
|
||||
// 下拉
|
||||
if (t.ext?.sign2) {
|
||||
for (let sign of t.ext.sign2) {
|
||||
if (sign.status === 0 && [10, 18].includes(new Date().getHours())) {
|
||||
res = await api('superBrandDoTask', {"source": "card", "activityId": activityId, "encryptProjectId": encryptProjectId, "encryptAssignmentId": t.encryptAssignmentId, "assignmentType": t.assignmentType, "itemId": t.ext.currentSectionItemId, "actionType": 0})
|
||||
console.log(res.data?.bizMsg)
|
||||
await wait(2000)
|
||||
console.log('下拉任务', t.ext?.sign2)
|
||||
} else if (sign.status !== 0) {
|
||||
console.log(`${sign.beginTime} 签到完成`)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 助力码
|
||||
if (t.ext?.assistTaskDetail) {
|
||||
console.log('助力码:', t.ext.assistTaskDetail.itemId)
|
||||
console.log('收到助力:', t.ext?.assistList?.length ?? 0)
|
||||
shareCodesSelf.push({
|
||||
activityId: activityId,
|
||||
encryptProjectId: encryptProjectId,
|
||||
encryptAssignmentId: t.encryptAssignmentId,
|
||||
itemId: t.ext.assistTaskDetail.itemId
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// 抽奖
|
||||
try {
|
||||
if (new Date().getHours() === 20) {
|
||||
let sum: number = 0
|
||||
res = await api('superBrandSecondFloorMainPage', {"source": "card"})
|
||||
let userStarNum: number = res.data.result.activityUserInfo.userStarNum
|
||||
console.log('可以抽奖', userStarNum, '次')
|
||||
for (let i = 0; i < userStarNum; i++) {
|
||||
res = await api('superBrandTaskLottery', {"source": "card", "activityId": activityId})
|
||||
if (res.data.result?.rewardComponent?.beanList?.length) {
|
||||
console.log('抽奖获得京豆:', res.data.result.rewardComponent.beanList[0].quantity)
|
||||
sum += res.data.result.rewardComponent.beanList[0].quantity
|
||||
} else {
|
||||
console.log('没抽到?', JSON.stringify(res))
|
||||
}
|
||||
await wait(2000)
|
||||
}
|
||||
message += `【京东账号${index + 1}】${UserName}\n抽奖${userStarNum}次,获得京豆${sum}\n\n`
|
||||
}
|
||||
} catch (e) {
|
||||
console.log('error')
|
||||
}
|
||||
await wait(2000)
|
||||
}
|
||||
|
||||
o2s(shareCodesSelf)
|
||||
shareCodesHW = await getshareCodeHW('tewu')
|
||||
shareCodes = [...shareCodesSelf, ...shareCodesHW]
|
||||
|
||||
let full: string[] = []
|
||||
for (let [index, value] of cookiesArr.entries()) {
|
||||
cookie = value
|
||||
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
|
||||
if (black.includes(UserName)) {
|
||||
console.log('黑号')
|
||||
continue
|
||||
}
|
||||
for (let code of shareCodes) {
|
||||
if (full.includes(code.itemId))
|
||||
continue
|
||||
console.log(`账号${index + 1} ${UserName} 去助力 ${code.itemId}`)
|
||||
res = await api('superBrandDoTask', {"source": "card", "activityId": code.activityId, "encryptProjectId": code.encryptProjectId, "encryptAssignmentId": code.encryptAssignmentId, "assignmentType": 2, "itemId": code.itemId, "actionType": 0})
|
||||
if (res.data.bizCode === '0') {
|
||||
console.log('助力成功')
|
||||
} else if (res.data.bizCode === '103') {
|
||||
console.log('助力满了')
|
||||
full.push(code.itemId)
|
||||
} else if (res.data.bizCode === '104') {
|
||||
console.log('已助力过')
|
||||
} else if (res.data.bizCode === '108') {
|
||||
console.log('上限')
|
||||
break
|
||||
} else if (res.data.bizCode === '109') {
|
||||
} else if (res.data.bizCode === '2001') {
|
||||
console.log('黑号')
|
||||
break
|
||||
} else if (res.data.bizCode === '4001') {
|
||||
console.log('助力码过期')
|
||||
} else {
|
||||
o2s(res, 'error')
|
||||
}
|
||||
await wait(2000)
|
||||
}
|
||||
}
|
||||
})()
|
||||
|
||||
async function api(fn: string, body: object) {
|
||||
return await post(`https://api.m.jd.com/?uuid=&client=wh5&appid=ProductZ4Brand&functionId=${fn}&t=${Date.now()}&body=${encodeURIComponent(JSON.stringify(body))}`, '', {
|
||||
'Host': 'api.m.jd.com',
|
||||
'Origin': 'https://pro.m.jd.com',
|
||||
'User-Agent': USER_AGENT,
|
||||
'Referer': 'https://pro.m.jd.com/',
|
||||
'Cookie': cookie
|
||||
})
|
||||
}
|
133
jd_track.ts
133
jd_track.ts
@ -1,133 +0,0 @@
|
||||
/**
|
||||
* 京东快递更新通知
|
||||
* cron: 0 0-23/4 * * *
|
||||
*/
|
||||
|
||||
import * as path from "path"
|
||||
import {sendNotify} from './sendNotify'
|
||||
import {existsSync, mkdirSync, readFileSync, writeFileSync} from "fs"
|
||||
import USER_AGENT, {get, requireConfig, exceptCookie, wait, o2s} from "./TS_USER_AGENTS"
|
||||
import {pushplus} from "./utils/pushplus";
|
||||
|
||||
let cookie: string = '', UserName: string, allMessage: string = '', res: any = ''
|
||||
|
||||
!(async () => {
|
||||
let cookiesArr: string[] = await requireConfig()
|
||||
let except: string[] = exceptCookie(path.basename(__filename))
|
||||
let orders: any = {}, pushplusArr: { pt_pin: string, pushplus: string }[], pushplusUser: string[] = []
|
||||
try {
|
||||
pushplusArr = JSON.parse(readFileSync('./utils/account.json').toString())
|
||||
} catch (e) {
|
||||
console.log('utils/account.json load failed')
|
||||
}
|
||||
for (let user of pushplusArr) {
|
||||
if (user.pushplus)
|
||||
pushplusUser.push(decodeURIComponent(user.pt_pin))
|
||||
}
|
||||
if (existsSync('./json')) {
|
||||
if (existsSync('./json/jd_track.json')) {
|
||||
orders = JSON.parse(readFileSync('./json/jd_track.json').toString() || '{}')
|
||||
} else {
|
||||
writeFileSync('./json/jd_track.json', '{}')
|
||||
}
|
||||
} else {
|
||||
mkdirSync('./json')
|
||||
writeFileSync('./json/jd_track.json', '{}')
|
||||
}
|
||||
for (let [index, value] of cookiesArr.entries()) {
|
||||
cookie = value
|
||||
UserName = decodeURIComponent(cookie.match(/pt_pin=([^;]*)/)![1])
|
||||
console.log(`\n开始【京东账号${index + 1}】${UserName}\n`)
|
||||
|
||||
if (except.includes(encodeURIComponent(UserName))) {
|
||||
console.log('已设置跳过')
|
||||
continue
|
||||
}
|
||||
|
||||
let message: string = '', markdown: string = '', i: number = 1
|
||||
|
||||
let headers: object = {
|
||||
'authority': 'wq.jd.com',
|
||||
'user-agent': USER_AGENT,
|
||||
'referer': 'https://wqs.jd.com/',
|
||||
'cookie': cookie
|
||||
}
|
||||
|
||||
res = await get(`https://wq.jd.com/bases/orderlist/list?order_type=2&start_page=1&last_page=0&page_size=10&callersource=mainorder&t=${Date.now()}&sceneval=2&_=${Date.now()}&sceneval=2`, headers)
|
||||
await wait(1000)
|
||||
|
||||
for (let order of res.orderList) {
|
||||
let orderId: string = order.orderId
|
||||
let orderType: string = order.orderType
|
||||
let title: string = order.productList[0].title
|
||||
let t: string = order.progressInfo?.tip || null
|
||||
let status: string = order.progressInfo?.content || null
|
||||
let shopName: string = order.shopInfo.shopName
|
||||
|
||||
res = await get(`https://wq.jd.com/bases/wuliudetail/dealloglist?deal_id=${orderId}&orderstate=15&ordertype=${orderType}&t=${Date.now()}&sceneval=2`, headers)
|
||||
await wait(1000)
|
||||
let carrier: string = res.carrier, carriageId: string = res.carriageId
|
||||
|
||||
if (t && status) {
|
||||
if (status.match(/(?=签收|已取走|已暂存)/))
|
||||
continue
|
||||
if (!pushplusUser.includes(UserName)) {
|
||||
console.log(`<${shopName}>\t${title}`)
|
||||
console.log('\t', t, status)
|
||||
console.log()
|
||||
} else {
|
||||
console.log('隐私保护,不显示日志')
|
||||
}
|
||||
if (!Object.keys(orders).includes(orderId) || orders[orderId]['status'] !== status) {
|
||||
if (pushplusUser.includes(UserName)) {
|
||||
console.log('+ pushplus')
|
||||
markdown += `${i++}. ${title}\n\t- ${carrier} ${carriageId}\n\t- ${t} ${status}\n`
|
||||
} else {
|
||||
console.log('+ sendNotify')
|
||||
message += `<${shopName}>\t${title}\n${carrier} ${carriageId}\n${t} ${status}\n\n`
|
||||
}
|
||||
}
|
||||
orders[orderId] = {
|
||||
user: UserName, shopName, title, t, status, carrier, carriageId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (message) {
|
||||
message = `【京东账号${index + 1}】 ${UserName}\n\n${message}`
|
||||
allMessage += message
|
||||
}
|
||||
if (markdown) {
|
||||
markdown = `#### <${UserName}>\n${markdown}`
|
||||
await pushplus('京东快递更新', markdown, 'markdown')
|
||||
}
|
||||
await wait(1000)
|
||||
}
|
||||
|
||||
|
||||
let account: { pt_pin: string, remarks: string }[] = []
|
||||
try {
|
||||
account = JSON.parse(readFileSync('./utils/account.json').toString())
|
||||
} catch (e) {
|
||||
console.log('utils/account.json load failed')
|
||||
}
|
||||
|
||||
// 删除已签收
|
||||
Object.keys(orders).map(key => {
|
||||
if (orders[key].status.match(/(?=签收|已取走|已暂存)/)) {
|
||||
delete orders[key]
|
||||
}
|
||||
if (pushplusUser.includes(orders[key].user)) {
|
||||
orders[key].title = '******'
|
||||
}
|
||||
})
|
||||
|
||||
// 替换通知中的用户名为备注
|
||||
orders = JSON.stringify(orders, null, 2)
|
||||
for (let acc of account) {
|
||||
orders = orders.replace(new RegExp(decodeURIComponent(acc.pt_pin), 'g'), acc.remarks ?? acc.pt_pin)
|
||||
}
|
||||
writeFileSync('./json/jd_track.json', orders)
|
||||
if (allMessage)
|
||||
await sendNotify('京东快递更新', allMessage)
|
||||
})()
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user