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 */} -