API календаря Google – доступ к собственному календарю через учетную запись службы

Я хочу получить доступ к API календаря Google, чтобы вставлять записи в Python. Я создал учетную запись службы на консоли Google API, добавила закрытый ключ и загрузила его.

Но когда я пытаюсь изменить anyting моего календаря, он находится на той же самой учетной записи, я получаю следующее сообщение об ошибке. Чтение произведений.

Код

import httplib2 from oauth2client.client import SignedJwtAssertionCredentials from apiclient.discovery import build event = { 'summary' : 'Appointment', 'location' : 'Somewhere', 'start' : { 'dateTime' : '2012-09-03T10:00:00.000-07:00' }, 'end' : { 'dateTime' : '2012-09-03T10:25:00.000-07:00' } } f = file("key.p12", "rb") key = f.read() f.close() credentials = SignedJwtAssertionCredentials( service_account_name='423291807109-XXXXXXXXXXXXXXXXxx@developer.gserviceaccount.com', private_key=key, scope='https://www.googleapis.com/auth/calendar' ) http = httplib2.Http() http = credentials.authorize(http) service = build('calendar', 'v3', http=http) request = service.events().insert(calendarId='XXXXXXXXXXXXXXXXXX@group.calendar.google.com', body=event) response = request.execute() print(response) 

Сообщение об ошибке:

 apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/XXXXXXXXXXXXXXXXXXX@group.calendar.google.com/events?alt=json returned "Forbidden"> 

Я бы подумал, что я могу получить доступ к своим данным с помощью этой учетной записи службы, но, похоже, это не так.

Google утверждает, что

После создания учетной записи службы вы также получите доступ к идентификатору клиента, связанному с закрытым ключом. Вам понадобится как при кодировании приложения. – https://developers.google.com/accounts/docs/OAuth2?hl=de#scenarios

Я googled около 2 часов, но, похоже, это очень плохо документировано. Есть ли способ вставить новые события через API календаря Google без взаимодействия с пользователем (ака 3-х сторонним OAuth) или есть способ его исправить?

Я просто нашел устаревший ClientLoging. Почему Google затрудняет это?

С уважением

One Solution collect form web for “API календаря Google – доступ к собственному календарю через учетную запись службы”

Я понял, что работает 3-ступенчатый OAuth, если вы удаляете результирующие учетные данные JSON и читаете их каждый раз, когда они вам понадобятся.

Итак, поток: Добавьте ваш client_secrets.json, как указано в Google API, в той же папке, что и этот скрипт. Возьмите ключ из URL-адреса, указанного в подсказке. Введите запрос по запросу. Party! 11. Надеюсь, эти верительные грамоты продолжаются вечно.

 from oauth2client.client import flow_from_clientsecrets flow = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/calendar', redirect_uri='urn:ietf:wg:oauth:2.0:oob') auth_uri = flow.step1_get_authorize_url() print('Visit this site!') print(auth_uri) code = raw_input('Insert the given code!') credentials = flow.step2_exchange(code) print(credentials) with open('credentials', 'wr') as f: f.write(credentials.to_json()) по from oauth2client.client import flow_from_clientsecrets flow = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/calendar', redirect_uri='urn:ietf:wg:oauth:2.0:oob') auth_uri = flow.step1_get_authorize_url() print('Visit this site!') print(auth_uri) code = raw_input('Insert the given code!') credentials = flow.step2_exchange(code) print(credentials) with open('credentials', 'wr') as f: f.write(credentials.to_json()) 

Теперь в самом приложении:

 def __create_service(): with open('credentials', 'rw') as f: credentials = Credentials.new_from_json(f.read()) http = httplib2.Http() http = credentials.authorize(http) return build('calendar', 'v3', http=http) 

Чтобы получить объект службы, можно позвонить

 service = __create_service() 

и использовать API на нем.

  • Механизм или запрос Google для приложения (python)
  • Как подойти к поиску искателей групп Google
  • GAE self.request.cookies возвращает пустой dict
  • NameError: глобальное имя «execfile» не определено, пытаясь запустить приложение в Google App Engine Launcher
  • gae Модель get_by_id () vs get_by_key_name ()
  • Скопируйте объект в хранилище данных Google App Engine в Python, не зная имена свойств во время компиляции
  • Python FileNotFoundError: Нет такого файла или каталога
  • печать файлов в Google App Engine
  • Python - лучший язык программирования в мире.