yydspure/jd_work_price.js

164 lines
6.5 KiB
JavaScript

let common = require("./function/common");
let jsdom = require("jsdom");
let $ = new common.env('京东保价');
let min = 1,
help = $.config[$.filename(__filename)] || Math.min(min, $.config.JdMain) || min;
$.setOptions({
headers: {
'content-type': 'application/json',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0',
'referer': 'https://msitepp-fm.jd.com/rest/priceprophone/priceProPhoneMenu?sid=0b5a9d5564059f36ed16a8967c37e24w',
}
});
$.readme = `
48 */8 * * * task ${$.runfile}
export ${$.runfile}=1 #输出购买订单保价内容,没什么用
`
eval(common.eval.mainEval($));
async function prepare() {}
async function main(id) {
try {
await jstoken()
// 一键保价
p = {
'url': `https://api.m.jd.com/api?appid=siteppM&functionId=siteppM_skuOnceApply&forcebot=&t=${$.timestamp}`,
"form": {
"body": JSON.stringify({
sid: '',
type: 3,
forcebot: '',
token: $.token,
feSt: 's'
})
}
};
h = await $.curl(p)
console.log(h)
console.log("等待20s获取保价信息")
await $.wait(20000)
// 获取保价信息
let p2 = {
'url': `https://api.m.jd.com/api?appid=siteppM&functionId=siteppM_appliedSuccAmount&forcebot=&t=${$.timestamp}`,
// 'form': {
// 'body': `"{\"sid\":\"\",\"type\":\"3\",\"forcebot\":\"\"}"`
// }
'form': 'body={"sid":"","type":"3","forcebot":"","num":15}'
}
await $.curl(p2)
if ($.source.flag) {
text = `本次保价金额: ${$.source.succAmount}`
} else {
text = "本次无保价订单"
}
console.log(text)
$.notice(text)
if ($.config[$.runfile]) {
// 单个商品检测,没什么用处
console.log("\n手动保价前25个订单")
html = ''
for (let i = 1; i < 6; i++) {
await jstoken()
p3 = {
'url': `https://api.m.jd.com/api?appid=siteppM&functionId=siteppM_priceskusPull&forcebot=&t=${$.timestamp}`,
'form': {
'body': JSON.stringify({
"page": i,
"pageSize": 5,
"keyWords": "",
"sid": "",
"type": "3",
"forcebot": "",
"token": $.token,
"feSt": "s"
})
}
}
html += await $.curl(p3)
}
amount = $.matchall(/class="name"\>\s*([^\<]+).*?orderId="(\d+)"\s*skuId="(\d+)"/g, html.replace(/\n/g, ''))
for (let i of amount) {
// 获取有无申请按钮
p4 = {
'url': `https://api.m.jd.com/api?appid=siteppM&functionId=siteppM_skuProResultPin&forcebot=&t=${$.timestamp}`,
'form': {
'body': JSON.stringify({
"orderId": i[1],
"skuId": i[2],
"sequence": "1",
"sid": "",
"type": "3",
"forcebot": ""
})
}
}
h = await $.curl(p4)
if (h.includes("hidden")) {
console.log(`商品: ${i[0]} 不支持保价或无降价`)
} else {
await jstoken()
// 申请请求
p5 = {
'url': `https://api.m.jd.com/api?appid=siteppM&functionId=siteppM_proApply&forcebot=&t=${$.timestamp}`,
'form': {
'body': JSON.stringify({
"orderId": i[1],
"orderCategory": "Others",
"skuId": i[2],
"sid": "",
"type": "3",
"refundtype": "1",
"forcebot": "",
"token": $.token,
"feSt": "s"
})
}
}
await $.curl(p5)
if ($.source.proSkuApplyId) {
// 申请结果
p6 = {
'url': `https://api.m.jd.com/api?appid=siteppM&functionId=siteppM_moreApplyResult&forcebot=&t=${$.timestamp}`,
'form': `body={"proSkuApplyIds":"${$.source.proSkuApplyId[0]}","type":"3"}`
}
await $.curl(p6)
console.log(`商品: ${i[0]} `, $.haskey($.source, 'applyResults.0.applyResultVo.failTypeStr'))
} else {
console.log(`商品: ${i[0]} ${$.source.errorMessage}`)
}
}
}
}
} catch (e) {}
}
async function jstoken() {
let {
JSDOM
} = jsdom;
let resourceLoader = new jsdom.ResourceLoader({
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0',
referrer: "https://msitepp-fm.jd.com/rest/priceprophone/priceProPhoneMenu?sid=0b5a9d5564059f36ed16a8967c37e24w",
});
let virtualConsole = new jsdom.VirtualConsole();
var options = {
referrer: "https://msitepp-fm.jd.com/rest/priceprophone/priceProPhoneMenu?sid=0b5a9d5564059f36ed16a8967c37e24w",
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Firefox/91.0',
runScripts: "dangerously",
resources: resourceLoader,
// cookieJar,
includeNodeLocations: true,
storageQuota: 10000000,
pretendToBeVisual: true,
virtualConsole
};
$.dom = new JSDOM(`<body><script src="https://js-nocaptcha.jd.com/statics/js/main.min.js"></script></body>`, options);
await $.wait(1000)
try {
feSt = 's'
jab = new $.dom.window.JAB({
bizId: 'jdjiabao',
initCaptcha: false
})
$.token = jab.getToken()
} catch (e) {}
}