Использование Google Calendar API v 3 с Python
Может кто-нибудь, пожалуйста, дайте мне ясное объяснение, как получить API Google Calendar v3, работающий с Python Client? В частности, начальная стадия OAuth меня очень сбивает с толку. Все, что мне нужно сделать, это открыть мой собственный календарь, прочитать его и внести в него изменения. Google предоставляет этот код для настройки моего приложения:
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')
Но (а) это совершенно не имеет смысла для меня; объяснения комментариев ужасны, и (б) я не знаю, что положить в переменные. Я зарегистрировал свою программу в Google и подписался на ключ учетной записи службы. Но все, что давало мне, - это зашифрованный ключевой файл для загрузки и идентификатор клиента. Я понятия не имею, что такое "developerKey" или что такое "client_secret"? Это ключ? Если да, то как мне его получить, поскольку он действительно содержится в зашифрованном файле? Наконец, учитывая относительно простые цели использования моего API (т.е. Это не многопользовательская операция с несколькими доступом), есть ли более простой способ сделать это? Благодарю.
Ответы
Ответ 1
Простой (read: way я it done it) способ сделать это - создать веб-приложение вместо учетной записи службы. Это может показаться странным, так как вам не нужно какое-либо веб-приложение, но я использую его так же, как и вы, - делайте некоторые запросы к своим собственным событиям календаря/добавления/и т.д. - все из командной строки и без какого-либо взаимодействия с веб-приложениями. Есть способы сделать это с учетной записью службы (я буду возиться, если вы действительно хотите пойти по этому маршруту), но это сработало для меня до сих пор.
После создания веб-приложения вы будете иметь всю указанную выше информацию (боковое примечание: примерный код, приведенный выше, на основе веб-приложения), чтобы использовать учетную запись службы, для которой FLOW
требуется вызвать flow_from_clientsecrets
и необходимо внести дополнительные корректировки - см. здесь). Поэтому вы сможете заполнить этот раздел:
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')
Теперь вы можете заполнить значения, которые вы видите в консоли API (client_id
= целая строка Client ID
, client_secret
= секрет клиента, scope
- то же самое, а user_agent
может быть все что пожелаете). Что касается строки service
, developerKey
- это ключ API, который вы можете найти в разделе Simple API Access
в консоли API (метка API key
):
service = build(serviceName='calendar', version='v3', http=http,
developerKey='<your_API_key>')
Затем вы можете добавить простую проверку, как показано ниже:
events = service.events().list(calendarId='<your_email_here>').execute()
print events
Теперь, когда вы запустите это, появится окно браузера, позволяющее завершить процесс аутентификации. Это означает, что вся аутентификация будет обрабатываться Google, а информация об ответе на аутентификацию будет храниться в calendar.dat
. Этот файл (который будет храниться в том же каталоге, что и ваш script), будет содержать информацию об аутентификации, которую служба теперь будет использовать. Вот что происходит здесь:
storage = Storage('calendar.dat')
credentials = storage.get()
if credentials is None or credentials.invalid == True:
credentials = run(FLOW, storage)
Он проверяет наличие действительных учетных данных, просматривая этот файл и проверяя содержимое (все это абстрагируется от вас, чтобы упростить его реализацию). После аутентификации оператор if
будет оценивать False
, и вы сможете получить доступ к своим данным без повторной проверки подлинности.
Надеюсь, это светит немного больше на процесс - длинный рассказ короткий, сделать веб-приложение и использовать параметры из этого, пройти аутентификацию один раз, а затем забыть об этом. Я уверен, что есть разные моменты, которые я пропускаю, но, надеюсь, это сработает для вашей ситуации.
Ответ 2
В Google теперь есть хорошее примерное приложение, которое запускает вас и работает без лишней суеты. Он доступен как "5-минутный опыт - Quickstart" на их
Начало работы.
Он даст вам URL-адрес, который вы можете посетить напрямую, если работаете на удаленном сервере без браузера.