forked from shufflewzc/faker3
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Faker
authored and
Faker
committed
Aug 10, 2022
1 parent
956de76
commit 6fd5e65
Showing
4 changed files
with
650 additions
and
881 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,282 @@ | ||
/* | ||
*/ | ||
let jdSignUrl = '' // 算法url | ||
let Authorization = '' // 算法url token 有则填 | ||
let got = ''; | ||
try{ | ||
got = require('got'); | ||
}catch(e){ | ||
console.log('请添加依赖模块"got"') | ||
} | ||
|
||
|
||
jdSignUrl = process.env.gua_cleancart_SignUrl ? process.env.gua_cleancart_SignUrl : `${jdSignUrl}` | ||
Authorization = process.env.gua_cleancart_Authorization ? process.env.gua_cleancart_Authorization : `${Authorization}` | ||
if(Authorization && Authorization.indexOf("Bearer ") === -1) Authorization = `Bearer ${Authorization}` | ||
let cookie = '' | ||
let out = false | ||
|
||
async function clean(ck,url,goodsArr){ | ||
if(!got) return false | ||
return new Promise(async resolve => { | ||
let msg = false | ||
try{ | ||
if(!ck) return '' | ||
if(!jdSignUrl) jdSignUrl = url | ||
cookie = ck | ||
// if(jdSignUrl.indexOf("://jd.smiek.tk/") > -1) { | ||
// resolve(msg) | ||
// return false | ||
// } | ||
let signBody = `{"homeWishListUserFlag":"1","userType":"0","updateTag":true,"showPlusEntry":"2","hitNewUIStatus":"1","cvhv":"049591","cartuuid":"hjudwgohxzVu96krv/T6Hg==","adid":""}` | ||
let body = await jdSign('cartClearQuery', signBody) | ||
if(out) return | ||
if(!body){ | ||
console.log('获取不到算法') | ||
return | ||
} | ||
let data = await jdApi('cartClearQuery',body) | ||
let res = jsonParse(data) | ||
if(typeof res == 'object' && res){ | ||
if(res.resultCode == 0){ | ||
if(res.mainTitle.indexOf('购物车是空的') > -1){ | ||
msg = [] | ||
}else if(!res.clearCartInfo || !res.subTitle){ | ||
console.log(res.mainTitle) | ||
}else{ | ||
let num = 0 | ||
if(res.subTitle){ | ||
num = res.subTitle.match(/共(\d+)件商品/).length > 0 && res.subTitle.match(/共(\d+)件商品/)[1] || 0 | ||
console.log(res.subTitle) | ||
} | ||
// console.log(`共${num}件商品`) | ||
if(num != 0){ | ||
let operations = [] | ||
let operNum = 0 | ||
let goodsArrs = [] | ||
let goodsArrsFlag = false | ||
for(let a of res.clearCartInfo || {}){ | ||
// console.log(a.groupName) | ||
// if(a.groupName.indexOf('7天内加入购物车') > -1){ | ||
if(typeof goodsArr !== 'object'){ | ||
goodsArrs = [...goodsArrs,...a.groupDetails] | ||
goodsArrsFlag = true | ||
}else{ | ||
for(let s of a.groupDetails || []){ | ||
if(typeof goodsArr === 'object'){ | ||
let XBDetail = goodsArr.filter((x) => x.skuId === s.skuId) | ||
if(XBDetail.length == 0){ | ||
// console.log(s.unusable,s.skuUuid,s.name) | ||
operNum += s.clearSkus && s.clearSkus.length || 1; | ||
operations.push({ | ||
"itemType": s.itemType+"", | ||
"suitType": s.suitType, | ||
"skuUuid": s.skuUuid+"", | ||
"itemId": s.itemId || s.skuId, | ||
"useUuid": typeof s.useUuid !== 'undefined' && s.useUuid || false | ||
}) | ||
} | ||
} | ||
} | ||
} | ||
// } | ||
} | ||
if(goodsArrsFlag){ | ||
msg = goodsArrs || [] | ||
return | ||
} | ||
console.log(`准备清空${operNum}件商品`) | ||
if(operations.length == 0){ | ||
console.log(`清空${operNum}件商品|没有找到要清空的商品`) | ||
}else{ | ||
let clearBody = `{"homeWishListUserFlag":"1","userType":"0","updateTag":false,"showPlusEntry":"2","hitNewUIStatus":"1","cvhv":"049591","cartuuid":"hjudwgohxzVu96krv/T6Hg==","operations":${jsonStringify(operations)},"adid":"","coord_type":"0"}` | ||
clearBody = await jdSign('cartClearRemove', clearBody) | ||
if(out) return | ||
if(!clearBody){ | ||
console.log('获取不到算法') | ||
}else{ | ||
let clearData = await jdApi('cartClearRemove',clearBody) | ||
let clearRes = jsonParse(clearData) | ||
if(typeof clearRes == 'object'){ | ||
if(clearRes.resultCode == 0) { | ||
console.log(`清空${operNum}件商品|✅\n`) | ||
}else if(clearRes.mainTitle){ | ||
console.log(`清空${operNum}件商品|${clearRes.mainTitle}\n`) | ||
}else{ | ||
console.log(`清空${operNum}件商品|❌\n`) | ||
console.log(clearData) | ||
} | ||
}else{ | ||
console.log(`清空${operNum}件商品|❌\n`) | ||
console.log(clearData) | ||
} | ||
} | ||
} | ||
}else if(res.mainTitle){ | ||
if(res.mainTitle.indexOf('购物车是空的') > -1){ | ||
msg = [] | ||
} | ||
console.log(res.mainTitle) | ||
}else{ | ||
console.log(data) | ||
} | ||
} | ||
}else{ | ||
console.log(data) | ||
} | ||
}else{ | ||
console.log(data) | ||
} | ||
}catch(e){ | ||
console.log(e) | ||
} finally { | ||
resolve(msg); | ||
} | ||
}) | ||
} | ||
|
||
function jdApi(functionId,body) { | ||
if(!functionId || !body) return | ||
return new Promise(resolve => { | ||
let opts = taskPostUrl(`/client.action?functionId=${functionId}`, body) | ||
got.post(opts).then( | ||
(resp) => { | ||
const {body:data } = resp | ||
try { | ||
let res = jsonParse(data); | ||
if(typeof res == 'object'){ | ||
if(res.mainTitle) console.log(res.mainTitle) | ||
if(res.resultCode == 0){ | ||
resolve(res); | ||
}else if (res.tips && res.tips.includes("正在努力加载")){ | ||
console.log("请求太快,ip被限制了") | ||
out = true | ||
} | ||
} | ||
} catch (e) { | ||
console.log(e) | ||
} finally { | ||
resolve(''); | ||
} | ||
}, | ||
(err) => { | ||
try { | ||
const { message: error, response: resp } = err | ||
console.log(`${jsonStringify(error)}`) | ||
console.log(`${functionId} API请求失败,请检查网路重试`) | ||
} catch (e) { | ||
console.log(e) | ||
} finally { | ||
resolve('') | ||
} | ||
} | ||
) | ||
}) | ||
} | ||
|
||
function jdSign(fn,body) { | ||
let sign = '' | ||
let flag = false | ||
try{ | ||
const fs = require('fs'); | ||
if (fs.existsSync('./gua_encryption_sign.js')) { | ||
const encryptionSign = require('./gua_encryption_sign'); | ||
sign = encryptionSign.getSign(fn, body) | ||
}else{ | ||
flag = true | ||
} | ||
sign = sign.data && sign.data.sign && sign.data.sign || '' | ||
}catch(e){ | ||
flag = true | ||
} | ||
if(!flag) return sign | ||
if(!jdSignUrl.match(/^https?:\/\//)){ | ||
console.log('请填写算法url') | ||
out = true | ||
return '' | ||
} | ||
return new Promise((resolve) => { | ||
let options = { | ||
url: jdSignUrl, | ||
body:`{"fn":"${fn}","body":${body}}`, | ||
headers: { | ||
'Accept':'*/*', | ||
"accept-encoding": "gzip, deflate, br", | ||
'Content-Type': 'application/json', | ||
}, | ||
timeout:30000 | ||
} | ||
if(Authorization) options["headers"]["Authorization"] = Authorization | ||
got.post(options).then( | ||
(resp) => { | ||
const {body:data } = resp | ||
try { | ||
let res = jsonParse(data) | ||
if(typeof res === 'object' && res){ | ||
if(res.code && res.code == 200 && res.data){ | ||
if(res.data.sign) sign = res.data.sign || '' | ||
if(sign != '') resolve(sign) | ||
}else{ | ||
console.log(data) | ||
} | ||
}else{ | ||
console.log(data) | ||
} | ||
} catch (e) { | ||
console.log(e) | ||
} finally { | ||
resolve('') | ||
} | ||
}, | ||
(err) => { | ||
try { | ||
const { message: error, response: resp } = err | ||
console.log(`${jsonStringify(error)}`) | ||
console.log(`算法url API请求失败,请检查网路重试`) | ||
} catch (e) { | ||
console.log(e) | ||
} finally { | ||
resolve('') | ||
} | ||
} | ||
|
||
) | ||
}) | ||
} | ||
|
||
function jsonParse(str) { | ||
try { | ||
return JSON.parse(str); | ||
} catch (e) { | ||
return str; | ||
} | ||
} | ||
|
||
function jsonStringify(arr) { | ||
try { | ||
return JSON.stringify(arr); | ||
} catch (e) { | ||
return arr; | ||
} | ||
} | ||
|
||
function taskPostUrl(url, body) { | ||
return { | ||
url: `https://api.m.jd.com${url}`, | ||
body: body, | ||
headers: { | ||
"Accept": "*/*", | ||
"Accept-Language": "zh-cn", | ||
"Accept-Encoding": "gzip, deflate, br", | ||
"Connection": "keep-alive", | ||
"Content-Type": "application/x-www-form-urlencoded", | ||
'Cookie': `${cookie}`, | ||
"User-Agent": "JD4iPhone/167853 (iPhone; iOS; Scale/2.00)" , | ||
} | ||
} | ||
} | ||
|
||
module.exports = { | ||
clean | ||
} |
Oops, something went wrong.