147 lines
3.8 KiB
Markdown
147 lines
3.8 KiB
Markdown
# 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.
|