feat: KöPi - 11er Kasten mit kasten_front.png
This commit is contained in:
@@ -99,41 +99,37 @@ async function scrapeMarktguru() {
|
||||
const description = descEl?.textContent?.trim() || '';
|
||||
const img = card.querySelector('img.offer-list-item-img');
|
||||
const badge = card.querySelector('.badge, .discount-badge')?.textContent?.trim() || '';
|
||||
const imgSrc = img?.src || null;
|
||||
const imgSrc = img?.src?.replace('/medium.webp', '/large.webp') || img?.src || null;
|
||||
return { name, brand, price, oldPrice, retailer, dateRange, validity, description, badge, address: '', image: imgSrc };
|
||||
});
|
||||
});
|
||||
|
||||
// Bilder via Node https mit exakten Browser-Headers laden
|
||||
const nodeHttps = require('https');
|
||||
for (let i = 0; i < offers.length; i++) {
|
||||
const url = offers[i].image;
|
||||
if (!url || !url.startsWith('https://')) continue;
|
||||
offers[i].image = await new Promise(resolve => {
|
||||
const req = nodeHttps.get(url, {
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
||||
'Accept': 'image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8',
|
||||
'Accept-Language': 'de-DE,de;q=0.9',
|
||||
'Referer': 'https://www.marktguru.de/',
|
||||
'Origin': 'https://www.marktguru.de',
|
||||
'sec-fetch-dest': 'image',
|
||||
'sec-fetch-mode': 'no-cors',
|
||||
'sec-fetch-site': 'cross-site',
|
||||
}
|
||||
}, res => {
|
||||
if (res.statusCode !== 200) return resolve(null);
|
||||
const chunks = [];
|
||||
res.on('data', c => chunks.push(c));
|
||||
res.on('end', () => {
|
||||
const b64 = Buffer.concat(chunks).toString('base64');
|
||||
const mime = res.headers['content-type'] || 'image/webp';
|
||||
resolve(`data:${mime};base64,${b64}`);
|
||||
});
|
||||
});
|
||||
req.on('error', () => resolve(null));
|
||||
req.setTimeout(8000, () => { req.destroy(); resolve(null); });
|
||||
});
|
||||
// Lokale Bilder auswählen basierend auf Beschreibung
|
||||
for (const offer of offers) {
|
||||
const desc = (offer.description || '').toLowerCase();
|
||||
if (desc.includes('steini')) {
|
||||
// Steini-Kasten
|
||||
offer.imageLocal = '/koepi/kasten_steini.png';
|
||||
} else if (desc.includes('0,33') && (desc.includes('24') || desc.includes('24 x'))) {
|
||||
// 24x0,33l Kasten
|
||||
offer.imageLocal = '/koepi/kasten_033.png';
|
||||
} else if (desc.includes('11') && desc.includes('0,5')) {
|
||||
// 11x0,5l Kasten (von vorne)
|
||||
offer.imageLocal = '/koepi/kasten_front.png';
|
||||
} else if (desc.includes('0,5') && (desc.includes('20') || desc.includes('20 x'))) {
|
||||
// 20x0,5l Langhalsflasche
|
||||
offer.imageLocal = '/koepi/kasten_lang.png';
|
||||
} else if (desc.includes('flasche') || desc.includes('6 x') || desc.includes('6x')) {
|
||||
// 6er Träger
|
||||
offer.imageLocal = '/koepi/traeger.png';
|
||||
} else if (desc.includes('0,5')) {
|
||||
offer.imageLocal = '/koepi/kasten_050.png';
|
||||
} else if (desc.includes('0,33')) {
|
||||
offer.imageLocal = '/koepi/kasten_033.png';
|
||||
} else {
|
||||
offer.imageLocal = '/koepi/kasten_050.png'; // default
|
||||
}
|
||||
offer.image = null; // CDN nicht mehr nötig
|
||||
}
|
||||
|
||||
// Filtern auf Ziel-Händler + nur König Pilsener
|
||||
|
||||
Reference in New Issue
Block a user