TEST Kerstin

Aus Bündnis für Familie Tübingen.

from pathlib import Path import re, html, json

src = Path("/mnt/data/Eingefügter Text(8).txt") text = src.read_text(encoding="utf-8")

events = re.findall(

r'

\s*
(.*?)
\s*

',

   text, flags=re.S

)

def parse_info(title):

   title = html.unescape(title)
   parts = {}
   for key in ["Uhrzeit", "Zielgruppe", "Treffpunkt", "Beschreibung"]:
       m = re.search(
           rf'{key}:\s*(.*?)(?=\n\s*(?:Uhrzeit|Zielgruppe|Treffpunkt|Beschreibung):|$)',
           title, re.S
       )
       if m:
           parts[key] = " ".join(m.group(1).split())
   return parts

date_map = [

   ("2026-10-06","Oktober 2026",6), ("2026-10-08","Oktober 2026",8),
   ("2026-10-09","Oktober 2026",9), ("2026-10-09","Oktober 2026",9),
   ("2026-10-09","Oktober 2026",9), ("2026-10-21","Oktober 2026",21),
   ("2026-10-22","Oktober 2026",22), ("2026-10-31","Oktober 2026",31),
   ("2026-11-05","November 2026",5), ("2026-11-05","November 2026",5),
   ("2026-11-09","November 2026",9), ("2026-11-10","November 2026",10),
   ("2026-11-10","November 2026",10), ("2026-11-11","November 2026",11),
   ("2026-11-15","November 2026",15), ("2026-11-17","November 2026",17),
   ("2026-11-19","November 2026",19), ("2026-11-21","November 2026",21),
   ("2026-11-24","November 2026",24), ("2026-11-24","November 2026",24),
   ("2026-11-25","November 2026",25), ("2026-11-26","November 2026",26)

] assert len(events) == len(date_map)

records=[] for i, ((date, month, day), (title, visible)) in enumerate(zip(date_map, events), 1):

   info=parse_info(title)
   records.append({
       "id":i, "date":date, "month":month, "day":day,
       "title":" ".join(html.unescape(visible).split()),
       "time":info.get("Uhrzeit",""),
       "audience":info.get("Zielgruppe",""),
       "place":info.get("Treffpunkt",""),
       "description":info.get("Beschreibung","")
   })

data_json=json.dumps(records,ensure_ascii=False,indent=2)

html_out = """<!doctype html> Familienangebote – Oktober & November 2026

Familienangebote – Oktober & November 2026

Alle im Kalender vorhandenen Termine sind enthalten. Unter dem Kalender finden Sie sämtliche Informationen zu jedem einzelnen Angebot.

Alle Angebote im Überblick

Hier finden Sie zu jedem Termin Datum, Uhrzeit, Zielgruppe, Treffpunkt und die vollständige Beschreibung.

"""

html_out = html_out.replace("__DATA__", data_json) out_path = Path("/mnt/data/Familienangebote_Oktober_November_2026_mobile.html") out_path.write_text(html_out, encoding="utf-8") print(f"Fertig: {out_path}") print(f"Erhaltene Termine: {len(records)}")