mirror of
https://github.com/Giu-zhao/ios_rule_script
synced 2024-11-26 02:18:26 +08:00
[AppleStore]增加MacbookPro库存监控
This commit is contained in:
parent
c0bfb34c43
commit
9aaaebd0fd
@ -15,12 +15,18 @@ function getGoodsStock(parts, location, option = "") {
|
|||||||
url = encodeURI(`https://www.apple.com.cn/shop/fulfillment-messages?pl=true&mt=compact&parts.0=${parts}&location=${location}&_=${new Date().getTime()}`);
|
url = encodeURI(`https://www.apple.com.cn/shop/fulfillment-messages?pl=true&mt=compact&parts.0=${parts}&location=${location}&_=${new Date().getTime()}`);
|
||||||
}
|
}
|
||||||
magicJS.get(url, (err, resp, data) => {
|
magicJS.get(url, (err, resp, data) => {
|
||||||
let obj = JSON.parse(data);
|
try{
|
||||||
let stores = obj["body"]["content"]["pickupMessage"]["stores"];
|
let obj = JSON.parse(data);
|
||||||
if (stores) {
|
let stores = obj["body"]["content"]["pickupMessage"]["stores"];
|
||||||
resolve(stores);
|
if (stores) {
|
||||||
} else {
|
resolve(stores);
|
||||||
magicJS.notify("查询库存失败,请检查配置是否正确。");
|
} else {
|
||||||
|
magicJS.notify("查询库存失败,请检查配置是否正确。");
|
||||||
|
resolve([]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (err){
|
||||||
|
magicJS.logError(`解析库存数据失败,异常信息:${err}`);
|
||||||
resolve([]);
|
resolve([]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -31,96 +37,101 @@ async function watchStock(goods_models, applestore_region) {
|
|||||||
let stock = magicJS.read(APPLESTORE_STOCK_KEY);
|
let stock = magicJS.read(APPLESTORE_STOCK_KEY);
|
||||||
stock = !!stock ? stock : {};
|
stock = !!stock ? stock : {};
|
||||||
let len = goods_models.length;
|
let len = goods_models.length;
|
||||||
|
let tasks = [];
|
||||||
|
|
||||||
for (let i = 0; i < len; i++) {
|
for (let i = 0; i < len; i++) {
|
||||||
let partsConfig = goods_models[i].split("#");
|
const wrap = async () =>{
|
||||||
let parts = partsConfig[0];
|
let partsConfig = goods_models[i].split("#");
|
||||||
let option = partsConfig.length >= 2 ? partsConfig[1] : "";
|
let parts = partsConfig[0];
|
||||||
let name = partsConfig.length == 3 ? partsConfig[2] : "";
|
let option = partsConfig.length >= 2 ? partsConfig[1] : "";
|
||||||
let subObj = { watch: 0, pickup: 0, soldout: 0, changed: 0 };
|
let name = partsConfig.length == 3 ? partsConfig[2] : "";
|
||||||
let availability = await getGoodsStock(parts, applestore_region, option);
|
let subObj = { watch: 0, pickup: 0, soldout: 0, changed: 0 };
|
||||||
|
let availability = await getGoodsStock(parts, applestore_region, option);
|
||||||
|
|
||||||
if (availability && availability.length > 0) {
|
if (availability && availability.length > 0) {
|
||||||
// 获取AppleStore取货信息
|
// 获取AppleStore取货信息
|
||||||
for (let store of availability) {
|
for (let store of availability) {
|
||||||
let storeNumber = store["storeNumber"];
|
let storeNumber = store["storeNumber"];
|
||||||
if (!stock.hasOwnProperty(parts)) {
|
if (!stock.hasOwnProperty(parts)) {
|
||||||
stock[parts] = { title: store["partsAvailability"][parts]["storePickupProductTitle"], stores: {} };
|
stock[parts] = { title: store["partsAvailability"][parts]["storePickupProductTitle"], stores: {} };
|
||||||
}
|
}
|
||||||
if (!stock[parts]["stores"][storeNumber]) {
|
if (!stock[parts]["stores"][storeNumber]) {
|
||||||
stock[parts]["stores"][storeNumber] = { notify: false, pickup: false, msg: "等待查询", city: store["city"], name: store["storeName"] };
|
stock[parts]["stores"][storeNumber] = { notify: false, pickup: false, msg: "等待查询", city: store["city"], name: store["storeName"] };
|
||||||
}
|
}
|
||||||
if (stock[parts]["stores"][storeNumber]["msg"] != store["partsAvailability"][parts]["pickupSearchQuote"]) {
|
if (stock[parts]["stores"][storeNumber]["msg"] != store["partsAvailability"][parts]["pickupSearchQuote"]) {
|
||||||
// 更新库存情况
|
// 更新库存情况
|
||||||
stock[parts]["stores"][storeNumber]["msg"] = store["partsAvailability"][parts]["pickupSearchQuote"];
|
stock[parts]["stores"][storeNumber]["msg"] = store["partsAvailability"][parts]["pickupSearchQuote"];
|
||||||
stock[parts]["stores"][storeNumber]["pickup"] = store["partsAvailability"][parts]["pickupDisplay"] != "unavailable";
|
stock[parts]["stores"][storeNumber]["pickup"] = store["partsAvailability"][parts]["pickupDisplay"] != "unavailable";
|
||||||
// 库存变化推送通知
|
// 库存变化推送通知
|
||||||
stock[parts]["stores"][storeNumber]["notify"] = true;
|
stock[parts]["stores"][storeNumber]["notify"] = true;
|
||||||
} else {
|
} else {
|
||||||
// 库存未变化不推送
|
// 库存未变化不推送
|
||||||
stock[parts]["stores"][storeNumber]["notify"] = false;
|
stock[parts]["stores"][storeNumber]["notify"] = false;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let now = new Date();
|
|
||||||
if (!stock[parts]["title"] && !name) {
|
|
||||||
name = "未命名商品";
|
|
||||||
}
|
|
||||||
let logStr = `${name}\n`;
|
|
||||||
let title = `${name} - ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`;
|
|
||||||
let watchResult = "全部售罄";
|
|
||||||
let stockInContent = ""; // 有库存的型号与店铺
|
|
||||||
let soldOutContent = ""; // 售罄的型号与店铺
|
|
||||||
let unchangContent = ""; // 没有变化的型号与店铺
|
|
||||||
let content = "";
|
|
||||||
|
|
||||||
// 整理通知内容
|
|
||||||
for (let storeStock of Object.values(stock[parts]["stores"])) {
|
|
||||||
subObj["watch"] += 1;
|
|
||||||
// 有货
|
|
||||||
if (storeStock["pickup"]) {
|
|
||||||
subObj["pickup"] += 1;
|
|
||||||
if (watchResult == "全部售罄") watchResult = `${storeStock["city"]} ${storeStock["name"]}`;
|
|
||||||
if (storeStock["notify"] === true) {
|
|
||||||
subObj["changed"] += 1;
|
|
||||||
if (!!stockInContent) stockInContent += "\n";
|
|
||||||
stockInContent += `🔆 ${storeStock["name"]} - ${storeStock["msg"]}↑`;
|
|
||||||
} else {
|
|
||||||
if (!!unchangContent) unchangContent += "\n";
|
|
||||||
unchangContent += `🔆 ${storeStock["name"]} - ${storeStock["msg"]}● `;
|
|
||||||
}
|
}
|
||||||
logStr += `${storeStock["name"]} - ${storeStock["msg"]}\n`;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 售罄
|
let now = new Date();
|
||||||
else {
|
if (!stock[parts]["title"] && !name) {
|
||||||
subObj["soldout"] += 1;
|
name = "未命名商品";
|
||||||
if (storeStock["notify"] === true) {
|
|
||||||
subObj["changed"] += 1;
|
|
||||||
if (!!soldOutContent) soldOutContent += "\n";
|
|
||||||
soldOutContent += `🚫 ${storeStock["name"]} - ${storeStock["msg"]}↓`;
|
|
||||||
} else {
|
|
||||||
if (!!unchangContent) unchangContent += "\n";
|
|
||||||
unchangContent += `🚫 ${storeStock["name"]} - ${storeStock["msg"]}○`;
|
|
||||||
}
|
|
||||||
logStr += `${storeStock["name"]} - ${storeStock["msg"]}\n`;
|
|
||||||
}
|
}
|
||||||
|
let logStr = `${name}\n`;
|
||||||
|
let title = `${name} - ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`;
|
||||||
|
let watchResult = "全部售罄";
|
||||||
|
let stockInContent = ""; // 有库存的型号与店铺
|
||||||
|
let soldOutContent = ""; // 售罄的型号与店铺
|
||||||
|
let unchangContent = ""; // 没有变化的型号与店铺
|
||||||
|
let content = "";
|
||||||
|
|
||||||
|
// 整理通知内容
|
||||||
|
for (let storeStock of Object.values(stock[parts]["stores"])) {
|
||||||
|
subObj["watch"] += 1;
|
||||||
|
// 有货
|
||||||
|
if (storeStock["pickup"]) {
|
||||||
|
subObj["pickup"] += 1;
|
||||||
|
if (watchResult == "全部售罄") watchResult = `${storeStock["city"]} ${storeStock["name"]}`;
|
||||||
|
if (storeStock["notify"] === true) {
|
||||||
|
subObj["changed"] += 1;
|
||||||
|
if (!!stockInContent) stockInContent += "\n";
|
||||||
|
stockInContent += `🔆 ${storeStock["name"]} - ${storeStock["msg"]}↑`;
|
||||||
|
} else {
|
||||||
|
if (!!unchangContent) unchangContent += "\n";
|
||||||
|
unchangContent += `🔆 ${storeStock["name"]} - ${storeStock["msg"]}● `;
|
||||||
|
}
|
||||||
|
logStr += `${storeStock["name"]} - ${storeStock["msg"]}\n`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 售罄
|
||||||
|
else {
|
||||||
|
subObj["soldout"] += 1;
|
||||||
|
if (storeStock["notify"] === true) {
|
||||||
|
subObj["changed"] += 1;
|
||||||
|
if (!!soldOutContent) soldOutContent += "\n";
|
||||||
|
soldOutContent += `🚫 ${storeStock["name"]} - ${storeStock["msg"]}↓`;
|
||||||
|
} else {
|
||||||
|
if (!!unchangContent) unchangContent += "\n";
|
||||||
|
unchangContent += `🚫 ${storeStock["name"]} - ${storeStock["msg"]}○`;
|
||||||
|
}
|
||||||
|
logStr += `${storeStock["name"]} - ${storeStock["msg"]}\n`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!!stockInContent) {
|
||||||
|
content = stockInContent;
|
||||||
|
}
|
||||||
|
// 配置为无货通知且存在无货情况时
|
||||||
|
if (magicJS.read("applestore_settings_notify_soldout") == true) {
|
||||||
|
content = !!stockInContent ? stockInContent + `\n${soldOutContent}\n${unchangContent}` : !!soldOutContent ? `${soldOutContent}\n${unchangContent}` : unchangContent;
|
||||||
|
}
|
||||||
|
if (!!content) {
|
||||||
|
let subTitle = `监控: ${subObj.watch} 售罄: ${subObj.soldout} 有货: ${subObj.pickup} ${watchResult}`;
|
||||||
|
magicJS.notify(title, subTitle, content, "applestore://");
|
||||||
|
}
|
||||||
|
magicJS.logInfo(logStr);
|
||||||
}
|
}
|
||||||
if (!!stockInContent) {
|
|
||||||
content = stockInContent;
|
|
||||||
}
|
|
||||||
// 配置为无货通知且存在无货情况时
|
|
||||||
if (magicJS.read("applestore_settings_notify_soldout") == true) {
|
|
||||||
content = !!stockInContent ? stockInContent + `\n${soldOutContent}\n${unchangContent}` : !!soldOutContent ? `${soldOutContent}\n${unchangContent}` : unchangContent;
|
|
||||||
}
|
|
||||||
if (!!content) {
|
|
||||||
let subTitle = `监控: ${subObj.watch} 售罄: ${subObj.soldout} 有货: ${subObj.pickup} ${watchResult}`;
|
|
||||||
magicJS.notify(title, subTitle, content, "applestore://");
|
|
||||||
}
|
|
||||||
magicJS.logInfo(logStr);
|
|
||||||
}
|
}
|
||||||
|
tasks.push(wrap());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await Promise.all(tasks);
|
||||||
// 存储本次库存检查结果
|
// 存储本次库存检查结果
|
||||||
magicJS.write(APPLESTORE_STOCK_KEY, stock);
|
magicJS.write(APPLESTORE_STOCK_KEY, stock);
|
||||||
}
|
}
|
||||||
@ -141,11 +152,12 @@ async function watchStock(goods_models, applestore_region) {
|
|||||||
// 监控库存
|
// 监控库存
|
||||||
await watchStock(goods_models, applestore_region);
|
await watchStock(goods_models, applestore_region);
|
||||||
|
|
||||||
if (magicJS.isNode) {
|
while (magicJS.isNode) {
|
||||||
while (6 <= new Date().getHours() <= 23) {
|
let hours = new Date().getHours()
|
||||||
|
if (hours <= 1 || hours >= 6){
|
||||||
await watchStock(goods_models, applestore_region);
|
await watchStock(goods_models, applestore_region);
|
||||||
await magicJS.sleep(3000);
|
|
||||||
}
|
}
|
||||||
|
await magicJS.sleep(5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
magicJS.done();
|
magicJS.done();
|
||||||
|
Loading…
Reference in New Issue
Block a user