added coolblue website support!

This commit is contained in:
2021-03-26 14:30:22 +01:00
parent 48fee9b86d
commit cb02947a1c
3 changed files with 1022 additions and 10 deletions

View File

@@ -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)];

View File

@@ -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;
}
}
}