Projekt

Kanu-Aktivitäten Deutschland

Terminextraktion aus heterogenen Webquellen: 2.490 Veranstaltungen eingelesen, klassifiziert, entdoppelt und in einen Kalender ueberfuehrt.

Status Termine erfasst und abgeglichen, Outlook-Abgleich in gestaffelter Erst-Befüllung (Stand 05.08.2026)
Umfang 524 Verbandstermine · 1.966 Termine von Vereinswebseiten · 14 Kategorien in 4 Gruppen · 120.417 Ortsnamen im Index
Umgebung Claude Code · Python-Pipeline, gewachsen von 13 auf 19 Schritte · Outlook über COM
Ablage einem lokalen Projektordner (Code im Git, Arbeitsmappe und Kalender generiert)
Jira RM-800 · RM-802 · RM-805 im Epic RM-485
Quellen DKV-Terminkalender (Abruf 31.07.2026) · Vereinswebseiten (Crawl 01.08.2026) · OpenStreetMap-Extrakte

Worum es geht

Der Vereins-Datensatz beantwortet, wo ein Bootshaus liegt. Offen bleibt die Frage, die davor kommt: Was findet wann wo statt?

Die Antwort ist verstreut. Der Deutsche Kanu-Verband führt einen zentralen Terminkalender, aber längst nicht jeder Verein meldet dorthin. Der größere Teil steht auf den Vereinswebseiten – in jedem denkbaren Format, von der gepflegten Kalender-Erweiterung bis zur Tabelle im Fließtext. Das Ergebnis ist ein gemeinsamer Terminbestand aus beiden Quellen, der in der Arbeitsmappe steht und als Zweit-Kalender in Outlook eingeblendet werden kann.

Zwei Quellen, zwei verschiedene Probleme

  • Verbandskalender (524 Termine): strukturiert, aber auf zwei Ansichten verteilt – die Kategorie steht nur in der Listenansicht, die belastbaren Sachfelder wie Start, Ende, Ort und Ausrichterverein nur auf der Detailseite. Beide werden zusammengeführt, sonst fehlt jeweils die Hälfte.
  • Vereinswebseiten (1.966 Termine): 1.081 Vereine haben eine Webseite, 63 davon antworten nicht, 347 führen tatsächlich Termine. Gesucht wird auf der Startseite und höchstens zwei Unterseiten, deren Verlinkung auf Termine hindeutet.
  • Beide Abrufe legen die geladenen Seiten lokal ab. Ein Neulauf der Auswertung ist damit ohne Netz reproduzierbar – und schont die Quelle.

Was bewusst nicht geraten wird

Auf Vereinswebseiten steht sehr häufig „15.08. Sommerfahrt" – ohne Jahr. Das Jahr ließe sich plausibel ergänzen, und in den meisten Fällen wäre die Ergänzung sogar richtig. Sie unterbleibt trotzdem: 3.711 jahreslose Datumsangaben werden gezählt und gemeldet, aber nicht übernommen.

Ein Terminbestand mit erratenen Jahreszahlen ist größer und unbrauchbar, weil niemand mehr unterscheiden kann, welcher Eintrag aus der Quelle stammt und welcher aus einer Annahme. Es ist dieselbe Haltung wie beim leeren Gewässerfeld im Vereins-Datensatz: lieber eine sichtbare Lücke als ein unsichtbarer Fehler.

Der Abgleich: nichts wird still zusammengeführt

Jeder auf einer Webseite gefundene Termin wird gegen die Verbandstermine desselben Vereins am selben Tag geprüft und in vier Ausgänge sortiert. Der Verbandskalender bleibt dabei die maßgebliche Quelle – aber ein Widerspruch wird nicht dadurch gelöst, dass eine Seite gewinnt, sondern dadurch, dass er sichtbar bleibt.

Die vier Ausgänge des Abgleichs

  • Neu (1.882) – kein Verbandstermin desselben Vereins an diesem Tag. Wird in den Bestand aufgenommen.
  • Duplikat (24) – derselbe Termin, ähnlicher Titel. Der Verbandseintrag bleibt maßgeblich, der Fund wird nicht doppelt geführt.
  • Konflikt (23) – gleicher Verein, gleicher Tag, abweichender Inhalt. Landet mit Gegenüberstellung auf einem eigenen Prüfblatt und wird von Hand entschieden.
  • Ohne Titel (37) – ein Datum ohne erkennbaren Veranstaltungsnamen, meist ein Zeitstempel oder eine leere Kalenderzelle. Wird ausgewiesen statt als Termin verkauft.

Grob vor fein: 14 Kategorien, 4 Gruppen

Der Verband unterscheidet 14 Terminarten – von „Anfängerkurs" über „Freizeitsportlich ausgerichteter Wettkampf" bis „Sonstige Veranstaltung ohne Boot". Für die Auswertung ist das zu fein: Bei 524 Terminen bleiben je Kategorie zu wenige übrig, um etwas zu erkennen.

Darüber liegt deshalb eine gröbere Gruppierung mit vier Werten – Tour (196), Kurs (153), Wettkampf (89), Sonstiges (86). Die Termine von den Vereinswebseiten werden in denselben Namensraum einsortiert, damit beide Quellen überhaupt gemeinsam auswertbar sind.

Der Ort einer Veranstaltung ist nicht der Vereinssitz

Eine Tour startet selten am Bootshaus. Steht im Titel „Wanderfahrt auf der Isar ab Kochel am See", ist der Veranstaltungsort Kochel – nicht die Adresse des ausrichtenden Vereins in einer anderen Stadt.

Aus den bereits vorhandenen lokalen Kartenextrakten wird deshalb ein Index aller Orts- und Gewässernamen gebaut: 120.417 Namen, nur die Namen, ohne Geometrie. Findet sich einer davon im Titel, wird er als Veranstaltungsort gesetzt. Bei den Verbandsterminen liefert bereits die Quelle für 408 der 524 Termine einen Ort mit.

Bis in den Kalender – und was das erzwingt

Der bestätigte Terminbestand wird als Ganztages-Einträge in einen eigenen Outlook-Kalender „Kanu – Aktivitäten" geschrieben, ein- und ausblendbar wie jeder Zweit-Kalender. Ein Kalender, der bei jedem Lauf neu befüllt wird, wäre nach dem zweiten Lauf unbrauchbar – deshalb trägt jeder Eintrag eine stabile Kennung aus Herkunft, Startdatum und Titel sowie eine Inhalts-Signatur.

Daraus ergibt sich das Verhalten beim Wiederlauf: unbekannt → anlegen, bekannt und verändert → aktualisieren, bekannt und gleich → überspringen. Vergangene Einträge bleiben unangetastet – sie sind Historie. Zukünftige Einträge, die in der Quelle nicht mehr vorkommen, werden entfernt.

Ist Outlook nicht erreichbar, wird der Schritt mit sichtbarer Meldung übersprungen statt die Pipeline abzubrechen. Er läuft deshalb bewusst als letzter Schritt: Ein fehlendes Outlook darf die Veröffentlichung der Daten nicht verhindern.

Was daran übertragbar ist

Zwei Quellen zusammenzuführen sieht nach einer Datenaufgabe aus und ist in Wahrheit eine Entscheidungsaufgabe. Der schwierige Teil ist nicht das Einlesen, sondern die Frage: Was ist neu, was ist dasselbe, was widerspricht sich – und wer entscheidet das?

Ein automatischer Merge beantwortet alle drei Fragen still und macht dabei zwangsläufig Fehler, die niemand mehr sieht. Hier beantwortet die Maschine nur die ersten beiden und legt die dritte – 23 Konflikte von 1.966 Terminen – als Arbeitsliste vor. Der Aufwand dafür ist klein, weil die Zahl klein ist. Klein ist sie aber nur, weil vorher sauber klassifiziert wurde.

Aktueller Stand

  • 524 Verbandstermine mit Start, Ende, Meldeschluss, Ort, Ausrichterverein und Zielgruppe, aus Listen- und Detailansicht zusammengeführt.
  • 1.966 Termine von Vereinswebseiten aus 347 aktiven Vereinskalendern; 63 nicht erreichbare Webseiten sind als solche markiert.
  • Drei Blätter in der Arbeitsmappe: bestätigte Aktivitäten, Prüfliste für Duplikate und Konflikte, sowie Datumsfunde ohne Veranstaltungsnamen.
  • Outlook-Kalender „Kanu – Aktivitäten" angebunden, wiederholbar und dublettenfrei; die Erst-Befüllung läuft gestaffelt und aktuell noch auf die Verbandstermine begrenzt, bis die Aufnahmekriterien für Website-Termine feststehen.
  • Eigener Durchstich-Test je Strecke (Verbandstermine, Vereinstermine, Outlook-Abgleich) – die Abgleich-Logik ist von Outlook getrennt und damit ohne Outlook prüfbar.

Eingesetzt in

Dieses Projekt wird in folgenden anderen Projekten verwendet:

← zurück zur Projekt-Übersicht