fix: KoePi Netto-Getraenke-Discount-Logo korrekt, Sondermagazin/Bestellmagazin-Filter repariert
This commit is contained in:
@@ -325,12 +325,16 @@ async function fetchOffersViaApi() {
|
|||||||
const leafletUrl = detail
|
const leafletUrl = detail
|
||||||
? `https://www.marktguru.de/leaflets/${detail.id}${child ? `/page/${child.pageIndex}` : ''}`
|
? `https://www.marktguru.de/leaflets/${detail.id}${child ? `/page/${child.pageIndex}` : ''}`
|
||||||
: null;
|
: 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 {
|
return {
|
||||||
name: r.description || r.title || advertiser.name || '',
|
name: r.description || r.title || advertiser.name || '',
|
||||||
brand: r.brand?.name || '',
|
brand: r.brand?.name || '',
|
||||||
price: Number.isFinite(priceNum) ? `€ ${priceNum.toFixed(2).replace('.', ',')}` : (r.price || ''),
|
price: Number.isFinite(priceNum) ? `€ ${priceNum.toFixed(2).replace('.', ',')}` : (r.price || ''),
|
||||||
oldPrice: Number.isFinite(oldPriceNum) ? `€ ${oldPriceNum.toFixed(2).replace('.', ',')}` : (r.oldPrice || ''),
|
oldPrice: Number.isFinite(oldPriceNum) ? `€ ${oldPriceNum.toFixed(2).replace('.', ',')}` : (r.oldPrice || ''),
|
||||||
retailer: advertiser.name || '',
|
retailer: retailerLabel,
|
||||||
dateRange: weekInfo ? `${baseDateRange} ${weekInfo}` : baseDateRange,
|
dateRange: weekInfo ? `${baseDateRange} ${weekInfo}` : baseDateRange,
|
||||||
weekInfo,
|
weekInfo,
|
||||||
validity: '',
|
validity: '',
|
||||||
@@ -566,10 +570,17 @@ async function scrapeProspekte() {
|
|||||||
const detail = await fetchLeafletDetail(f.mainLeafletId, leafletCache);
|
const detail = await fetchLeafletDetail(f.mainLeafletId, leafletCache);
|
||||||
const store = detail.closestStore;
|
const store = detail.closestStore;
|
||||||
const weekInfo = weekInfoWithFallback(detail.name, f.validFrom);
|
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({
|
all.push({
|
||||||
id: f.id,
|
id: f.id,
|
||||||
publisher: f.advertiser?.name || '',
|
publisher: knownStore?.retailer || f.advertiser?.name || '',
|
||||||
title: f.advertiser?.name || cleanTitle(detail.name) || '',
|
title: f.advertiser?.name || cleanTitle(detail.name) || '',
|
||||||
|
rawName: detail.name || '', // nur intern, für den Ausschluss-Filter unten
|
||||||
weekInfo,
|
weekInfo,
|
||||||
street: store.address || '',
|
street: store.address || '',
|
||||||
zip: MG_ZIP,
|
zip: MG_ZIP,
|
||||||
@@ -596,13 +607,15 @@ async function scrapeProspekte() {
|
|||||||
for (const b of all) b.hasKoenigPilsener = false;
|
for (const b of all) b.hasKoenigPilsener = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// "Sondermagazin"-Prospekte ausblenden (keine normalen Wochenangebote)
|
|
||||||
// Unerwünschte Prospekt-Typen ausblenden (Sondermagazine, Reise-Prospekte etc.)
|
// 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 EXCLUDED_TITLE_KEYWORDS = ['sondermagazin', 'reisen', 'bestellmagazin'];
|
||||||
const withoutSondermagazin = all.filter(b => {
|
const withoutSondermagazin = all.filter(b => {
|
||||||
const t = (b.title || '').toLowerCase();
|
const t = (b.rawName || '').toLowerCase();
|
||||||
return !EXCLUDED_TITLE_KEYWORDS.some(kw => t.includes(kw));
|
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);
|
const targeted = withoutSondermagazin.filter(b => b.isTarget);
|
||||||
|
|
||||||
// Chronologisch in "aktuell laufend" und "kommend" trennen
|
// Chronologisch in "aktuell laufend" und "kommend" trennen
|
||||||
|
|||||||
Reference in New Issue
Block a user