# OSMCal → Mobilizon Importer EN: Import events from [OSMCal](https://osmcal.org/) into a Mobilizon group, e.g. [rheinneckar.events](https://rheinneckar.events). DE: Importiert Veranstaltungen aus dem OpenStreetMap Calendar nach Mobilizon, filtert sie lokal nach Entfernung um Heidelberg und legt sie als Gruppenveranstaltungen an. --- ## Features / Funktionen EN: - Fetches German OSMCal events via API - Filters events by radius around Heidelberg - Reads the original description from each event’s `.ics` file - Imports into Mobilizon via GraphQL - Supports Mobilizon group posting - Avoids duplicate imports using a local state file DE: - Lädt deutsche OSMCal-Veranstaltungen über die API - Filtert Veranstaltungen nach Radius um Heidelberg - Liest die Originalbeschreibung aus der jeweiligen `.ics`-Datei - Importiert nach Mobilizon per GraphQL - Unterstützt Veröffentlichung als Mobilizon-Gruppe - Verhindert doppelte Importe über eine lokale Statusdatei --- ## Requirements / Voraussetzungen - Python 3 - Mobilizon account - Membership in the target Mobilizon group - OAuth token for the Mobilizon API - Empfehlung: Linux Install dependencies: ```bash python3 -m venv .venv source .venv/bin/activate pip install requests python-dotenv icalendar ``` auf dem eigenen Rechner voraussetzungen schaffen Verzeichnis erstellen und darin ausführen: ```bash python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt ``` ## Configuration / Konfiguration Create a .env file: ``` MOBILIZON_INSTANCE="https://rheinneckar.events" MOBILIZON_TOKEN="API token" MOBILIZON_ORGANIZER_ACTOR_ID="profile actor ID" MOBILIZON_ATTRIBUTED_TO_ID="group actor ID" ``` The helper script setup-mobilizon.py can create this .env file. Mit dem hilfsscript setup-mobilizon.py lässt sich die .env Datei automatisch befüllen. ## Usage / Nutzung Run the importer: ```bash source .venv/bin/activate ./import-osmcal-to-mobilizon.py ``` Example output: 70 Veranstaltungen aus OSMCal geladen 9 Veranstaltungen im 15-km-Umkreis um Heidelberg Fertig. Importiert: 9, übersprungen: 0 ## Settings / Einstellungen Edit these values in import-osmcal-to-mobilizon.py. Diese Werte in der Datei import-osmcal-to-mobilizon.py anpassen Radius / Radius um die angegebenen Koordinaten ``` RADIUS_KM = 18.0 ``` Draft mode / Entwurfsmodus ``` DRAFT = True ``` Creates drafts / Veranstaltungen werden als Entwurf veröffentlicht. ``` DRAFT = False ``` Publishes directly / Veranstaltungen werden direkt veröffentlicht. Event duration / Veranstaltungsdauer ``` EVENT_DURATION_HOURS = 3 ``` ## Duplicate handling / Umgang mit bereits importierten Veranstaltungen Imported events are stored in: Importierte Veranstaltungen werden in folgender Datei gespeichert: imported-osmcal-events.json Events listed there are skipped on future runs. Veranstaltungen in dieser Datei werden bei einem erneuten Lauf des Skriptes übersprungen. Reset for a new test / Zurücksetzen vor einen neuen Lauf: ```bash echo '{}' > imported-osmcal-events.json ``` Delete old Mobilizon drafts or events first, otherwise duplicates may be created. Vorher alte Entwürfe oder Events in Mobilizon löschen, sonst entstehen Duplikate. ## Notes / Hinweise EN: - Existing Mobilizon events are not updated. - Existing drafts are not automatically published. - If DRAFT is changed from True to False, already imported events are still skipped. - The access token may expire and then has to be renewed. - This script has contents generated by ai. DE: - Bestehende Mobilizon-Events werden nicht aktualisiert. - Bestehende Entwürfe werden nicht automatisch veröffentlicht. - Wenn DRAFT von True auf False geändert wird, werden bereits importierte Events trotzdem übersprungen. - Der Access-Token kann ablaufen und muss dann erneuert werden. - Dieses Script wurde in Zusammenarbeit mit einer KI erarbeitet.