faker3/cleancart_activity.js
2024-11-12 11:17:55 +08:00

282 lines
8.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*/
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
}