JSON Schnittstelle oder Kalender-Feed für Anlässe


#1

Viel Aufwand wird investiert, die Anlässe in hitobito korrekt zu erfassen. Aber die Daten sind dann im System eingeschlossen und können nicht einfach andersweitig verwendet werden. Ziel ist es deshalb für Anlässe eine JSON - API oder einen ICS kompatiblen Feed bereitszustellen, der es erlaubt den Veranstaltungskalender zu synchronisieren oder über APIs auf anderen Website integrieren zu können.

Wer hat Erfahrung damit. Schön wäre natürlich, wenn ich einen Kalender auch einfach in meinem Google Kalender oder sonst in einem Kalender einbinden könnte. Gleichzeitig ist Maschinenlesbarkeit wichtig, damit die Event Einträge für Websites wie jubla.ch automatisiert übernommen werden können.


Erweiterungen 2018
#2

Ich denke am besten wird das iCalendar-Format (https://de.wikipedia.org/wiki/ICalendar) genutzt. Dieses wurde zum Teil für diesen Zweck erschaffen.
Für die Generierung dieser iCal-Files könnte der GEM https://github.com/icalendar/icalendar eingesetzt werden.

Die iCal-Dateien können dann ins Outlook, in den Google-Calender oder auf eine Website synchronisiert werden. Outlook und Google-Calendar unterstüttzen eine Funktion, welche es erlaubt die Daten regelmässig zu aktualisieren.

Auf einer Website kann das System auch problemlos genutzt werden, da eigentlich nur ein Text-File ausgewertet werden muss. Es gibt aber auch vorgefertigte Plugins, welche dies übernehmen können.

Das schwierigste ist wohl, dass Generieren der Dateien, da wohl nicht alle Events in einer iCal-Datei sein sollen und so auch die Übersicht über die Events nicht wirklich besser wird.


#3

Hallo @Chronyms Danke für die Tipps, wir werden sicher die iCal Formate in Ruhe anschauen. Ich denke es geht eben um verschiedene Use Cases: Vielleicht will ich von einer Gruppe die Events einfach immer sehen können. Aber es geht sicher auch um die Einbindung in Website und vielleicht brauchen wir da Meta-Daten wie Kurstyp.

Bei der Abfrage wird man sicher festlegen können müssen, welche Art von Anlässen von welchen Organisationseinheiten man tatsächlich erhalten will.


#4

Ich habe gerade geschaut, offenbar gibt es die Möglichkeit eigene Properties zu definieren. https://stackoverflow.com/questions/43117843/store-data-in-custom-fields-or-attachment-in-ics-ical-file

Übrigens gibt es schon in hitobito schon bald die Möglichkeit einen einzelnen Anlass schnell als .ics-File zu exportieren und so im eigenen Kalender abzulegen (dank einer Contribution aus der Community).


#5

Vorschlag für Integration.

Eine Hauptfrage ist JSON, ical oder beides.

  • Nur JSON -> wir können einfach die spezifischen Dinge abbilden, Nachteil: Es muss explizit verarbeitet werden und Einbindung in Kalender ist nicht möglich.
  • Nur ical -> einfache Einbindung, der Standard der inhaltlich passt. Noch unklar: Können wir Events mit mehreren Daten sinnvoll abbilden, ohne das so etwas für eine Kursliste wieder kompliziert umgearbeitet werden muss.

Eigentlich hängt dies auch davon ab, welche User Story man damit eigentlich abdecken will:

User Stories:

  • User Story A: Als Verantwortlicher für die Website meiner lokalen Gruppe, will ich automatisch die Anlässe von meiner Gruppe auf der Website publizieren können, damit ich nicht immer alles doppelt erfassen muss.
  • User Story B Als Mitglied einer Organisation, das sich für Kurse und anderer Events anmeldet, möchte ich die Events als Feed abonnieren können, damit ich an die Anmeldung erinnert werde und ich in meiner Planung anhand der Agenda diese Anlässe berücksichtigen kann.

Einzelne Events werde ich ab dem nächsten Version hinzufügen können, dank einer neuen Exportfunktion, danke einer Contribution von Diego Steiner. Damit ist die User Story B schon teilweise abgedeckt.

Und so wie ich bisher verstanden habe, benötigen die Organisationen die Lösung für User Story A, B ist aktuell weniger wichtig.

Technisches

Die Spezifikation für ical befindet sich hier: https://icalendar.org/RFC-Specifications/iCalendar-RFC-5545/

Herausforderungen / Fragen:

  • Ein Anlass kann mehrere Daten erhalten, können wir das einfach mit iCal abbilden? Oder muss das von einer darstellenden Website wieder zusammengesetzt werden?
  • Wie werden Updates von bestehenden Events gehandhabt?
  • Benötigt man eine Authentifizierung oder lassen wir das offen, da es öffentliche Informationen sind?
  • Wie fein muss man Filtern können, aktuell gibt es folgende Möglichkeiten:
    • Jahr
    • event-typ: event / course / camp (andere URL)
    • filter, ob nur events vom Layer oder auch von Sublayer zurückgeben werden.
    • Bemerkung: aktuell werden immer alle Events zurückgegeben, welche im Tree liegen, ich kann also aktuell nicht verhindern, dass auch Events von Untergruppen angezeigt werden.

Vorschlag der Varianten:

Variante A

JSON basiert, da andere Schnittstellen auch JSON basiert sind und wir so alle Spezialitäten gut abbilden können.

Variante B

ical basiert

Variante C

Beides

Erweiterungen

Persönlicher ical Feed mit den Daten für alle angemeldeten Anlässe

Todo: Schätzen

  • Bereitstellen der Daten als JSON (siehe https://github.com/hitobito/hitobito/issues/244)
  • Bereitstellen der Daten als iCal-Feed
  • Erweiterung: Filtermöglichkeit ergänzen, scope auf Events der Gruppe ohne Untergruppen
  • Zusatzaufwand JSON Schnittstelle oder iCal Schnittstelle öffentlich machen (Anlass Index Seiten sind ja aktuell nicht öffentlich)

Fragen an euch:

Habt ihr dem noch etwas zu ergänzen? Gibt es überhaupt wirklich gute Gründe dies im iCal Format zu lösen?