加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
jd_dreamFactory.js 10.01 KB
一键复制 编辑 原始数据 按行查看 历史
刘小康 提交于 2020-07-15 12:44 . 修复萌宠浏览指定店铺的bug
/*
京东京喜工厂
未完,待续
*/
const $hammer = (() => {
const isRequest = "undefined" != typeof $request,
isSurge = "undefined" != typeof $httpClient,
isQuanX = "undefined" != typeof $task;
const log = (...n) => { for (let i in n) console.log(n[i]) };
const alert = (title, body = "", subtitle = "", link = "", option) => {
if (isSurge) return $notification.post(title, subtitle, body, link);
if (isQuanX) return $notify(title, subtitle, (link && !body ? link : body), option);
log("==============📣系统通知📣==============");
log("title:", title, "subtitle:", subtitle, "body:", body, "link:", link);
};
const read = key => {
if (isSurge) return $persistentStore.read(key);
if (isQuanX) return $prefs.valueForKey(key);
},
write = (key, val) => {
if (isSurge) return $persistentStore.write(key, val);
if (isQuanX) return $prefs.setValueForKey(key, val);
};
const request = (method, params, callback) => {
/**
*
* params(<object>): {url: <string>, headers: <object>, body: <string>} | <url string>
*
* callback(
* error,
* {status: <int>, headers: <object>, body: <string>} | ""
* )
*
*/
let options = {};
if (typeof params == "string") {
options.url = params;
} else {
options.url = params.url;
if (typeof params == "object") {
params.headers && (options.headers = params.headers);
params.body && (options.body = params.body);
}
}
method = method.toUpperCase();
const writeRequestErrorLog = function (m, u) {
return err => {
log("=== request error -s--");
log(`${m} ${u}`, err);
log("=== request error -e--");
};
}(method, options.url);
if (isSurge) {
const _runner = method == "GET" ? $httpClient.get : $httpClient.post;
return _runner(options, (error, response, body) => {
if (error == null || error == "") {
response.body = body;
callback("", response);
} else {
writeRequestErrorLog(error);
callback(error, "");
}
});
}
if (isQuanX) {
options.method = method;
$task.fetch(options).then(
response => {
response.status = response.statusCode;
delete response.statusCode;
callback("", response);
},
reason => {
writeRequestErrorLog(reason.error);
callback(reason.error, "");
}
);
}
};
const done = (value = {}) => {
if (isQuanX) return isRequest ? $done(value) : null;
if (isSurge) return isRequest ? $done(value) : $done();
};
return { isRequest, isSurge, isQuanX, log, alert, read, write, request, done };
})();
//京东接口地址
const JD_API_HOST = 'https://wq.jd.com';
//直接用NobyDa的jd cookie
// const cookie = $hammer.read('CookieJD');
const cookie = 'unpl=V2_ZzNtbUAHRRx0DxZVch9aBWIBRllLAhMSfQtDUnxLWVdnBhpcclRCFnQUR1JnGFUUZAMZXURcQhJFOEZVehhdDWMEGllyZ0sdGwgLVBUaMgUqTl9tQVdzFEUIQlx%252bGlwAZAAXW0tRRhZ9DU5TfRpsNWcFIl1DVkIUcgBBVnkaVDU8VnxbEgJDESFYRFNyHllQVwIiXHJWc0MbCEdVehteBmYAEhBCU0sQdghDV3gcWgxhBhFVR19EE3Y4R2R4; PPRD_P=CT.138912.3.26-UUID.1594174344038855825195; __jda=122270672.1594174344038855825195.1594174344.1594619829.1594628524.29; __jdb=122270672.4.1594174344038855825195|29.1594628524; __jdc=122270672; __jdv=122270672%7Ckong%7Ct_1000170136%7Ctuiguang%7Cnotset%7C1594569450665; __wga=1594631325352.1594630264664.1594619828892.1594619828892.3.2; _tj_rvurl=https%3A//wq.jd.com/cube/front/activePublish/dream_factory_report/380556.html%3Fptag%3D138912.3.26%26lng%3D113.321134%26lat%3D23.139617%26sid%3D6c732f3e20be25526c2e67df89e488dw%26un_area%3D19_1601_50258_51885; cid=8; mba_muid=1594174344038855825195.33.1594631325409; mba_sid=33.18; retina=1; shshshfp=3f7499d014a4f06d56edfb5378a934ee; shshshfpb=w5O9mqDoHWvVwOS9jAYB%20zg%3D%3D; shshshsID=ed6e17a13e5b4921d09de669e2b06c89_3_1594631325584; wqmnx1=MDEyNjM1M3B3am1ncmZyZHR0My4mMTImMjlzYzNlNjdld2ExMDIxNjg1NnBoOTsuNWE0ZWVjYmRla2lEQS0tLS1ENXV0ZTNVL3NpTzFlaDFkczAzaFA7dTEzcGV5ZG9yZXYxcE1HYWVKZXJDbzs0Ly9hOTBjZmEyMTswZzAwdGFvfDUwMTY7O2RlO0o1Mi5JMztsLlA7IG4gX2tjWHBiNi5LLGVrby80cEpLMWY3bjI0MllPT1UhSCU%3D; wxa_level=1; pt_key=app_openAAJfBSQbAEBjl86WMnH-4g3Is6PISRQsx5CU-pQolK0klfaTVHmW5nfZL7DkOGhtRWp6ttQKfdDSiHZ1el6DX2SEjWkotlT2; pt_pin=%E8%A2%AB%E6%8A%98%E5%8F%A0%E7%9A%84%E8%AE%B0%E5%BF%8633; pwdt_id=%E8%A2%AB%E6%8A%98%E5%8F%A0%E7%9A%84%E8%AE%B0%E5%BF%8633; sid=6c732f3e20be25526c2e67df89e488dw; wq_area=19_1601_3633%7C3; visitkey=270851475495567; jxsid=15946198288819114076; sc_width=414; webp=0; shshshfpa=b134218e-f14e-6005-fa8e-52d2bc02126f-1594364440';
let shareCodes = [
'V5LkjP4WRyjeCKR9VRwcRX0bBuTz7MEK0-E99EJ7u0k=',
];
let factoryId, productionId, userTaskStatusList, dailyTask = [], produceTask = [];
const name = '京喜工厂';
let message = '';
let subTitle = '';
const Task = step()
Task.next();
function* step() {
const startTime = Date.now();
yield userInfo();
yield collectElectricity();
yield investElectric();
yield taskList();
//yield produceTaskFun();//生产任务
const end = ((Date.now() - startTime) / 1000).toFixed(2);
console.log(`\n完成${name}脚本耗时: ${end} 秒\n`);
$hammer.alert(name, message, subTitle);
}
function produceTaskFun() {
for (let item of produceTask) {
if (item.awardStatus !== 1) {
if (item.completedTimes >= item.targetTimes) {
const url = `/newtasksys/newtasksys_front/Award?source=dreamfactory&bizCode=dream_factory&taskId=${item.taskId}&sceneval=2&g_login_type=1`;
request(url).then((res) => {
console.log(`每日任务完成结果${JSON.stringify(res)}}`);
try {
if (res.ret === 0) {
console.log(`${item.taskName}任务完成`)
}
} catch (e) {
console.log(`${item.taskName}任务异常`)
}
})
}
}
}
Task.next();
}
// 收取发电机的电力
function collectElectricity() {
const url = `/dreamfactory/generator/CollectCurrentElectricity?zone=dream_factory&apptoken=&pgtimestamp=&phoneID=&factoryid=${factoryId}&doubleflag=1&sceneval=2`;
request(url).then((res) => {
try {
if (res.ret === 0) {
console.log(`成功从发电机收取${res.data.CollectElectricity}电力`);
}
Task.next();
} catch (e) {
console.log('收集电力异常')
}
})
}
// 投入电力
function investElectric() {
const url = `/dreamfactory/userinfo/InvestElectric?zone=dream_factory&productionId=${productionId}&sceneval=2&g_login_type=1`;
request(url).then((res) => {
try {
if (res.ret === 0) {
console.log(`成功投入电力${res.data.investElectric}电力`);
message += `【投入电力】${res.data.investElectric}`;
} else {
console.log(`投入失败,${res.message}`);
}
Task.next();
} catch (e) {
console.log('收集电力异常')
}
})
}
// 初始化任务
function taskList() {
const url = `/newtasksys/newtasksys_front/GetUserTaskStatusList?source=dreamfactory&bizCode=dream_factory&sceneval=2&g_login_type=1`;
request(url).then((res) => {
try {
//console.log(`${JSON.stringify(res)}`)
//console.log(res)
if (res.ret === 0) {
userTaskStatusList = res.data.userTaskStatusList;
for (let item of res.data.userTaskStatusList) {
if (item.dateType === 2) {
dailyTask.push(item);
}
if (item.dateType === 1) {
produceTask.push(item);
}
}
Task.next();
}
} catch (e) {
console.log('初始化任务异常')
}
}).catch((error) => {
console.log(error)
})
}
//初始化个人信息
function userInfo() {
const url = `/dreamfactory/userinfo/GetUserInfo?zone=dream_factory&pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=&sceneval=2`;
request(url).then((response) => {
try {
// taskInfo = res.data.result.taskInfos;
if (response.ret === 0) {
const { data } = response;
// !data.productionList && !data.factoryList
if (data.factoryList && data.productionList) {
const production = data.productionList[0];
const factory = data.factoryList[0];
factoryId = factory.factoryId;//工厂ID
productionId = production.productionId;//商品ID
subTitle = data.user.pin;
console.log(`\n我的分享码\n${data.user.encryptPin}\n`);
// console.log(`进度:${(production.investedElectric/production.needElectric).toFixed(2) * 100}%\n`);
message += `【生产进度】${((production.investedElectric / production.needElectric) * 100).toFixed(2)}%\n`;
Task.next();
} else {
return $hammer.alert(name, '\n【提示】此账号京喜工厂活动未开始\n请手动去京东APP->游戏与互动->查看更多->京喜工厂 开启活动\n');
}
} else {
Task.return();
}
} catch (e) {
console.log(e);
console.log('初始化任务异常');
}
})
}
//等待一下
function sleep(s) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve();
}, s * 1000);
})
}
async function request(url, body = {}) {
await sleep(2); //歇口气儿, 不然会报操作频繁
return new Promise((resolve, reject) => {
$hammer.request('GET', taskurl(url, body), (error, response) => {
if(error){
$hammer.log("Error:", error);
}else{
//console.log(response.body)
resolve(JSON.parse(response.body));
}
})
})
}
function taskurl(url, body) {
return {
url: `${JD_API_HOST}${url}`,
headers: {
'Cookie' : cookie,
'Host': 'wq.jd.com',
'Accept': '*/*',
'Connection': 'keep-alive',
'User-Agent': 'jdapp;iPhone;9.0.4;13.5.1;;Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148;supportJDSHWK/1',
'Accept-Language': 'zh-cn',
'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html',
'Accept-Encoding': 'gzip, deflate, br',
}
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化