info@patrick-blom.de

Home » Symfony2 » Wenn Random zur Routine wird

Wenn Random zur Routine wird

Automatisierte Erstellung von Zufallsterminen mit der Google Calendar API & Symfony2

Vor einiger Zeit fragte ich mich wie die automatisierte Terminerstellung in einem Google Kalender funktioniert. Diese praktische Funktion findet sich z.B. bei Hotelbuchungsseiten. Diese tragen nach einer erfolgreicher Buchung einen Termin in dem Standard Google Kalender ein, damit man seine Buchung stets vor Augen hat. Ähnlich ist es auch bei Buchungsseiten von Konzerten oder Veranstaltung. Diese vermerken den Veranstaltungstermin ebenso automatisch in dem für Google hinterlegten Standard Kalender.

Diese Funktion in Kombination mit einem Symfony2 CLI Kommando wäre eine optimale Ergänzung zu meinem Toolkit an Webapplikationen. Eine solche Applikation würde z.B. die Anlage von zufälligen Prüfterminen für ein Server Backup oder die Gültigkeit eines SSL Zertifikats deutlich vereinfachen. Oder wie in meinem Fall, mir einfach die Suche nach zufälligen Terminen für einen “spontanen”-Blumenstrauß für meine Frau erleichtern.

So entstand die Idee zu Random Flower Reminder und wie sich während der Entwicklung zeigte, ist das Konzept der zufälligen Terminerstellung noch für viele weitere Bereiche nutzbar.

Random Flower Reminder

Random Flower Reminder ist eine einfache Symfony2 CLI Applikation welche mit Hilfe der Google Calendar API zufällige Termine in einem freigegebenen Google Kalender erstellt. Die Termine pro Intervall, deren Anzahl sowie die Intervalllänge lassen sich bequem über optionale CLI Parameter einstellen.

Damit die Kommunikation zwischen Applikation und der Google Calender API reibungslos funktioniert nutzt Random Flower Reminder eine serverseitige Authentifizierung mittels Private / Public Key. Dies macht die Angabe von Benutzername und Passwort überflüssig was etwaige Sicherheitslücken durch eine Klartextübertragung minimiert.

Wie funktioniert Random Flower Reminder?

Random Flower Reminder basiert auf einer Kombination aus der Composer Library “google/apiclient” und einem selbst entwickelten Random Date Service. Auf Basis der in der voreingestellten bzw. übergebenen optionalen Parametern errechnet der Random Date Service zufällige Termine welche dann mit einem vordefinierten Kalenderereignis an die Google Calender API gereicht und dort vermerkt werden. Verpackt ist die Logik in einem einfachen Symfony2 Kommando welches sich intuitiv bedienen lässt.

Installation

Die Installation von Random Flower Reminder ähnelt jeder anderen Symfony2 CLI Applikation. Wie gewohnt nutzen wir hierzu Git als SCM und Composer als Package Manager

Konfiguration

Die Konfiguration unterteilt sich in zwei Teile. Die vorbereitende Konfiguration innerhalb des Google Accounts und die abschließende Konfiguration des Random Flower Reminder. Die Einrichtung des Private/Public Key Pair gestaltet sich seitens Google etwas hakelig muss aber glücklicherweise nur einmalig vorgenommen werden.

Google Konfiguration

1. Zu erst wird ein neues Projekt im Google-Developer-Account erstellt.

bildschirmfoto-2016-11-24-um-21-15-06

Neues Projekt anlegen

2. Danach wird das Projekt mit einem Namen versehen, in unserem Fall „FlowerReminderDemo“

bildschirmfoto-2016-11-24-um-21-18-54

Projektnamen vergeben

3. Das Projekt ist nicht sofort verfügbar sondern wird erst einmal in den Benachrichtigungen als „Projekt wird erstellt“ gezeigt. Sobald das Projekt verfügbar ist, wird dies unter den Benachrichtigungen ersichtlich.

bildschirmfoto-2016-11-24-um-21-19-30

Benachrichtigungsanzeige

4. Nach dem das Projekt gewählt wurde, muss die Calendar API  unterhalb von Google Apps API’s aktiviert werden.

bildschirmfoto-2016-11-24-um-21-19-44

API wählen

bildschirmfoto-2016-11-24-um-21-20-14

API aktivieren

5. Nach dem die API Aktiviert wurde müssen die Zugangsberechtigungen angepasst werden.

bildschirmfoto-2016-11-24-um-21-20-43

Berechtigungen anpassen

6. Um eine Server zu Server Authentifizierung zu erstellen müssen die Einstellungen unter den Dienstkonten vorgenommen werden.

bildschirmfoto-2016-11-24-um-21-21-40

Zur Dienstkontenverwaltgung wechseln

7. Unterhalb der Dienstkonten wird dann ein neues Schlüsselpaar über „Dienstkonto Erstellen“ generiert.

bildschirmfoto-2016-11-24-um-21-22-18

Neues Dienstkonto erstellen

8. Im folgenden Fenster, wird dann der Name des Dienstkontos sowie die Berechtigungen gesetzt (Inhaber). Als Schlüsseltyp wird JSON gewählt. Wichtig hierbei ist das, dass neue Dienstkonto domainfrei erstellt wird. Hierzu muss der Haken bei „Domainweite G-Suite Delegation“ gesetzt werden.

bildschirmfoto-2016-11-24-um-21-26-23

Dienstkontodetails angeben

9. Nach der Schlüsselerstellung wird der neue Schlüssel direkt zum Download angeboten. Zudem wird mit einer Meldung visualisiert das der Schlüssel erfolgreich erstellt wurde.

bildschirmfoto-2016-11-24-um-21-26-41

Dateidownload

bildschirmfoto-2016-11-24-um-21-26-49

Bestätigungsbenachrichtigung

10. In der Übersicht ist nun auch das neue Schlüsselpaar zu erkennen.

bildschirmfoto-2016-11-24-um-21-27-45

Schlüsselauflistung

11. Nach dem das Schlüsselpaar erstellt wurde, muss im Google Kalendar die Freigabe für den neuen Schlüssel erstellt werden. Hierzu ändert man im Kalendarinterface bei einen beliebigen Kalender die Einstellungen

bildschirmfoto-2016-11-24-um-21-30-46

zu den Kalendereinstellungen wechseln

12. In den Kalendereinstellungen wird nun unter den Freigaben eine neue E-Mail mit Schreibrechten hinzugefügt

Kalendereinstellungen freigeben

Kalendereinstellungen freigeben

13. Für die Freigabe wird die E-Mail des zuvor erstellen Schlüsselpaars verwendet. So ist gewährleistet das Random Flower Reminder auch Termine anlegen und auslesen kann.

E-Mail Adresse aus dem Schlüsselpaar

E-Mail Adresse aus dem Schlüsselpaar

E-Mail Adresse für die Freigabe nutzen

E-Mail Adresse für die Freigabe nutzen

Damit ist die Google Konfiguration abgeschlossen. Im zweiten Teil der Konfiguration wird nun lediglich noch Random Flower Reminder mittels des erstellten Schlüssels an die API angebunden.

Random Flower Reminder Konfiguration

1. Die Konfiguration von Random Flower Reminder ist vergleichsweise simple. Zu erst muss zum „config“ Ordner innerhalb des geclonten Repositories navigiert werden

bildschirmfoto-2016-11-24-um-21-40-27

zum config Ordner navigieren

2. In diesem Ordner wird dann der zuvor runtergeladenen Schlüssel abgelegt

Schlüssel in den config Ordner legen

Schlüssel in den config Ordner legen

3. Zum Abschluss wird der Name des Schlüssels in der parameters.xml hinterlegt. So wird Random Flower Reminder mitgeteilt welcher Schlüssel zu verwenden ist. Zudem können dort auch noch Details zum anzulegenden Termin, bspl. die Beschreibung des Termins oder dessen Dauer hinterlegt werden.

bildschirmfoto-2016-11-24-um-21-44-06

Konfiguration anpassen

Damit ist die Konfiguration von Randmon Flower Reminder abgeschlossen.

Test

Wie jede vergleichbare Symfony2 CLI Applikation auch wird Random Flower Reminder aus dem „bin“ Verzeichnis aus gestartet. Um einen Überblick über die Funktionen zu erhalten wird die Applikation ohne jegdlichen Parameter gestartet.

Um zu sehen welche zuvor freigegebene Kalender verfügbar sind wird die Applikation mit dem parameter zu Auflistung der Kalender gestartet.

bildschirmfoto-2016-11-24-um-21-52-16

Applikation erstmal starten und verfügbare Kalender auflisten

Hier wird nun der zuvor freigegebne Kalender „temp“ ausgegeben. Durch diese Auflistung wird die KalenderId sichtbar, welche für alle weiteren Befehele notwendig ist.

Um zu testen ob die Terminanlage funktionsfähig ist, bietet Random Flower Reminder einen Dummy Befehl welcher einen Termin am nächsten 3 November anlegt. Um zu sehen welche Parameter ein Befehl benötig und welche Angaben optional sind, kann das standard Symfony2 CLI help Kommando verwendet werden.

Somit ergibt sich für das o.g. Beispiel foglender Befehl.

War die Anlage des Termins erfolgreich, wird dies visualisiert und ist im Google Kalender ersichtlich.

bildschirmfoto-2016-11-24-um-21-55-35

Anlage eines Dummy Termins

bildschirmfoto-2016-11-24-um-21-57-34

Ansicht des Dummy Termins im Google Kalender

Wenn die Funktion sichergestellt ist und alle Angaben im Temrin korrekt sind können die Zufallstermine erstellt werden. Dies funktioniert ähnlich wie die Anlage des Dummy Termins. Die Defaulteinstellungen können, wie zuvor bereits angemerkt, durch die Angabe optionaler Parameter verändert werden. Da für unser Beispiel die Defaulteinstellungen ausreichend sein genügt folgender Befehl. Auch hier wird wieder die bereits bekannte KalendarId verwendet.

Die Dauer der Alnage variiert nach Anzahl der Termine. Wie auch schon bei dem Dummy Befehl, werden die angelgten Termine im Anschluss dem User visualisiert.

Zufallstermine anlegen

Zufallstermine anlegen

Fazit

Die Entwicklung von Random Flower Reminder hat nicht nur meine Eingangsfrage beantwortet sondern zudem noch interessante Erkenntnisse hervorgebracht. So stelle sich heraus, das die Erstellung des Private/Public Schlüssels im Google Developer Account deutlich komplexer ist als angenommen. Im Vergleich dazu war die Entwicklungsarbeit relativ gering, da die von Google bereitgestellte Composer Library sich um die Kommunikation zwischen API und Applikation kümmert und zu dem OuOfTheBox funktioniert. Dazu kommt das die Integration dieser Library problemlos mit der Symfony2 CLI Komponente umsetzbar war, was den Entwicklungsprozess zusätzlich beschleunigte.

Das ganze Projekt ist quelloffen auf GitHub verfügbar und ermöglicht einen kurzen Einblick in die umfangreiche Welt der kostenlosen Google API Dienste.