fix: KoePi Netto-Getraenke-Discount-Logo korrekt, Sondermagazin/Bestellmagazin-Filter repariert

This commit is contained in:
2026-07-18 21:34:26 +02:00
parent e172cbe085
commit 7a0b53e894

View File

@@ -325,12 +325,16 @@ async function fetchOffersViaApi() {
const leafletUrl = detail
? `https://www.marktguru.de/leaflets/${detail.id}${child ? `/page/${child.pageIndex}` : ''}`
: null;
const knownStore = storeInfo.id != null
? db.prepare('SELECT retailer FROM koepi_local_stores WHERE store_id=?').get(storeInfo.id)
: null;
const retailerLabel = knownStore?.retailer || advertiser.name || '';
return {
name: r.description || r.title || advertiser.name || '',
brand: r.brand?.name || '',
price: Number.isFinite(priceNum) ? `${priceNum.toFixed(2).replace('.', ',')}` : (r.price || ''),
oldPrice: Number.isFinite(oldPriceNum) ? `${oldPriceNum.toFixed(2).replace('.', ',')}` : (r.oldPrice || ''),
retailer: advertiser.name || '',
retailer: retailerLabel,
dateRange: weekInfo ? `${baseDateRange} ${weekInfo}` : baseDateRange,
weekInfo,
validity: '',
@@ -566,10 +570,17 @@ async function scrapeProspekte() {
const detail = await fetchLeafletDetail(f.mainLeafletId, leafletCache);
const store = detail.closestStore;
const weekInfo = weekInfoWithFallback(detail.name, f.validFrom);
// Store-spezifische Bezeichnung aus der Whitelist bevorzugen (z.B. "Netto
// Getränke-Discount") statt dem generischen advertiser.name von marktguru
// (liefert für diese Filiale fälschlich nur "Netto Marken-Discount")
const knownStore = store.id != null
? db.prepare('SELECT retailer FROM koepi_local_stores WHERE store_id=?').get(store.id)
: null;
all.push({
id: f.id,
publisher: f.advertiser?.name || '',
publisher: knownStore?.retailer || f.advertiser?.name || '',
title: f.advertiser?.name || cleanTitle(detail.name) || '',
rawName: detail.name || '', // nur intern, für den Ausschluss-Filter unten
weekInfo,
street: store.address || '',
zip: MG_ZIP,
@@ -596,13 +607,15 @@ async function scrapeProspekte() {
for (const b of all) b.hasKoenigPilsener = false;
}
// "Sondermagazin"-Prospekte ausblenden (keine normalen Wochenangebote)
// Unerwünschte Prospekt-Typen ausblenden (Sondermagazine, Reise-Prospekte etc.)
// WICHTIG: gegen rawName (den echten Leaflet-Namen) prüfen, nicht gegen
// title/publisher — die zeigen nur noch den sauberen Kettennamen und würden
// "Sondermagazin"/"Bestellmagazin" im echten Namen sonst nie mehr finden.
const EXCLUDED_TITLE_KEYWORDS = ['sondermagazin', 'reisen', 'bestellmagazin'];
const withoutSondermagazin = all.filter(b => {
const t = (b.title || '').toLowerCase();
const t = (b.rawName || '').toLowerCase();
return !EXCLUDED_TITLE_KEYWORDS.some(kw => t.includes(kw));
});
}).map(({ rawName, ...rest }) => rest); // rawName war nur intern nötig
const targeted = withoutSondermagazin.filter(b => b.isTarget);
// Chronologisch in "aktuell laufend" und "kommend" trennen