mirror of
https://github.com/shufflewzc/faker2.git
synced 2025-04-23 02:48:44 +08:00
update
This commit is contained in:
parent
cb89413e7d
commit
7f167ac322
@ -13,18 +13,18 @@ const {
|
||||
DisableCk,
|
||||
EnableCk,
|
||||
getstatus
|
||||
} = require('./ql');
|
||||
} = require('./utils/ql');
|
||||
const api = got.extend({
|
||||
retry: {
|
||||
limit: 0
|
||||
},
|
||||
responseType: 'json',
|
||||
});
|
||||
});
|
||||
|
||||
let ShowSuccess = "false",
|
||||
CKAlwaysNotify = "false",
|
||||
CKAutoEnable = "true",
|
||||
NoWarnError = "false";
|
||||
CKAlwaysNotify = "false",
|
||||
CKAutoEnable = "true",
|
||||
NoWarnError = "false";
|
||||
|
||||
let MessageUserGp2 = "";
|
||||
let MessageUserGp3 = "";
|
||||
@ -45,38 +45,38 @@ let IndexGp4 = 0;
|
||||
let IndexAll = 0;
|
||||
|
||||
let TempErrorMessage = '',
|
||||
TempSuccessMessage = '',
|
||||
TempDisableMessage = '',
|
||||
TempEnableMessage = '',
|
||||
TempOErrorMessage = '';
|
||||
TempSuccessMessage = '',
|
||||
TempDisableMessage = '',
|
||||
TempEnableMessage = '',
|
||||
TempOErrorMessage = '';
|
||||
|
||||
let allMessage = '',
|
||||
ErrorMessage = '',
|
||||
SuccessMessage = '',
|
||||
DisableMessage = '',
|
||||
EnableMessage = '',
|
||||
OErrorMessage = '';
|
||||
ErrorMessage = '',
|
||||
SuccessMessage = '',
|
||||
DisableMessage = '',
|
||||
EnableMessage = '',
|
||||
OErrorMessage = '';
|
||||
|
||||
let allMessageGp2 = '',
|
||||
ErrorMessageGp2 = '',
|
||||
SuccessMessageGp2 = '',
|
||||
DisableMessageGp2 = '',
|
||||
EnableMessageGp2 = '',
|
||||
OErrorMessageGp2 = '';
|
||||
ErrorMessageGp2 = '',
|
||||
SuccessMessageGp2 = '',
|
||||
DisableMessageGp2 = '',
|
||||
EnableMessageGp2 = '',
|
||||
OErrorMessageGp2 = '';
|
||||
|
||||
let allMessageGp3 = '',
|
||||
ErrorMessageGp3 = '',
|
||||
SuccessMessageGp3 = '',
|
||||
DisableMessageGp3 = '',
|
||||
EnableMessageGp3 = '',
|
||||
OErrorMessageGp3 = '';
|
||||
ErrorMessageGp3 = '',
|
||||
SuccessMessageGp3 = '',
|
||||
DisableMessageGp3 = '',
|
||||
EnableMessageGp3 = '',
|
||||
OErrorMessageGp3 = '';
|
||||
|
||||
let allMessageGp4 = '',
|
||||
ErrorMessageGp4 = '',
|
||||
SuccessMessageGp4 = '',
|
||||
DisableMessageGp4 = '',
|
||||
EnableMessageGp4 = '',
|
||||
OErrorMessageGp4 = '';
|
||||
ErrorMessageGp4 = '',
|
||||
SuccessMessageGp4 = '',
|
||||
DisableMessageGp4 = '',
|
||||
EnableMessageGp4 = '',
|
||||
OErrorMessageGp4 = '';
|
||||
|
||||
let strAllNotify = "";
|
||||
let strNotifyOneTemp = "";
|
||||
@ -118,11 +118,6 @@ if ($.isNode() && process.env.CHECKCK_CKNOWARNERROR) {
|
||||
if ($.isNode() && process.env.CHECKCK_ALLNOTIFY) {
|
||||
|
||||
strAllNotify = process.env.CHECKCK_ALLNOTIFY;
|
||||
/* if (strTempNotify.length > 0) {
|
||||
for (var TempNotifyl in strTempNotify) {
|
||||
strAllNotify += strTempNotify[TempNotifyl] + '\n';
|
||||
}
|
||||
} */
|
||||
console.log(`检测到设定了温馨提示,将在推送信息中置顶显示...`);
|
||||
strAllNotify = `\n【✨✨✨✨温馨提示✨✨✨✨】\n` + strAllNotify;
|
||||
console.log(strAllNotify);
|
||||
@ -194,7 +189,11 @@ if ($.isNode() && process.env.CHECKCK_ALLNOTIFY) {
|
||||
ReturnMessageTitle = `【账号${IndexAll}🆔】${$.UserName2}`;
|
||||
}
|
||||
|
||||
try {
|
||||
await TotalBean();
|
||||
}catch (e) {
|
||||
|
||||
}
|
||||
if ($.NoReturn) {
|
||||
console.log(`接口1检测失败,尝试使用接口2....\n`);
|
||||
await isLoginByX1a0He();
|
||||
@ -481,8 +480,8 @@ if ($.isNode() && process.env.CHECKCK_ALLNOTIFY) {
|
||||
}
|
||||
|
||||
})()
|
||||
.catch((e) => $.logErr(e))
|
||||
.finally(() => $.done())
|
||||
.catch((e) => $.logErr(e))
|
||||
.finally(() => $.done())
|
||||
|
||||
function TotalBean() {
|
||||
return new Promise(async resolve => {
|
||||
@ -502,7 +501,7 @@ function TotalBean() {
|
||||
$.get(options, (err, resp, data) => {
|
||||
try {
|
||||
if (err) {
|
||||
$.logErr(err)
|
||||
// $.logErr(err)
|
||||
$.nickName = decodeURIComponent($.UserName);
|
||||
$.NoReturn = `${$.nickName} :` + `${JSON.stringify(err)}\n`;
|
||||
} else {
|
||||
@ -528,7 +527,7 @@ function TotalBean() {
|
||||
}
|
||||
} catch (e) {
|
||||
$.nickName = decodeURIComponent($.UserName);
|
||||
$.logErr(e)
|
||||
// $.logErr(e)
|
||||
$.NoReturn = `${$.nickName} : 检测出错,不做变动\n`;
|
||||
}
|
||||
finally {
|
||||
|
3675
jd_bean_change.js
3675
jd_bean_change.js
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
116
jd_beauty.js
116
jd_beauty.js
@ -1,20 +1,24 @@
|
||||
/*
|
||||
美丽研究院
|
||||
修复+尽量优化为同步执行,减少并发,说不定就减小黑号概率了呢?
|
||||
https://raw.githubusercontent.com/aTenb/jdOpenSharePicker/master/jd_beautyStudy.js
|
||||
更新时间:2021-12-03
|
||||
活动入口:京东app首页-美妆馆-底部中间按钮
|
||||
来源 Dylan
|
||||
定时自定义,集中访问可能炸
|
||||
活动入口:京东app首页-美妆馆-底部中间按钮
|
||||
#随机定时运行一次
|
||||
*/
|
||||
const $ = new Env('美丽研究院');
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
console.log('连接服务器不稳定,能不能用随缘!!!')
|
||||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||||
|
||||
|
||||
const WebSocket = require('ws');
|
||||
const UA = process.env.JD_USER_AGENT ? process.env.JD_USER_AGENT : (require('./USER_AGENTS').USER_AGENT)
|
||||
const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
$.accountCheck = true;
|
||||
$.init = false;
|
||||
let cookiesArr = [], cookie = '', message;
|
||||
|
||||
function oc(fn, defaultVal) {
|
||||
try {
|
||||
return fn()
|
||||
@ -22,6 +26,7 @@ function oc(fn, defaultVal) {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
|
||||
if ($.isNode()) {
|
||||
Object.keys(jdCookieNode).forEach((item) => {
|
||||
cookiesArr.push(jdCookieNode[item])
|
||||
@ -30,7 +35,7 @@ if ($.isNode()) {
|
||||
} else {
|
||||
cookiesArr = [$.getdata('CookieJD'), $.getdata('CookieJD2'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item);
|
||||
}
|
||||
const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
|
||||
!(async () => {
|
||||
if (!cookiesArr[0]) {
|
||||
$.msg($.name, '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/', {"open-url": "https://bean.m.jd.com/"});
|
||||
@ -50,7 +55,7 @@ const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
$.nickName = '';
|
||||
message = '';
|
||||
$.token = '';
|
||||
await TotalBean();
|
||||
//await TotalBean();
|
||||
console.log(`\n******开始【京东账号${$.index}】${$.nickName || $.UserName}*********\n`);
|
||||
if (!$.isLogin) {
|
||||
$.msg($.name, `【提示】cookie已失效`, `京东账号${$.index} ${$.nickName || $.UserName}\n请重新登录获取\nhttps://bean.m.jd.com/`, {"open-url": "https://bean.m.jd.com/"});
|
||||
@ -61,9 +66,7 @@ const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
continue
|
||||
}
|
||||
await accountCheck();
|
||||
while (!$.hasDone) {
|
||||
await $.wait(3000)
|
||||
}
|
||||
await $.wait(10000)
|
||||
if ($.accountCheck) {
|
||||
await jdBeauty();
|
||||
}
|
||||
@ -87,7 +90,7 @@ async function accountCheck() {
|
||||
await $.wait(10000)
|
||||
await getIsvToken2()
|
||||
await $.wait(10000)
|
||||
await getToken()
|
||||
await getAuth()
|
||||
await $.wait(10000)
|
||||
if (!$.token) {
|
||||
console.log(`\n\n提示:请尝试换服务器ip或者设置"xinruimz-isv.isvjcloud.com"域名直连,或者自定义UA再次尝试(环境变量JD_USER_AGENT)\n\n`)
|
||||
@ -102,9 +105,9 @@ async function accountCheck() {
|
||||
client.onopen = async () => {
|
||||
console.log(`美容研究院服务器连接成功`);
|
||||
client.send('{"msg":{"type":"action","args":{"source":1},"action":"_init_"}}');
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
client.send(`{"msg":{"type":"action","args":{"source":1},"action":"get_user"}}`);
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
};
|
||||
client.onmessage = async function (e) {
|
||||
if (e.data !== 'pong' && e.data && safeGet(e.data)) {
|
||||
@ -143,7 +146,6 @@ async function jdBeauty() {
|
||||
async function mr() {
|
||||
$.coins = 0
|
||||
let positionList = ['b1', 'h1', 's1', 'b2', 'h2', 's2']
|
||||
let positionList2 = ['b2', 'h2', 's2']
|
||||
$.tokens = []
|
||||
$.pos = []
|
||||
$.helpInfo = []
|
||||
@ -165,24 +167,18 @@ async function mr() {
|
||||
await $.wait(10000);
|
||||
}
|
||||
console.log(`\n========生产任务相关========\n`)
|
||||
for (let help of helpInfo) {
|
||||
client.send(help);
|
||||
}
|
||||
await $.wait(3000)
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"get_produce_material"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
// 获得正在生产的商品信息
|
||||
client.send('{"msg":{"type":"action","args":{},"action":"product_producing"}}')
|
||||
await $.wait(10000);
|
||||
// 获得库存
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"get_package"}}`)
|
||||
await $.wait(20000);
|
||||
// 获得可生成的商品列表
|
||||
client.send(`{"msg":{"type":"action","args":{"page":1,"num":10},"action":"product_lists"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
// 获得原料生产列表
|
||||
for (let pos of positionList) {
|
||||
client.send(`{"msg":{"type":"action","args":{"position":"${pos}"},"action":"produce_position_info_v2"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
}
|
||||
console.log(`\n========日常任务相关========`)
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"check_up"}}`)
|
||||
@ -196,7 +192,7 @@ async function mr() {
|
||||
await $.wait(50000);
|
||||
//最后做时间最久的日常任务
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"shop_products"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
}
|
||||
};
|
||||
client.onclose = () => {
|
||||
@ -205,10 +201,7 @@ async function mr() {
|
||||
$.init = true;
|
||||
$.hasDone = true;
|
||||
for (let i = 0; i < $.pos.length && i < $.tokens.length; ++i) {
|
||||
client.send(`{"msg":{"type":"action","args":{"inviter_id":"${$.userInfo.id}"},"action":"employee_get_user"}}`);
|
||||
$.helpInfo.push(`{"msg":{"type":"action","args":{"inviter_id":"${$.userInfo.id}","position":"${$.pos[i]}","token":"${$.tokens[i]}"},"action":"employee_v2"}}`)
|
||||
client.send(`{"msg":{"type":"action","args":{"inviter_id":"${$.userInfo.id}","position":"${$.pos[i]}"},"action":"employee_speed_v2"}}`);
|
||||
client.send(`{"msg":{"action":"write","type":"action","args":{"action_type":3,"channel":2,"source_app":2}}}`);
|
||||
$.helpInfo.push(`{"msg":{"type":"action","args":{"inviter_id":"${$.userInfo.id}","position":"${$.pos[i]}","token":"${$.tokens[i]}"},"action":"employee"}}`)
|
||||
}
|
||||
};
|
||||
client.onmessage = async function (e) {
|
||||
@ -223,9 +216,9 @@ async function mr() {
|
||||
// 去签到
|
||||
console.log(`去做签到任务`)
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"sign_in"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
client.send(`{"msg":{"action":"write","type":"action","args":{"action_type":1,"channel":2,"source_app":2}}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
}
|
||||
break
|
||||
case "get_user":
|
||||
@ -235,7 +228,7 @@ async function mr() {
|
||||
console.log(`去做新手任务`)
|
||||
for (let i = $.userInfo.step; i < 15; ++i) {
|
||||
client.send(`{"msg":{"type":"action","args":{},"action":"newcomer_update"}}`)
|
||||
await $.wait(10000);
|
||||
await $.wait(20000);
|
||||
}
|
||||
} else
|
||||
$.init = true;
|
||||
@ -288,12 +281,10 @@ async function mr() {
|
||||
}
|
||||
await $.wait(10000);
|
||||
}
|
||||
if ($.taskState.meetingplace_view.length <= vo.data.meetingplaces.length) {
|
||||
for (let vc of vo.data.meetingplaces) {
|
||||
console.log(`去做第${vc.name}浏览会场任务`)
|
||||
client.send(`{"msg":{"type":"action","args":{"source":1,"meetingplace_id":${vc.id}},"action":"meetingplace_view"}}`)
|
||||
await $.wait(2500)
|
||||
}
|
||||
for (let i = $.taskState.meetingplace_view; i < $.taskState.mettingplace_count; ++i) {
|
||||
console.log(`去做第${i + 1}次浏览会场任务`)
|
||||
client.send(`{"msg":{"type":"action","args":{"source":1},"action":"meetingplace_view"}}`)
|
||||
await $.wait(10000);
|
||||
}
|
||||
if ($.taskState.today_answered === 0) {
|
||||
console.log(`去做每日问答任务`)
|
||||
@ -365,7 +356,7 @@ async function mr() {
|
||||
client.send(`{"msg":{"type":"action","args":{"position":"${vo.data.position}","material_id":${ma.id}},"action":"material_produce_v2"}}`)
|
||||
await $.wait(5000);
|
||||
} else {
|
||||
ma = $.material.base[1]['items'][positionList2.indexOf(vo.data.position)]
|
||||
ma = $.material.base[1]['items'][positionList.indexOf(vo.data.position)]
|
||||
if (ma) {
|
||||
console.log(`else去生产${ma.name}`)
|
||||
client.send(`{"msg":{"type":"action","args":{"position":"${vo.data.position}","material_id":${ma.id}},"action":"material_produce_v2"}}`)
|
||||
@ -411,7 +402,7 @@ async function mr() {
|
||||
case "product_lists":
|
||||
let need_material = []
|
||||
if (vo.code === '200' || vo.code === 200) {
|
||||
$.products = vo.data.filter(vo=>vo.level===$.level-1)
|
||||
$.products = vo.data.filter(vo=>vo.level===$.level)
|
||||
console.log(`========可生产商品信息========`)
|
||||
for (let product of $.products) {
|
||||
let num = Infinity
|
||||
@ -440,7 +431,6 @@ async function mr() {
|
||||
console.log(`【${product.name}】可生产份数大于0,去生产`)
|
||||
//product_produce 产品研发里的生产
|
||||
client.send(`{"msg":{"type":"action","args":{"product_id":${product.id},"amount":${num}},"action":"product_produce"}}`)
|
||||
client.send(`{"msg":{"type":"action","args":{"product_id":${product.id},"amount":${num}},"action":"once_completion"}}`)
|
||||
await $.wait(10000);
|
||||
} else {
|
||||
console.log(msg)
|
||||
@ -504,9 +494,9 @@ async function mr() {
|
||||
for (let benefit of vo.data) {
|
||||
if (benefit.type === 1) { //type 1 是京豆
|
||||
//console.log(`benefit:${JSON.stringify(benefit)}`);
|
||||
if(benefit.description === "1 京豆" && parseInt(benefit.day_exchange_count) < 5 && $.total > benefit.coins){
|
||||
if(benefit.description === "1 京豆" && parseInt(benefit.day_exchange_count) < 10 && $.total > benefit.coins){
|
||||
$timenum = parseInt($.total / benefit.coins);
|
||||
if ($timenum > 5) $timenum = 5;
|
||||
if ($timenum > 10) $timenum = 10;
|
||||
console.log(`\n可兑换${$timenum}次京豆:`)
|
||||
for (let i = 0; i < $timenum; i++){
|
||||
client.send(`{"msg":{"type":"action","args":{"benefit_id":${benefit.id}},"action":"to_exchange"}}`);
|
||||
@ -528,7 +518,7 @@ async function mr() {
|
||||
break
|
||||
case "to_exchange":
|
||||
if(oc(() => vo.data.coins)){
|
||||
console.log(`兑换${vo.data.coins/-10000}京豆成功`)
|
||||
console.log(`兑换${vo.data.coins/-1000}京豆成功`)
|
||||
}else{
|
||||
console.log(`兑换京豆失败`)
|
||||
}
|
||||
@ -536,15 +526,15 @@ async function mr() {
|
||||
case "get_produce_material":
|
||||
$.material = vo.data
|
||||
break
|
||||
//case "to_employee":
|
||||
// console.log(`雇佣助力码【${oc(() => vo.data.token)}】`)
|
||||
// if(oc(() => vo.data.token)){
|
||||
// $.tokens.push(vo.data.token)
|
||||
// }else{
|
||||
// console.log(`not exist:${oc(() => vo.data)}`)
|
||||
// }
|
||||
// break
|
||||
case "employee_v2":
|
||||
case "to_employee":
|
||||
console.log(`雇佣助力码【${oc(() => vo.data.token)}】`)
|
||||
if(oc(() => vo.data.token)){
|
||||
$.tokens.push(vo.data.token)
|
||||
}else{
|
||||
console.log(`not exist:${oc(() => vo.data)}`)
|
||||
}
|
||||
break
|
||||
case "employee":
|
||||
console.log(`${vo.msg}`)
|
||||
break
|
||||
}
|
||||
@ -587,24 +577,18 @@ function getIsvToken() {
|
||||
}
|
||||
|
||||
async function getIsvToken2() {
|
||||
for (let i=0; i<3; i++){
|
||||
var body = await getSignfromDY('isvObfuscator',{"id":"","url":"https://xinruimz-isv.isvjcloud.com"})
|
||||
if(body) break;
|
||||
await $.wait(5000)
|
||||
}
|
||||
let config = {
|
||||
url: 'https://api.m.jd.com/client.action?functionId=isvObfuscator',
|
||||
body: body,
|
||||
body: await getSignfromDY('isvObfuscator',{"id":"","url":"https://xinruimz-isv.isvjcloud.com"}),
|
||||
headers: {
|
||||
'Host': 'api.m.jd.com',
|
||||
'accept': '*/*',
|
||||
'user-agent': UA,
|
||||
//'accept-language': 'zh-Hans-JP;q=1, en-JP;q=0.9, zh-Hant-TW;q=0.8, ja-JP;q=0.7, en-US;q=0.6',
|
||||
//'content-type': 'application/x-www-form-urlencoded',
|
||||
'accept-language': 'zh-Hans-JP;q=1, en-JP;q=0.9, zh-Hant-TW;q=0.8, ja-JP;q=0.7, en-US;q=0.6',
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'Cookie': cookie
|
||||
}
|
||||
}
|
||||
|
||||
return new Promise(resolve => {
|
||||
$.post(config, async (err, resp, data) => {
|
||||
try {
|
||||
@ -627,11 +611,11 @@ async function getIsvToken2() {
|
||||
})
|
||||
}
|
||||
function getSignfromDY(functionId, body) {
|
||||
var strsign = '';
|
||||
let data = `functionId=${functionId}&body=${encodeURIComponent(JSON.stringify(body))}`
|
||||
var strsign = '';
|
||||
let data = `functionId=${functionId}&body=${encodeURIComponent(JSON.stringify(body))}`
|
||||
return new Promise((resolve) => {
|
||||
let opt = {
|
||||
url: "https://sign-hst-rxboogtocm.cn-hangzhou.fcapp.run/dylan/getsign",
|
||||
url: "https://jd.nbplay.xyz/dylan/getsign",
|
||||
body: data,
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
@ -664,10 +648,10 @@ let data = `functionId=${functionId}&body=${encodeURIComponent(JSON.stringify(bo
|
||||
})
|
||||
})
|
||||
}
|
||||
function getToken() {
|
||||
function getAuth() {
|
||||
let config = {
|
||||
url: 'https://xinruimz-isv.isvjcloud.com/api/auth',
|
||||
body: JSON.stringify({"token":$.token2,"source":"01","channel":"meizhuangguandibudaohang"}),
|
||||
body: JSON.stringify({"token":$.token2,"source":"01"}),
|
||||
headers: {
|
||||
'Host': 'xinruimz-isv.isvjcloud.com',
|
||||
'Accept': 'application/x.jd-school-island.v1+json',
|
||||
@ -678,7 +662,7 @@ function getToken() {
|
||||
'user-agent': UA,
|
||||
'Referer': 'https://xinruimz-isv.isvjcloud.com/logined_jd/',
|
||||
'Authorization': 'Bearer undefined',
|
||||
'Cookie': `IsvToken=${$.token2};`
|
||||
'Cookie': `IsvToken=${$.isvToken};`
|
||||
}
|
||||
}
|
||||
return new Promise(resolve => {
|
||||
|
File diff suppressed because one or more lines are too long
15
jd_cash.js
Normal file
15
jd_cash.js
Normal file
File diff suppressed because one or more lines are too long
404
jd_cash_dylan.js
404
jd_cash_dylan.js
File diff suppressed because one or more lines are too long
169
jd_check_cookie.js
Normal file
169
jd_check_cookie.js
Normal file
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -50,7 +50,7 @@ const JD_API_HOST = 'https://api.m.jd.com/client.action';
|
||||
$.isLogin = true;
|
||||
$.nickName = '';
|
||||
message = ''
|
||||
//await TotalBean();
|
||||
////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"});
|
||||
|
File diff suppressed because one or more lines are too long
15
jd_dwapp.js
15
jd_dwapp.js
@ -1,16 +1,13 @@
|
||||
/*
|
||||
积分换话费
|
||||
入口:首页-生活·缴费-积分换话费
|
||||
update:20220530
|
||||
cron 33 7 * * * jd_dwapp.js
|
||||
cron "33 5 * * *" jd_dwapp.js
|
||||
*/
|
||||
|
||||
const $ = new Env('积分换话费');
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
//Node.js用户请在jdCookie.js处填写京东ck;
|
||||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||||
CryptoJS = $.isNode() ? require('crypto-js') : CryptoJS;
|
||||
//IOS等用户直接用NobyDa的jd cookie
|
||||
|
||||
let cookiesArr = [], cookie = '';
|
||||
if ($.isNode()) {
|
||||
Object.keys(jdCookieNode).forEach((item) => { cookiesArr.push(jdCookieNode[item]) })
|
||||
@ -31,7 +28,7 @@ if ($.isNode()) {
|
||||
$.isLogin = true;
|
||||
$.nickName = '';
|
||||
message = '';
|
||||
await TotalBean();
|
||||
//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" });
|
||||
@ -92,7 +89,6 @@ async function taskrecord(id) {
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
async function taskreceive(id) {
|
||||
enc = await sign(id)
|
||||
let body = { "id": id, ...enc }
|
||||
@ -122,7 +118,6 @@ async function taskreceive(id) {
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function usersign() {
|
||||
body = await sign()
|
||||
return new Promise(resolve => {
|
||||
@ -149,7 +144,6 @@ async function usersign() {
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function tasklist() {
|
||||
body = await sign()
|
||||
return new Promise(resolve => {
|
||||
@ -191,7 +185,6 @@ function taskPostUrl(function_id, body) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function TotalBean() {
|
||||
return new Promise(async resolve => {
|
||||
const options = {
|
||||
@ -236,7 +229,6 @@ function TotalBean() {
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
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);
|
||||
@ -248,7 +240,6 @@ function getUUID(format = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', UpperCase
|
||||
return uuid;
|
||||
});
|
||||
}
|
||||
|
||||
async function sign(en) {
|
||||
time = new Date().getTime();
|
||||
let encStr = en || '';
|
||||
|
File diff suppressed because one or more lines are too long
589
jd_joyPark.js
Normal file
589
jd_joyPark.js
Normal file
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
248
jd_joy_withdraw.js
Normal file
248
jd_joy_withdraw.js
Normal file
File diff suppressed because one or more lines are too long
213
jd_jr_draws.js
Normal file
213
jd_jr_draws.js
Normal file
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
22
jd_mhtask.js
22
jd_mhtask.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
312
jd_prices.js
Normal file
312
jd_prices.js
Normal file
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
Normal file
360
jd_superBrand.js
Normal file
File diff suppressed because one or more lines are too long
290
jd_superBrandXZ.js
Normal file
290
jd_superBrandXZ.js
Normal file
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
@ -203,7 +203,7 @@ let args_xh = {
|
||||
$.index = i + 1;
|
||||
$.isLogin = true;
|
||||
$.nickName = '';
|
||||
//await totalBean();
|
||||
//await TotalBean();
|
||||
console.log(`\n开始【京东账号${$.index}】${$.nickName || $.UserName}\n`);
|
||||
$.except = false;
|
||||
if(args_xh.except.includes($.UserName)){
|
||||
|
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
18
jd_unbind.js
18
jd_unbind.js
File diff suppressed because one or more lines are too long
@ -1,799 +0,0 @@
|
||||
/*
|
||||
* @Author: X1a0He
|
||||
* @LastEditors: X1a0He
|
||||
* @Description: 批量取关京东店铺和商品
|
||||
* @Fixed: 不再支持Qx,仅支持Node.js
|
||||
*/
|
||||
const $ = new Env('批量取关店铺和商品');
|
||||
//Node.js用户请在jdCookie.js处填写京东ck;
|
||||
const jdCookieNode = $.isNode() ? require('./jdCookie.js') : '';
|
||||
const notify = $.isNode() ? require('./sendNotify') : '';
|
||||
//IOS等用户直接用NobyDa的jd cookie
|
||||
let cookiesArr = [], cookie = '';
|
||||
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'), ...jsonParse($.getdata('CookiesJD') || "[]").map(item => item.cookie)].filter(item => !!item);
|
||||
}
|
||||
let args_xh = {
|
||||
/*
|
||||
* 跳过某个指定账号,默认为全部账号清空
|
||||
* 填写规则:例如当前Cookie1为pt_key=key; pt_pin=pin1;则环境变量填写pin1即可,此时pin1的购物车将不会被清空
|
||||
* 若有更多,则按照pin1@pin2@pin3进行填写
|
||||
* 环境变量名称:XH_UNSUB_EXCEPT
|
||||
*/
|
||||
except: process.env.XH_UNSUB_EXCEPT && process.env.XH_UNSUB_EXCEPT.split('@') || [],
|
||||
/*
|
||||
* 是否执行取消关注,默认true
|
||||
* 可通过环境变量控制:JD_UNSUB
|
||||
* */
|
||||
isRun: process.env.JD_UNSUB === 'true' || true,
|
||||
/*
|
||||
* 执行完毕是否进行通知,默认false
|
||||
* 可用环境变量控制:JD_UNSUB_NOTIFY
|
||||
* */
|
||||
isNotify: process.env.JD_UNSUB_NOTIFY === 'true' || false,
|
||||
/*
|
||||
* 每次获取已关注的商品数
|
||||
* 可设置环境变量:JD_UNSUB_GPAGESIZE,默认为20,不建议超过20
|
||||
* */
|
||||
goodPageSize: process.env.JD_UNSUB_GPAGESIZE * 1 || 20,
|
||||
/*
|
||||
* 每次获取已关注的店铺数
|
||||
* 可设置环境变量:JD_UNSUB_SPAGESIZE,默认为20,不建议超过20
|
||||
* */
|
||||
shopPageSize: process.env.JD_UNSUB_SPAGESIZE * 1 || 20,
|
||||
/*
|
||||
* 商品类过滤关键词,只要商品名内包含关键词,则不会被取消关注
|
||||
* 可设置环境变量:JD_UNSUB_GKEYWORDS,用@分隔
|
||||
* */
|
||||
goodsKeyWords: process.env.JD_UNSUB_GKEYWORDS && process.env.JD_UNSUB_GKEYWORDS.split('@') || [],
|
||||
/*
|
||||
* 店铺类过滤关键词,只要店铺名内包含关键词,则不会被取消关注
|
||||
* 可设置环境变量:JD_UNSUB_SKEYWORDS,用@分隔
|
||||
* */
|
||||
shopKeyWords: process.env.JD_UNSUB_SKEYWORDS && process.env.JD_UNSUB_SKEYWORDS.split('@') || [],
|
||||
/*
|
||||
* 间隔,防止提示操作频繁,单位毫秒(1秒 = 1000毫秒)
|
||||
* 可用环境变量控制:JD_UNSUB_INTERVAL,默认为3000毫秒
|
||||
* */
|
||||
unSubscribeInterval: process.env.JD_UNSUB_INTERVAL * 1 || 1000,
|
||||
/*
|
||||
* 是否打印日志
|
||||
* 可用环境变量控制:JD_UNSUB_PLOG,默认为true
|
||||
* */
|
||||
printLog: process.env.JD_UNSUB_PLOG === 'true' || true,
|
||||
/*
|
||||
* 失败次数,当取关商品或店铺时,如果连续 x 次失败,则结束本次取关,防止死循环
|
||||
* 可用环境变量控制:JD_UNSUB_FAILTIMES,默认为3次
|
||||
* */
|
||||
failTimes: process.env.JD_UNSUB_FAILTIMES || 3
|
||||
}
|
||||
!(async() => {
|
||||
console.log('X1a0He留:运行前请看好脚本内的注释,日志已经很清楚了,有问题带着日志来问')
|
||||
if(args_xh.isRun){
|
||||
if(!cookiesArr[0]){
|
||||
$.msg('【京东账号一】取关京东店铺商品失败', '【提示】请先获取京东账号一cookie\n直接使用NobyDa的京东签到获取', 'https://bean.m.jd.com/bean/signIndex.action', {
|
||||
"open-url": "https://bean.m.jd.com/bean/signIndex.action"
|
||||
});
|
||||
}
|
||||
await requireConfig();
|
||||
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 = '';
|
||||
//await TotalBean();
|
||||
console.log(`\n****开始【京东账号${$.index}】${$.nickName || $.UserName}*****\n`);
|
||||
if(args_xh.except.includes($.UserName)){
|
||||
console.log(`跳过账号:${$.nickName || $.UserName}`)
|
||||
continue
|
||||
}
|
||||
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
|
||||
}
|
||||
$.shopsKeyWordsNum = 0;
|
||||
$.goodsKeyWordsNum = 0;
|
||||
$.unsubscribeGoodsNum = 0;
|
||||
$.unsubscribeShopsNum = 0;
|
||||
$.goodsTotalNum = 0 //记录当前总共关注了多少商品
|
||||
$.shopsTotalNum = 0; //记录当前总共关注了多少店铺
|
||||
$.commIdList = ``;
|
||||
$.shopIdList = ``;
|
||||
$.endGoods = $.endShops = false;
|
||||
$.failTimes = 0;
|
||||
// console.log(`=====京东账号${$.index} ${$.nickName || $.UserName}内部变量=====`)
|
||||
// console.log(`$.unsubscribeGoodsNum: ${$.unsubscribeGoodsNum}`)
|
||||
// console.log(`$.unsubscribeShopsNum: ${$.unsubscribeShopsNum}`)
|
||||
// console.log(`$.goodsTotalNum: ${$.goodsTotalNum}`)
|
||||
// console.log(`$.shopsTotalNum: ${$.shopsTotalNum}`)
|
||||
// console.log(`$.commIdList: ${$.commIdList}`)
|
||||
// console.log(`$.shopIdList: ${$.shopIdList}`)
|
||||
// console.log(`$.failTimes: ${$.failTimes}`)
|
||||
// console.log(`================`)
|
||||
await favCommQueryFilter(); //获取商品并过滤
|
||||
await $.wait(args_xh.unSubscribeInterval)
|
||||
if(!$.endGoods && parseInt($.goodsTotalNum) !== parseInt($.goodsKeyWordsNum)) await favCommBatchDel();//取关商品
|
||||
else console.log("不执行取消收藏商品\n")
|
||||
await $.wait(args_xh.unSubscribeInterval)
|
||||
await queryShopFavList(); //获取店铺并过滤
|
||||
await $.wait(args_xh.unSubscribeInterval)
|
||||
if(!$.endShops && parseInt($.shopsTotalNum) !== parseInt($.shopsKeyWordsNum)) await batchunfollow(); //取关店铺
|
||||
else console.log("不执行取消收藏店铺\n")
|
||||
do {
|
||||
//如果商品总数和店铺总数都为0则已清空,跳出循环
|
||||
if(parseInt($.goodsTotalNum) === 0 && parseInt($.shopsTotalNum) === 0) break;
|
||||
else {
|
||||
//如果商品总数或店铺总数有一个不为0的话,先判断是哪个不为0
|
||||
if(parseInt($.goodsTotalNum) !== 0){
|
||||
if(parseInt($.goodsTotalNum) === parseInt($.goodsKeyWordsNum)) break;
|
||||
else {
|
||||
$.commIdList = ``
|
||||
await favCommQueryFilter(); //获取商品并过滤
|
||||
await $.wait(args_xh.unSubscribeInterval)
|
||||
if(!$.endGoods && parseInt($.goodsTotalNum) !== parseInt($.goodsKeyWordsNum)) await favCommBatchDel(); //取关商品
|
||||
else console.log("不执行取消收藏商品\n")
|
||||
}
|
||||
} else if(parseInt($.shopsTotalNum) !== 0){
|
||||
if(parseInt($.shopsTotalNum) === parseInt($.shopsKeyWordsNum)) break;
|
||||
else {
|
||||
$.shopIdList = ``
|
||||
await queryShopFavList(); //获取店铺并过滤
|
||||
await $.wait(args_xh.unSubscribeInterval)
|
||||
if(!$.endShops && parseInt($.shopsTotalNum) !== parseInt($.shopsKeyWordsNum)) await batchunfollow(); //取关店铺
|
||||
else console.log("不执行取消收藏店铺\n")
|
||||
}
|
||||
}
|
||||
}
|
||||
if($.failTimes >= args_xh.failTimes){
|
||||
console.log('失败次数到达设定值,触发防死循环机制,该帐号已跳过');
|
||||
break;
|
||||
}
|
||||
} while(true)
|
||||
await showMsg_xh();
|
||||
}
|
||||
}
|
||||
}
|
||||
})().catch((e) => {
|
||||
$.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '')
|
||||
}).finally(() => {
|
||||
$.done();
|
||||
})
|
||||
|
||||
function requireConfig(){
|
||||
return new Promise(resolve => {
|
||||
if($.isNode() && process.env.JD_UNSUB){
|
||||
console.log('=====环境变量配置如下=====')
|
||||
console.log(`except: ${typeof args_xh.except}, ${args_xh.except}`)
|
||||
console.log(`isNotify: ${typeof args_xh.isNotify}, ${args_xh.isNotify}`)
|
||||
console.log(`goodPageSize: ${typeof args_xh.goodPageSize}, ${args_xh.goodPageSize}`)
|
||||
console.log(`shopPageSize: ${typeof args_xh.shopPageSize}, ${args_xh.shopPageSize}`)
|
||||
console.log(`goodsKeyWords: ${typeof args_xh.goodsKeyWords}, ${args_xh.goodsKeyWords}`)
|
||||
console.log(`shopKeyWords: ${typeof args_xh.shopKeyWords}, ${args_xh.shopKeyWords}`)
|
||||
console.log(`unSubscribeInterval: ${typeof args_xh.unSubscribeInterval}, ${args_xh.unSubscribeInterval}`)
|
||||
console.log(`printLog: ${typeof args_xh.printLog}, ${args_xh.printLog}`)
|
||||
console.log(`failTimes: ${typeof args_xh.failTimes}, ${args_xh.failTimes}`)
|
||||
console.log('=======================')
|
||||
}
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
function showMsg_xh(){
|
||||
if(args_xh.isNotify){
|
||||
$.msg($.name, ``, `【京东账号${$.index}】${$.nickName}\n【还剩关注店铺】${$.shopsTotalNum}个\n【还剩关注商品】${$.goodsTotalNum}个`);
|
||||
} else {
|
||||
$.log(`【京东账号${$.index}】${$.nickName}\n【还剩关注店铺】${$.shopsTotalNum}个\n【还剩关注商品】${$.goodsTotalNum}个`);
|
||||
}
|
||||
}
|
||||
|
||||
function getSubstr(str, leftStr, rightStr){
|
||||
let left = str.indexOf(leftStr);
|
||||
let right = str.indexOf(rightStr, left);
|
||||
if(left < 0 || right < left) return '';
|
||||
return str.substring(left + leftStr.length, right);
|
||||
}
|
||||
|
||||
function favCommQueryFilter(){
|
||||
return new Promise((resolve) => {
|
||||
console.log('正在获取已关注的商品...')
|
||||
const option = {
|
||||
url: `https://wq.jd.com/fav/comm/FavCommQueryFilter?cp=1&pageSize=${args_xh.goodPageSize}&category=0&promote=0&cutPrice=0&coupon=0&stock=0&sceneval=2`,
|
||||
headers: {
|
||||
"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"),
|
||||
"Referer": "https://wqs.jd.com/"
|
||||
},
|
||||
}
|
||||
$.get(option, async(err, resp, data) => {
|
||||
try{
|
||||
if(data.indexOf("Authorization") !== -1){
|
||||
console.log("获取数据失败,401 Authorization Required,可能是User-Agent的问题")
|
||||
return;
|
||||
}
|
||||
data = JSON.parse(getSubstr(data, "try{(", ");}catch(e){}"));
|
||||
if(data.iRet === '0'){
|
||||
$.goodsTotalNum = parseInt(data.totalNum);
|
||||
console.log(`当前已关注商品:${$.goodsTotalNum}个`)
|
||||
$.goodsKeyWordsNum = 0;
|
||||
for(let item of data.data){
|
||||
if(args_xh.goodsKeyWords.some(keyword => item.commTitle.includes(keyword))){
|
||||
args_xh.printLog ? console.log(`${item.commTitle} `) : ''
|
||||
args_xh.printLog ? console.log('商品被过滤,含有关键词\n') : ''
|
||||
$.goodsKeyWordsNum += 1;
|
||||
} else {
|
||||
$.commIdList += item.commId + ",";
|
||||
$.unsubscribeGoodsNum++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$.endGoods = true;
|
||||
console.log("无商品可取消收藏\n");
|
||||
}
|
||||
} catch(e){
|
||||
$.logErr(e, resp);
|
||||
} finally{
|
||||
resolve(data);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
function favCommBatchDel(){
|
||||
return new Promise(resolve => {
|
||||
console.log("正在取消收藏商品...")
|
||||
const option = {
|
||||
url: `https://wq.jd.com/fav/comm/FavCommBatchDel?commId=${$.commIdList}&sceneval=2&g_login_type=1`,
|
||||
headers: {
|
||||
"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"),
|
||||
"Referer": "https://wqs.jd.com/"
|
||||
},
|
||||
}
|
||||
$.get(option, (err, resp, data) => {
|
||||
try{
|
||||
if(data.indexOf("Authorization") !== -1){
|
||||
console.log("获取数据失败,401 Authorization Required,可能是User-Agent的问题")
|
||||
return;
|
||||
}
|
||||
data = JSON.parse(data);
|
||||
if(data.iRet === "0" && data.errMsg === "success"){
|
||||
console.log(`成功取消收藏商品:${$.unsubscribeGoodsNum}个\n`)
|
||||
$.failTimes = 0;
|
||||
} else {
|
||||
console.log(`批量取消收藏商品失败,失败次数:${++$.failTimes}\n`, data)
|
||||
}
|
||||
} catch(e){
|
||||
$.logErr(e, resp);
|
||||
} finally{
|
||||
resolve(data);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
function queryShopFavList(){
|
||||
return new Promise((resolve) => {
|
||||
console.log("正在获取已关注的店铺...")
|
||||
const option = {
|
||||
url: `https://wq.jd.com/fav/shop/QueryShopFavList?cp=1&pageSize=${args_xh.shopPageSize}&sceneval=2&g_login_type=1&callback=jsonpCBKA`,
|
||||
headers: {
|
||||
"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"),
|
||||
"Referer": "https://wqs.jd.com/"
|
||||
},
|
||||
}
|
||||
$.get(option, (err, resp, data) => {
|
||||
try{
|
||||
if(data.indexOf("Authorization") !== -1){
|
||||
console.log("获取数据失败,401 Authorization Required,可能是User-Agent的问题")
|
||||
return;
|
||||
}
|
||||
data = JSON.parse(getSubstr(data, "try{jsonpCBKA(", ");}catch(e){}"));
|
||||
if(data.iRet === '0'){
|
||||
$.shopsTotalNum = parseInt(data.totalNum);
|
||||
console.log(`当前已关注店铺:${$.shopsTotalNum}个`)
|
||||
if(data.data.length > 0){
|
||||
$.shopsKeyWordsNum = 0;
|
||||
for(let item of data.data){
|
||||
if(args_xh.shopKeyWords.some(keyword => item.shopName.includes(keyword))){
|
||||
args_xh.printLog ? console.log('店铺被过滤,含有关键词') : ''
|
||||
args_xh.printLog ? console.log(`${item.shopName}\n`) : ''
|
||||
$.shopsKeyWordsNum += 1;
|
||||
} else {
|
||||
$.shopIdList += item.shopId + ",";
|
||||
$.unsubscribeShopsNum++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$.endShops = true;
|
||||
console.log("无店铺可取消关注\n");
|
||||
}
|
||||
} else console.log(`获取已关注店铺失败:${JSON.stringify(data)}`)
|
||||
} catch(e){
|
||||
$.logErr(e, resp);
|
||||
} finally{
|
||||
resolve(data);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
function batchunfollow(){
|
||||
return new Promise(resolve => {
|
||||
console.log('正在执行批量取消关注店铺...')
|
||||
const option = {
|
||||
url: `https://wq.jd.com/fav/shop/batchunfollow?shopId=${$.shopIdList}&sceneval=2&g_login_type=1`,
|
||||
headers: {
|
||||
"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"),
|
||||
"Referer": "https://wqs.jd.com/"
|
||||
},
|
||||
}
|
||||
$.get(option, (err, resp, data) => {
|
||||
try{
|
||||
if(data.indexOf("Authorization") !== -1){
|
||||
console.log("获取数据失败,401 Authorization Required,可能是User-Agent的问题")
|
||||
return;
|
||||
}
|
||||
data = JSON.parse(data);
|
||||
if(data.iRet === "0"){
|
||||
console.log(`已成功取消关注店铺:${$.unsubscribeShopsNum}个\n`)
|
||||
$.failTimes = 0;
|
||||
} else {
|
||||
console.log(`批量取消关注店铺失败,失败次数:${++$.failTimes}\n`)
|
||||
}
|
||||
} catch(e){
|
||||
$.logErr(e, resp);
|
||||
} finally{
|
||||
resolve(data);
|
||||
}
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
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": $.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")
|
||||
}
|
||||
}
|
||||
$.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();
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function jsonParse(str){
|
||||
if(typeof str == "string"){
|
||||
try{
|
||||
return JSON.parse(str);
|
||||
} catch(e){
|
||||
console.log(e);
|
||||
$.msg($.name, '', '请勿随意在BoxJs输入框修改内容\n建议通过脚本去获取cookie')
|
||||
return [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// prettier-ignore
|
||||
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)
|
||||
}
|
369
jd_unsubscribeShop.js
Normal file
369
jd_unsubscribeShop.js
Normal file
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
Loading…
Reference in New Issue
Block a user