2012-12-27 1 views
12

Kann mir bitte jemand eine klare Erklärung geben, wie Sie die Google Kalender API v3 mit dem Python-Client arbeiten lassen? Insbesondere die anfängliche OAuth-Phase verwirrt mich sehr. Alles, was ich tun muss, ist, auf meinen eigenen Kalender zuzugreifen, ihn zu lesen und Änderungen daran vorzunehmen. Google stellt diesen Code zur Konfiguration meiner App zur Verfügung:Verwenden der Google Kalender API v3 mit Python

import gflags 
import httplib2 

from apiclient.discovery import build 
from oauth2client.file import Storage 
from oauth2client.client import OAuth2WebServerFlow 
from oauth2client.tools import run 

FLAGS = gflags.FLAGS 

# Set up a Flow object to be used if we need to authenticate. This 
# sample uses OAuth 2.0, and we set up the OAuth2WebServerFlow with 
# the information it needs to authenticate. Note that it is called 
# the Web Server Flow, but it can also handle the flow for native 
# applications 
# The client_id and client_secret are copied from the API Access tab on 
# the Google APIs Console 
FLOW = OAuth2WebServerFlow(
    client_id='YOUR_CLIENT_ID', 
    client_secret='YOUR_CLIENT_SECRET', 
    scope='https://www.googleapis.com/auth/calendar', 
    user_agent='YOUR_APPLICATION_NAME/YOUR_APPLICATION_VERSION') 

# To disable the local server feature, uncomment the following line: 
# FLAGS.auth_local_webserver = False 

# If the Credentials don't exist or are invalid, run through the native client 
# flow. The Storage object will ensure that if successful the good 
# Credentials will get written back to a file. 
storage = Storage('calendar.dat') 
credentials = storage.get() 
if credentials is None or credentials.invalid == True: 
    credentials = run(FLOW, storage) 

# Create an httplib2.Http object to handle our HTTP requests and authorize it 
# with our good Credentials. 
http = httplib2.Http() 
http = credentials.authorize(http) 

# Build a service object for interacting with the API. Visit 
# the Google APIs Console 
# to get a developerKey for your own application. 
service = build(serviceName='calendar', version='v3', http=http, 
     developerKey='YOUR_DEVELOPER_KEY') 

Aber (a) es macht absolut keinen Sinn für mich; Die Kommentare sind schrecklich und (b) ich weiß nicht, was ich in die Variablen schreiben soll. Ich habe mein Programm bei Google registriert und mich für einen Dienstkontoschlüssel angemeldet. Aber alles, was mir zur Verfügung stand, war eine verschlüsselte Schlüsseldatei zum Herunterladen und eine Client-ID. Ich habe keine Ahnung, was ein "developerKey" ist oder was ein "client_secret" ist? Ist das der Schlüssel? Wenn ja, wie bekomme ich es, da es tatsächlich in einer verschlüsselten Datei enthalten ist? Angesichts der relativ einfachen Ziele meiner API-Nutzung (d. H. Es handelt sich nicht um eine Multi-User-, Multi-Access-Operation) gibt es einen einfacheren Weg, dies zu tun? Vielen Dank.

+9

Ich finde die Google Kalender API v3 Dokumentation unglaublich kryptisch. – Dimitris

Antwort

13

Eine einfache (lesen: wie ich es getan habe) Weg dies zu tun ist eine Web-Anwendung anstelle eines Dienstkontos zu erstellen. Das mag komisch klingen, da Sie keine Art von Webanwendung benötigen, aber ich benutze das auf die gleiche Weise wie Sie - machen Sie einige Abfragen zu meinem eigenen Kalender/fügen Sie Ereignisse/etc hinzu. - alles über die Befehlszeile und ohne irgendeine Art von Web-App-Interaktion. Es gibt Möglichkeiten, es mit einem Dienstkonto zu tun (ich bastle herum, wenn du tatsächlich auf diese Route gehen willst), aber das hat für mich bisher funktioniert.

Nachdem Sie eine Webanwendung erstellt haben, haben Sie dann alle oben genannten Informationen (Randnotiz: Der obige Beispielcode basiert auf einer Webanwendung. Um ein Dienstkonto zu verwenden, muss Ihre FLOWflow_from_clientsecrets und weitere Anpassungen aufrufen muss gemacht werden - siehe here). Daher werden Sie diesen Abschnitt ausfüllen können:

FLOW = OAuth2WebServerFlow(
    client_id='YOUR_CLIENT_ID', 
    client_secret='YOUR_CLIENT_SECRET', 
    scope='https://www.googleapis.com/auth/calendar', 
    user_agent='YOUR_APPLICATION_NAME/YOUR_APPLICATION_VERSION') 

Sie jetzt mit den Werten ausfüllen können Sie in der API-Konsole sehen (client_id = den gesamten Client ID Zeichenfolge, client_secret = das Client-Geheimnis ist scope die gleiche und die user_agent kann sein, was auch immer Sie wollen). Wie für die service Linie ist developerKey der API-Schlüssel Sie unter dem Simple API Access Abschnitt in der API-Konsole finden (Label API key ist):

service = build(serviceName='calendar', version='v3', http=http, 
    developerKey='<your_API_key>') 

Sie können dann auf einfache Überprüfung wie folgen aus, um zu sehen, ob es hinzufügen Gearbeitet:

Wenn Sie dies jetzt ausführen, wird ein Browserfenster angezeigt, mit dem Sie den Authentifizierungsablauf abschließen können. Das bedeutet, dass die gesamte Authentifizierung von Google verarbeitet wird und die Authentifizierungsantwortdaten in calendar.dat gespeichert werden. Diese Datei (die im selben Verzeichnis wie Ihr Skript gespeichert wird) enthält die Authentifizierungsinformationen, die der Dienst jetzt verwendet. Das ist, was hier vor sich geht:

storage = Storage('calendar.dat') 
credentials = storage.get() 
if credentials is None or credentials.invalid == True: 
    credentials = run(FLOW, storage) 

Es überprüft das Vorhandensein von gültigen Berechtigungsnachweis durch für diese Datei suchen und den Inhalt zu überprüfen (dies alles ist abstrahiert von sich weg, um es einfacher zu implementieren). Nachdem Sie sich authentifiziert haben, wird die if-Anweisung False auswerten und Sie können auf Ihre Daten zugreifen, ohne sich erneut authentifizieren zu müssen.

Hoffentlich scheint das ein wenig mehr Licht in den Prozess - lange Rede kurzer Sinn, machen Sie eine Webanwendung und verwenden Sie die Parameter davon, authentifizieren Sie sich einmal und dann vergessen Sie es.Ich bin mir sicher, dass es verschiedene Punkte gibt, die ich übersehen habe, aber hoffentlich wird es für deine Situation funktionieren.

-1

Google hat jetzt eine gute Beispielanwendung, die Sie ohne viel Aufhebens betriebsbereit macht. Es ist verfügbar als "5 Minuten Erfahrung - Quickstart" auf ihrer Getting Started Seite.

Sie erhalten eine URL, die Sie direkt aufrufen können, wenn Sie auf einem Remote-Server ohne Browser arbeiten.

+0

Zu dieser Zeit gibt es nichts Gutes; Sie erhalten einfach ein generiertes Projekt, das Ihnen zeigt, wie Sie zu OAuth kommen, gefolgt von einem "Erfolg! Fügen Sie hier den Code hinzu." Anschließend werden Sie auf [verschiedene] (https://developers.google.com/google-apps/calendar/firstapp) [links] (https://developers.google.com/resources/api-libraries/documentation/calendar) verwiesen/v3/python/latest /) wo du es sowieso machen sollst. – Mendhak