diff --git a/backend/src/tools/koepi/routes.js b/backend/src/tools/koepi/routes.js index 56adc8f..434e6cd 100644 --- a/backend/src/tools/koepi/routes.js +++ b/backend/src/tools/koepi/routes.js @@ -66,8 +66,11 @@ async function scrapeMarktguru() { const descEl = card.querySelector('.info div, .info'); const description = descEl?.textContent?.trim() || ''; const img = card.querySelector('img.offer-list-item-img'); - const badge = card.querySelector('.badge, .discount-badge, [class*="badge"]')?.textContent?.trim() || ''; - return { name, brand, price, oldPrice, retailer, dateRange, validity, description, badge, image: img?.src || null }; + const badge = card.querySelector('.badge, .discount-badge')?.textContent?.trim() || ''; + const address = card.querySelector('.retailer-address, .address, dd.address, [class*="address"]')?.textContent?.trim() || ''; + // Bild: medium → large für bessere Qualität + 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 }; }); }); @@ -175,7 +178,7 @@ router.get('/img', authenticate, (req, res) => { const parsed = new URL(url); const allowed = ['content-media.bonial.biz','publisher-media.bonial.biz','cdn.marktguru.de','www.marktguru.de']; if (!allowed.some(h => parsed.hostname === h)) return res.status(403).end(); - const r = https.get(url, { headers: {'User-Agent':'Mozilla/5.0'} }, imgRes => { + const r = https.get(url, { headers: {'User-Agent':'Mozilla/5.0','Referer':'https://www.marktguru.de/','Origin':'https://www.marktguru.de'} }, imgRes => { res.setHeader('Content-Type', imgRes.headers['content-type'] || 'image/jpeg'); res.setHeader('Cache-Control', 'public, max-age=3600'); imgRes.pipe(res); diff --git a/frontend/src/tools/koepi.jsx b/frontend/src/tools/koepi.jsx index 5873e2d..dc59c7a 100644 --- a/frontend/src/tools/koepi.jsx +++ b/frontend/src/tools/koepi.jsx @@ -35,42 +35,45 @@ function OfferCard({ offer }) { display:'flex', flexDirection:'column', }}> {/* Produktbild */} -
- {offer.image - ? {offer.name} { e.target.style.display='none'; }} - /> - : null - } - {offer.badge && ( -
- {offer.badge} -
- )} -
+ {offer.image && ( +
+ König Pilsener { e.target.parentElement.style.display='none'; }} + /> + {offer.oldPrice && ( +
+ -29% +
+ )} +
+ )}
- {/* Händler Badge */} -
{offer.retailer}
+ {/* Händler Badge + Adresse */} +
+
{offer.retailer}
+ {offer.address && ( +
+ 📍 {offer.address} +
+ )} +
- {/* Name + Marke */} + {/* König Pilsener */}
König Pilsener
- {offer.name && offer.name.toLowerCase() !== 'könig pilsener' && ( -
- {offer.name} -
- )} - {/* Beschreibung/Flaschengröße */} + {/* Flaschengröße/Beschreibung */} {offer.description && (
{offer.description}