From 6b4b23ea6cf940e00dd9fbc13f21473959ddee66 Mon Sep 17 00:00:00 2001 From: Dicken Date: Sat, 18 Jul 2026 12:24:28 +0200 Subject: [PATCH] fix: KoePi KW-Erkennung praeziser (kein Datensatz-Text mehr), (weekly) aus ALDI-Titel entfernt --- backend/src/tools/koepi/routes.js | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/backend/src/tools/koepi/routes.js b/backend/src/tools/koepi/routes.js index 1b4e49f..6740cf4 100644 --- a/backend/src/tools/koepi/routes.js +++ b/backend/src/tools/koepi/routes.js @@ -171,10 +171,23 @@ async function fetchLeafletDetail(leafletId, cache) { // ("... KW32 ...") — die wird dann selbst eingeklammert, damit die Anzeige // überall einheitlich aussieht. function extractWeekInfo(name) { - const bracket = (name || '').match(/\([^)]*KW\s*\d+[^)]*\)/i); - if (bracket) return bracket[0]; - const bare = (name || '').match(/KW\s*\d+(?:\s*[A-Za-zÄÖÜäöüß-]+)?/i); - return bare ? `(${bare[0]})` : ''; + // Fängt nur "KW29" bzw. "KW 29" plus optional einen kurzen Wochentag-Bereich + // wie "Do-Sa" direkt danach ein — ignoriert bewusst alles andere drumherum + // (z.B. technischen Datensatz-Text wie "HHZ Dataset 2"), egal ob das Ganze + // in Klammern steht oder nicht. Klammert das Ergebnis immer selbst neu ein, + // damit die Anzeige überall einheitlich aussieht. + const m = (name || '').match(/KW\s*\d+(?:\s*[A-Za-zÄÖÜäöüß]{2,3}-[A-Za-zÄÖÜäöüß]{2,3})?/i); + return m ? `(${m[0].replace(/\s+/g, ' ').trim()})` : ''; +} + +// Entfernt bekannten Stör-/Metatext aus dem angezeigten Prospekt-Titel (z.B. +// "(weekly)" bei ALDI). Liste bei Bedarf einfach erweitern, falls andere +// Ketten ähnlichen Text im name-Feld mitliefern. +const TITLE_NOISE_PATTERNS = [/\(weekly\)/gi]; +function cleanTitle(name) { + let t = name || ''; + for (const p of TITLE_NOISE_PATTERNS) t = t.replace(p, ''); + return t.replace(/\s{2,}/g, ' ').trim(); } // Löst die feste Liste gewünschter Filialen (LOCAL_STORE_SEED_LEAFLETS) einmalig @@ -536,7 +549,7 @@ async function scrapeProspekte() { all.push({ id: f.id, publisher: f.advertiser?.name || '', - title: detail.name || f.advertiser?.name || '', + title: cleanTitle(detail.name) || f.advertiser?.name || '', weekInfo, street: store.address || '', zip: MG_ZIP,