Google Calendar API

GustlPC

Lt. Junior Grade
Registriert
Nov. 2008
Beiträge
338
Hallo zusammen,

ich möchte auf meinen Server automatisiert einen Google Kalender über eine API täglich auslesen und gegebenfalls mit herutergeladenen Kalenderdateien (vcs) abgeleichen.

Egal ob PHP, Perl, Python, etc sollte aber auf Linux laufen.

Ich habe mich schon mit der OAuth Schnittstelle befasst, aber das geht immer nur über den Browser und dann gibt es ein Zustimmungsbildschirm wo der Benutzer zustimmen muss um den Zugangskey zu bekommen der nur einmal nutzbar ist. So kann ich das nicht in einem Cronjob selbstständig laufen lassen.

hat hier wer mit der API schon Erfahrungen sammeln können und kann mir helfen?
Würde mich echt freuen.

Hintergrund: Ich möchte für einen Verein die Termine von der Gemeindewebseite mit einem GoogleKalender abgleichen den Vereinsinteressenten in ihren Smartphone Kalender integriert haben.

Gruß,
Gustl
 
Mit Java geht das. Da gibt es Bibliotheken für oAuth. Hab ich selbst schon gemacht.
 
Hallo,

und da muss ich dann nicht erst im Browser zustimmen?

Da würde dann ClientId und ClientSecret reichen oder? Mir ist auch nicht klar was ich bei RedirectUri angeben soll. Er soll da nichts auf eine URL umleiten.
Ergänzung ()

Ja, habe z.B. Python getestet, da muss ich dann über den Browser einen Zustimmungsbildschirm bestätigen damit ich den einmaligen Key für die nächste Abfrage bekommen.
 
Ich habe mich nicht mit google verbunden, sondern mit einer anderen Applikation. Da reichten id und secret.
Leider bin ich nicht in der Arbeit und kann nicht nachschauen, wie das genau implementiert ist.
 
GustlPC schrieb:
Ich habe mich schon mit der OAuth Schnittstelle befasst, aber das geht immer nur über den Browser und dann gibt es ein Zustimmungsbildschirm wo der Benutzer zustimmen muss um den Zugangskey zu bekommen der nur einmal nutzbar ist. So kann ich das nicht in einem Cronjob selbstständig laufen lassen.
im oauth scheme ist das verifizieren der credentials im browser eine einmalige angelegenheit; vom oauth anbieter wird an dieser stelle ein (fuer gewoehnlich nicht zeitlich limitierter) token ausgegeben, mit dem sich ein script/applikation (gewoehnlich per http-header) problemlos von selbst authentifizieren kann.

je nachdem was fuer ein synchronisationsszenario du dir hier vorstellst, kannst du dann einfach einen kalender oeffentlich fuer die vereinsmitglieder anbieten und automatisiert synchronisieren.
 
google-oauth2 for Dummies (ja, ich selbst bin einer, deswegen hab ich mir diese Liste gemacht :D )
auf https://code.google.com/apis/console eine App erstellen
  • in Bibliotheken die gewünscht API auswählen & aktivieren,
  • unter "Zugangsdaten" Zugangsdaten erstellen (OauthID auswählen)
  • Anwendungstyp "Sonstige", irgend einen Namen vergeben
  • ClientID & Clientschlüssel (aka client_secret) merken
(das sollte bisher ja alles passiert sein)



mit der ClientID die folgende URL basteln:
Code:
https://accounts.google.com/o/oauth2/auth?
scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&
redirect_uri=urn:ietf:wg:oauth:2.0:oob&
response_type=code&
client_id=1234567890.apps.googleusercontent.com

im Browser mit dem Konto, auf welchen der Zugriff erfolgen soll, aufrufen (natürlich ohne die Umbrüche)
Zugriff bestätigen
Code kopieren

ab hier brauchts idealerweise eine shell mit curl

mit den gesammelten Daten kann man jetzt ein curl Request (wieder OHNE zeilenumbrüche)machen:
Code:
curl  -H "Content-Type: application/x-www-form-urlencoded"
-d 'code=4/v6xr77ewYqjkslsdUOKwAzu
&client_id=1234567890.apps.googleusercontent.com
&client_secret=xywzxywzxywzxywzxywz
&redirect_uri=urn:ietf:wg:oauth:2.0:oob
&grant_type=authorization_code'
https://accounts.google.com/o/oauth2/token

da kommt folgendes zurück
Code:
{
  "access_token" : "ya29.ölaskdjfwejwjkgsagvwvjwjearsfklcaäölklvkjrzlvhjcwjeskjvljhjtcljtevhlckgkdgvkjgclkwcfhksrjgklvshrjgvlksgjf",
  "expires_in" : 3600,
  "refresh_token" : "1/dlksjlfkslgheguopiwü0938fjhgvfaaeouq4f8turi",
  "token_type" : "Bearer"
}

mit DIESEM refreshtoken kann man sich jetzt immer wieder einen authtoken (der eine Stunde lang gültig ist) erzeugen:
Code:
curl -s -d '
&client_id=1234567890.apps.googleusercontent.com&
client_secret=xywzxywzxywzxywzxywz&
refresh_token=1/dlksjlfkslgheguopiwü0938fjhgvfaaeouq4f8turi&
grant_type=refresh_token' 
https://accounts.google.com/o/oauth2/token

das kann für alle GoogleAPIs so verwendet werden, mann muss aber immer den scope für die entsprechende Schnittstelle ändern.
wie genau der scope lautet, erfährt man in der Regel auf der Dokuseite der jeweiligen Schnittstelle
 
Zurück
Oben