2012-12-27 15 views
12

Czy ktoś może podać mi jasne wyjaśnienie, jak uzyskać interfejs API Kalendarza Google v3 z klientem Python? W szczególności początkowy etap OAuth bardzo mnie myli. Wszystko, co muszę zrobić, to uzyskać dostęp do własnego kalendarza, przeczytać go i wprowadzić w nim zmiany. Google udostępnia ten kod do konfiguracji mojej aplikacji:Korzystanie z Google Calendar API v 3 z Pythonem

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') 

Ale (a) nie ma dla mnie żadnego sensu; objaśnienia komentarza są okropne i (b) nie wiem, co umieścić w zmiennych. Zarejestrowałem swój program w Google i zarejestrowałem klucz do konta usługi. Ale wszystko, co mi dałem, to zaszyfrowany plik klucza do pobrania i identyfikator klienta. Nie mam pojęcia, co to jest "developerKey" lub czym jest "client_secret"? Czy to jest klucz? Jeśli tak, jak mogę to uzyskać, skoro jest on zawarty w zaszyfrowanym pliku? Wreszcie, biorąc pod uwagę względnie proste cele mojego wykorzystania API (tj. Nie jest to operacja wielodostępowa dla wielu użytkowników), czy istnieje prostszy sposób robienia tego? Dzięki.

+9

Uważam, że dokumentacja Google Calendar API v3 jest niesamowicie zagadkowa. – Dimitris

Odpowiedz

13

Prosty (czytaj: sposób zrobiłem to) sposób to zrobić, aby utworzyć aplikację internetową zamiast konta usługi. Może to zabrzmieć dziwnie, ponieważ nie potrzebujesz żadnej aplikacji internetowej, ale używam tego w taki sam sposób, jak robisz - wprowadzaj zapytania do mojego kalendarza/dodaj wydarzenia/etc. - wszystko z linii poleceń i bez jakiejkolwiek interakcji z aplikacją internetową. Są sposoby, aby to zrobić z kontem usługi (będę się majstrować, jeśli rzeczywiście chcesz iść tą drogą), ale to działało już dla mnie.

Po utworzeniu aplikacji internetowej otrzymasz wszystkie informacje wskazane powyżej (uwaga boczna: powyższy przykładowy kod jest oparty na aplikacji internetowej - aby użyć konta usługi, którego numer FLOW musi wywołać pod numer flow_from_clientsecrets, i dalszych dostosowań trzeba zrobić - patrz here). Dlatego będzie można wypełnić tę sekcję:

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') 

Teraz można wypełnić z wartościami można zobaczyć w konsoli API (client_id = całą Client ID ciąg, client_secret = tajemnicy klienta, scope jest taka sama a user_agent może być dowolne). Jak dla linii service, developerKey jest klucz API można znaleźć w sekcji w konsoli API Simple API Access (etykieta jest API key):

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

Następnie można dodać w prosty check jak poniżej, aby zobaczyć, czy to pracował:

events = service.events().list(calendarId='<your_email_here>').execute() 
print events 

Teraz po uruchomieniu tego okna pojawi się okno przeglądarki, które pozwoli ci ukończyć proces uwierzytelniania. Oznacza to, że wszystkie uwierzytelnienia będą obsługiwane przez Google, a informacje o odpowiedziach uwierzytelniających będą przechowywane pod numerem calendar.dat. Ten plik (który będzie przechowywany w tym samym katalogu co twój skrypt) będzie zawierał informacje o uwierzytelnieniu, które będą teraz używane przez usługę. To, co się dzieje tutaj:

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

Sprawdza na istnienie ważnych poświadczeń szukając tego pliku i sprawdzenia zawartości (to wszystko jest oderwane od siebie, aby ułatwić wdrożenie). Po uwierzytelnieniu oświadczenie if będzie oceniać False, a będziesz mieć dostęp do swoich danych bez konieczności ponownego uwierzytelniania.

Miejmy nadzieję, że światło dzienne nabierze nieco więcej światła - krótko mówiąc, zrób aplikację internetową i skorzystaj z jej parametrów, uwierzytelnij się raz, a potem zapomnij o tym.Jestem pewien, że są różne punkty, które przeoczyłem, ale mam nadzieję, że zadziałają w twojej sytuacji.

-1

Google ma teraz dobrą przykładową aplikację, dzięki której możesz bez problemu wykonywać wiele czynności. Jest dostępny jako "5-minutowe doświadczenie - Szybki start" na stronie Getting Started.

To adres URL do bezpośredniego odwiedzania, jeśli pracujesz na serwerze zdalnym bez przeglądarki.

+0

W tej chwili nie daje nic dobrego; po prostu otrzymujesz wygenerowany projekt, który pokazuje, jak OAuth, a następnie "Dodaj kod teraz!". Następnie wskazuje [różne] (https://developers.google.com/google-apps/calendar/firstapp) [linki] (https://developers.google.com/resources/api-libraries/documentation/calendar/v3/python/latest /) i tak powinieneś zrobić to sam. – Mendhak

Powiązane problemy