Cleanup modified & misisng files
Run Tests on Branches / Backend Tests (push) Successful in 3m31s
Run Tests on Branches / Frontend Tests (push) Successful in 3m26s

This commit is contained in:
Antoni Nuñez Romeu
2026-07-02 20:37:29 +02:00
parent 0ebd2dc35c
commit 3f5f88bbf5
16 changed files with 3732 additions and 379 deletions
+53 -36
View File
@@ -1,3 +1,7 @@
// OpenTelemetry SDK — must be required first to instrument http, dns, etc.
require('./tracing');
const { trace } = require('@opentelemetry/api');
const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');
const fs = require('fs');
@@ -16,43 +20,56 @@ const QUERIES = [
];
async function run() {
console.log('🚀 Starting Parapharmacy Scraper...');
// Launching browser
const browser = await puppeteer.launch({
headless: 'new',
args: ['--no-sandbox', '--disable-setuid-sandbox']
const tracer = trace.getTracer('farmaclic-scraper');
return tracer.startActiveSpan('scraper.run', { attributes: { 'scraper.queries': QUERIES.length } }, async (span) => {
try {
console.log('🚀 Starting Parapharmacy Scraper...');
const browser = await puppeteer.launch({
headless: 'new',
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const allResults = {};
for (const query of QUERIES) {
const querySpan = tracer.startSpan('scraper.query', { attributes: { 'scraper.query': query } });
console.log(`\n🔍 Searching for: "${query}"`);
const promofarmaResults = await scrapePromofarma(query, browser);
console.log(` ✅ Promofarma: found ${promofarmaResults.length} items`);
const amazonResults = await scrapeAmazon(query, browser);
console.log(` ✅ Amazon: found ${amazonResults.length} items`);
const googleShoppingResults = await scrapeGoogleShopping(query, browser);
console.log(` ✅ Google Shopping: found ${googleShoppingResults.length} items`);
const ofFactsResults = await scrapeOpenFoodFacts(query, browser);
console.log(` ✅ OpenFoodFacts: found ${ofFactsResults.length} items`);
allResults[query] = {
promofarma: promofarmaResults,
amazon: amazonResults,
googleshopping: googleShoppingResults,
openfoodfacts: ofFactsResults
};
querySpan.setAttribute('scraper.results.total', promofarmaResults.length + amazonResults.length + googleShoppingResults.length + ofFactsResults.length);
querySpan.end();
}
await browser.close();
fs.writeFileSync('results.json', JSON.stringify(allResults, null, 2));
console.log('\n💾 Scraping finished. Results saved to results.json');
span.setStatus({ code: 1 }); // OK
} catch (err) {
span.recordException(err);
span.setStatus({ code: 2, message: err.message }); // ERROR
throw err;
} finally {
span.end();
}
});
const allResults = {};
for (const query of QUERIES) {
console.log(`\n🔍 Searching for: "${query}"`);
// We run sequentially to be gentle on CPU and anti-bot systems
const promofarmaResults = await scrapePromofarma(query, browser);
console.log(` ✅ Promofarma: found ${promofarmaResults.length} items`);
const amazonResults = await scrapeAmazon(query, browser);
console.log(` ✅ Amazon: found ${amazonResults.length} items`);
const googleShoppingResults = await scrapeGoogleShopping(query, browser);
console.log(` ✅ Google Shopping: found ${googleShoppingResults.length} items`);
const ofFactsResults = await scrapeOpenFoodFacts(query, browser);
console.log(` ✅ OpenFoodFacts: found ${ofFactsResults.length} items`);
allResults[query] = {
promofarma: promofarmaResults,
amazon: amazonResults,
googleshopping: googleShoppingResults,
openfoodfacts: ofFactsResults
};
}
await browser.close();
fs.writeFileSync('results.json', JSON.stringify(allResults, null, 2));
console.log('\n💾 Scraping finished. Results saved to results.json');
}
run().catch(err => {