added coolblue website support!
This commit is contained in:
29
src/core.ts
29
src/core.ts
@@ -30,32 +30,40 @@ import {
|
||||
ThePetEmpire,
|
||||
Conrad,
|
||||
HuisdierExpress,
|
||||
HondenBed
|
||||
HondenBed,
|
||||
Coolblue
|
||||
} from "./modules/websites";
|
||||
|
||||
start();
|
||||
// start();
|
||||
debugStart();
|
||||
|
||||
// Globals
|
||||
let browser: puppeteer.Browser = null;
|
||||
let allProducts: Array<any> = [];
|
||||
let allBlogUrls: Array<any> = [];
|
||||
|
||||
async function debugStart() {
|
||||
browser = await puppeteer.launch({ headless: false });
|
||||
console.log(await crawlProductStock("https://www.coolblue.nl/product/829953/cardo-scala-rider-freecom-4-plus-single.html"));
|
||||
}
|
||||
|
||||
async function start() {
|
||||
try {
|
||||
console.log(`---- ContentEggStockCrawler ----`);
|
||||
console.log(`---- ContentEggStockCrawler ----`);
|
||||
const urls: Array<string> = [];
|
||||
|
||||
// Get sitemap url from process params
|
||||
let params = process.argv.slice(2);
|
||||
|
||||
// Crawl Sitemap
|
||||
const sitemap = await got(params[0]);
|
||||
|
||||
const urls: Array<string> = [];
|
||||
const $ = cheerio.load(sitemap.body, { xmlMode: true })
|
||||
|
||||
$('loc').each(function() {
|
||||
const url = $(this).text()
|
||||
|
||||
if (!urls.includes(url)) {
|
||||
urls.push(url)
|
||||
urls.push(url)
|
||||
}
|
||||
});
|
||||
|
||||
@@ -120,7 +128,7 @@ async function crawlBlogPage(url: string) {
|
||||
}
|
||||
|
||||
if ($("div.egg-container.egg-item").length >= 1) {
|
||||
console.log(`Detected ${$(".row-products").length} content egg large type products!`);
|
||||
console.log(`Detected ${$(".div.egg-container.egg-item").length} content egg large type products!`);
|
||||
|
||||
$("div.egg-container.egg-item").each((index, element) => {
|
||||
let productUrl = $(element).find(".cegg-btn-row a").first().attr("href");
|
||||
@@ -147,9 +155,9 @@ async function crawlBlogPage(url: string) {
|
||||
products[index].inStock = status[2];
|
||||
|
||||
if (products[index].inStock) {
|
||||
console.log(`IN STOCK! ${products[index].name} - ${products[index].domain}`);
|
||||
console.log(`[IN STOCK] ${products[index].name} - ${products[index].domain}`);
|
||||
} else {
|
||||
console.log(`OUT OF STOCK! ${products[index].name} - ${products[index].domain}`);
|
||||
console.log(`[OUT OF STOCK] ${products[index].name} - ${products[index].domain}`);
|
||||
}
|
||||
|
||||
allProducts.push(products[index]);
|
||||
@@ -188,6 +196,9 @@ async function crawlProductStock(url: string) {
|
||||
switch (domain) {
|
||||
case "bol.com":
|
||||
return [domain, page.url(), await BolCom.check(html)];
|
||||
|
||||
case "coolblue.nl":
|
||||
return [domain, page.url(), await Coolblue.check(html)];
|
||||
|
||||
case "fitnesskoerier.nl":
|
||||
return [domain, page.url(), await FitnessKoerier.check(html)];
|
||||
|
@@ -480,3 +480,32 @@ export namespace HondenBed {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export namespace Coolblue {
|
||||
export async function check(html: string) {
|
||||
try {
|
||||
const $ = cheerio.load(html);
|
||||
let stock = false;
|
||||
|
||||
$('script[type="application/ld+json"]').each((index, element) => {
|
||||
let json = JSON.parse($(element).html());
|
||||
|
||||
if (json["@type"]) {
|
||||
if (json["@type"] == "Product") {
|
||||
if (json["offers"]["availability"] == "http://schema.org/InStock") {
|
||||
stock = true;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return stock;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
console.error(`Error occured during stock check!`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user