Google Calendar API mit PHP nützen

Google bietet geniale APIs für allerlei Zwecke. Trotzdem ist die praktische Umsetzung dann oft gar nicht so einfach. Hier deshalb eine Schritt für Schritt Anleitung, wie man die neue Google Calendar API mit PHP benützt. Einfach zum Nachbauen und Adaptieren für deine Website. Ziel ist es in einer interaktiven Website Daten in den Google Kalender des jeweiligen Nutzers zu schreiben und zu lesen. Authentifizierung etc. läuft mit den meisten APIs gleich, es sollte also auch gut möglich sein den Code für andere APIs zu adaptieren.

Die Files findest du gesammelt zum Download in diesem GitHub Repository.

Anlegen des Projektes

Du benötigst ein Verzeichnis oder ein eine Subdomain wo dein Testprojekt laufen soll. Ich mache das immer gleich direkt am Webspace bevorzugt mit einer Subdomain, aber das liegt an dir. Angeblich soll es auch am localhost laufen, da hab ich aber keine Erfahrung.

Auf diesen Webspace installierst du die API Client Library von Google. Das ist eine PHP Library, die die Benutzung von fast allen Google APIs sehr erleichtert. Man kann die Lib über composer installieren. Anleitung siehe hier. Wenn man keinen composer hat, kann man sie über Github runter laden. Hier findest du die verfügbaren Releases. Ich verwende 2.1.0_PHP54. Das entdeckte ZIP lädst du auf den Webspace. Im Verzeichnis wo du dein Projekt aufziehst sollte sich also dieses Unterverzeichnis befinden. (Klick aufs Bild vergrößert)

Google PHP Lib

Damit hast du die Library verfügbar. Jetzt teilen wir Google mit, dass dein Projekt beabsichtigt auf die API zuzugreifen.

Gehe auf die Entwicklerkonsole von Google. Du musst einerseits bei Google Calendar angemeldet sein und idealerweise auch einen Kalender angelegt haben, andererseits musst du dich auf der Konsole mal als Entwickler anmelden, falls du das noch nicht hast.

Jetzt legst du ein neues Projekt an.

Projekt_anlegen

Du wählst einen Namen und legst das Projekt an. (Erweiterte Optionen kannst du auslassen). Nun kommt eine Liste mit allen verfügbaren APIs. Du kannst später andere hinzufügen. Jetzt wählst du mal die Calendar API und aktivierst diese. (Klick aufs Foto zeigt es größer)

bildschirmfoto-2016-12-08-um-12-26-12

Gehe jetzt im Reiter Zugangsdaten auf „Anmeldedaten erstellen“ / „O-Auth-Client_ID“. Es erschient zuerst die Aufforderung den Zustimmungsbildschirm zu konfigurieren. Hier reicht vorerst nur ein Name der Anwendung. Dann lege eine „Webanwendung“ an. Javascript Quellen brauchen wir keine, weil wir ja hier mit PHP arbeiten. Aber du brauchst eine Authorisierte Weiterleitung URI. Dies ist die URI an die weitergeleitet werden darf, nachdem der User bestätigt hat, dass die Anwendung Zugriffe auf den Google Kalender tätigen darf. Hier musst du also gleich mal eine Adresse eingeben, die im Web erreichbar ist und mit der du weiter arbeitest. Ich habe mir eine Subdomain angelegt und arbeite hier ausschließlich mit der index.php. Bei größeren Projekten wirst du vielleicht mehrere Weiterleitung URIs benötigen, die kannst du auch später noch ändern und hinzufügen.

bildschirmfoto-2016-12-08-um-12-38-40

 

Ist der OAuth Zugang angelegt, so erscheint er in der Liste. Ganz rechts findest du einen Download Button.

OAuth Daten downloadenDurch Klick darauf wird eine unbenannte Datei heruntergeladen. Benenne die Datei um in „client.secrets.json„. Du kannst sie natürlich beliebig benennen, aber in der Google Doku wird auch gern dieser Name verwendet. Dieses File lädst du auf deinen Webspace hoch. Diesen Down- und Upload musst du immer wiederholen, wenn du die Konfiguration in der Konsole änderst (andere Redirect URI, andere APIs freigegeben usw.)

Authentifizieren bei Google

In unserer index.php includieren wird vorerst mal nur eine Datei namens authenticate.php. In dieser Datei soll die gesamte Authentifizierung bei der Google API erfolgen.

Die OAuth Authentifizierung läuft mehrstufig ab. Es wird ein Request mit deinen APP-Daten (im File clients.sectrets.json) und einem bestimmten Berechtigungsbereich (Scope) an Google geschickt. Weiters wird festgelegt auf welche URI google nach der erteilten Authentifizierung weiterleiten soll. Dies muss eine URI sein, die in der Konsole als Weiterleitung-URI legitimiert wurde.

Im Client sind jetzt alle nötigen Werte gesetzt um mal den Genehmigungsbildschirm zu laden. Dazu wird mit der Methode createAuthUrl eine URI erzeugt, die den Genehmigungsbildschirm zeigt. Dananch wird per Javascript auf diese URL weitergeleitet.

Nun wird also dieser Bildschirm eingeblendet:

API Authentifizierung von Google

Google fragt also den User ob er zulassen möchte, dass die Website (in diesem Fall Codefreaks) auf den Kalender des Users zugreift. Wird dies bestätigt, so wird auf die zuvor gesetzte redirect_uri weitergeleitet und als GET Variable ein code mitgegeben. Also etwa in dieser Form:   http://redirect-uri.de/index.php?code=isdbcuwhebuvb2e2rv3v usw.

Es muss also nun im PHP File geprüft werden ob eine GET Variable namens code verfügbar ist. In diesem Fall weiß man, dass der Authentifizierungsbildschirm bereits bestätigt wurde. In diesem Fall muss man von Google noch mal mit dem code ein Authentifizierungstoken abfragen.

Das token ist ein Array. Wird das erst mal authentifiziert, so ist in diesem Array auch ein „refresh-token“ vorhanden. Ein Token läuft üblicherweise nach einer Stunde ab und ist dann „expired“. Mit dem Refresh Token kann man sich aber ein neues Token von Google holen. So hat eine Website, die einmal vom User eine Berechtigung erhalten hat theoretisch unendlich lange Zugriff auf den Kalender, auch wenn der User nicht mehr online ist. Während ein Access Token kurzlebig ist, kann der selbe Refresh Token immer wieder benützt werden um einen neuen Access Token bei Google zu beantragen. Ein „refreshter“ Token beinhaltet keinen neuen Refresh Token, sondern der erstmalig übermittelte Refresh Token bleibt gültig.

Der „client“, den die PHP Library zur Verfügung stellt verwaltet den Token und übernimmt viel vom Token-Handling selbstständig, jedoch ist es Aufgabe des Website Betreibers den Access Token bzw. Refresh Token des jeweiligen Users abzuspeichern. (Ausser man akzeptiert, dass bei jedem Login der Authenitifizierungsbildschirm erneut erscheint.) Dieses Abspeichern erfolgt sinnvollerweise entweder als Cookie am Rechner des Users, oder in einer Datenbank in der die User verwaltet werden.

Fasst man diese Zweige der Authentifizierung alle geschickt zusammen, so kann man das alles in ein File (authenticate.php) packen. Dieses wird dann einfach von der Site inkludiert und damit ist die gesamte Authentifizierung erledigt.

Kalender auswählen und Events bearbeiten

Ein User hat üblicherweise mehrere Kalender. Jeder dieser Kalender hat eine ID, die bei API-Abfragen mitgeteilt werden muss. Eine einfache Methode ist die Verwendung der Bezeichnung „primary“, die Abfragen einfach an den Hauptkalender des Users weiterleitet. Wir geben eine Liste der Kalender aus und lassen den User einen Kalender auswählen. Die Auswahl wird als Session Variable abgelegt. Den Code dazu findest du in choose_calender.php

Wenn ein Kalender ausgewählt ist, dann zeigen wir alle zukünftigen Events dieses Kalenders in einer Tabelle. Gleichzeitig geben wir auch gleich einen Link zum Löschen des jeweiligen Events aus.

Wird ein Link zum Löschen geklickt, wird der Event gelöscht.

Dann fügen wir noch einen Event ein. Dazu gibt es einfach einen Link. Bei Klick darauf erzeugen wir im aktuellen Kalender einen Event in 2 Stunden mit 2 Stunden Dauer.

Das wars auch schon. Leider gibt es zur PHP Library der Google API keine Dokumentation. Man ist also darauf angewiesen den Source Code zu durchsuchen, was sich stellenweise sehr mühsam gestaltet. Ich hoffe mit diesen kleinen Codeschnipseln läuft es bei dir schneller…

Eine Live-Demo findest du hier.

 

 

«  -  »

Senf dazugeben

*