const cheerio = require("cheerio"); const cron = require("node-cron"); const axios = require("axios"); const fs = require("fs"); const discordWebhook = "https://discord.com/api/webhooks/1439286509390921749/t2Hb8XloF6zhDRYD1yh_QlkHHa9eHUyXvd9TxZRHwqR_b_OxxbnwDgsm4em8TwA9NQIa"; // new version works with ceneo.pl only const productsIds = ["182928416", "95706396", "90180325"]; function sendMessage(message) { axios.post(discordWebhook, { content: message, }); } async function compareAndSave(productsPrice) { if (!fs.existsSync("productsPrice.json")) { fs.writeFileSync("productsPrice.json", "[]"); } const productsPriceJson = fs.readFileSync("productsPrice.json", "utf8"); const oldProductsPrice = JSON.parse(productsPriceJson); const diffProducts = []; for (const product of productsPrice) { const oldProduct = oldProductsPrice.find( (oldProduct) => oldProduct.name === product.name ); if (oldProduct && oldProduct.price !== product.price) { diffProducts.push({ name: product.name, newPrice: product.price, oldPrice: oldProduct.price, link: product.link, shop: product.shop, }); } } for (const product of diffProducts) { sendMessage( `Zmiana ceny **${product.name}**:\nCena: ${product.oldPrice} -> ${product.newPrice}\nLink: ${product.link}` ); } if (diffProducts.length === 0) { sendMessage("Brak zmian w cenach"); } fs.writeFileSync( "productsPrice.json", JSON.stringify(productsPrice, null, 2) ); } async function init() { const products = []; for (const productId of productsIds) { const response = await axios.get(`https://www.ceneo.pl/${productId}`); const $ = cheerio.load(response.data); const items = $(".product-offer__container").first(); for (const item of items) { let name = $(item).data("productname"); let price = $(item).data("price"); let link = `https://www.ceneo.pl/${$(item).data("click-url")}`; const shop = $(item).data("shopurl") || "ceneo.pl"; if (!name || !price) { name = $(item).find(".short-name__txt").text(); price = $(item).find(".price").text(); link = `https://www.ceneo.pl/${productId}`; } if (!name || !price || !link) { continue; } products.push({ name, price, link, shop }); } } await compareAndSave(products); console.log("Sprawdzone! Aktualne ceny zapisane w productsPrice.json"); } sendMessage("Zaczynam monitoring cen"); const task = cron.schedule("0 6,9,12,14,16,18,21 * * *", init, { timezone: "Europe/Warsaw", }); task.execute();