Подтвердить что ты не робот

Использование 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 (т.е. Это не многопользовательская операция с несколькими доступом), есть ли более простой способ сделать это? Благодарю.

4b9b3361

Ответ 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-адрес, который вы можете посетить напрямую, если работаете на удаленном сервере без браузера.