Quiero acceder a la API de Google Calendar para insertar entradas con Python. Creé una cuenta de servicio en la consola de la API de Google, agregué una clave privada y la descargué.Google Calendar API - Acceda al propio calendario a través de la cuenta de servicio
Pero cuando trato de modificar cualquiera de mi calendario, está en la misma cuenta, aparece el siguiente mensaje de error. La lectura funciona
Código es
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='[email protected]',
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='[email protected]', body=event)
response = request.execute()
print(response)
mensaje de error es:
apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/[email protected]/events?alt=json returned "Forbidden">
yo habría pensado que puedo acceder a mis datos con esta cuenta de servicio, pero parece no ser.
Google afirma que
Después de la cuenta de servicio ha sido creado, también tendrá acceso a el ID de cliente asociado con la clave privada. Necesitará ambos al codificar su aplicación. - https://developers.google.com/accounts/docs/OAuth2?hl=de#scenarios
I Googled alrededor de 2 horas, pero parece estar muy mal documentado. ¿Hay alguna manera de insertar nuevos eventos a través de la API de Google Calendar sin interacción del usuario (también conocido como OAuth de 3 patas) o hay alguna forma de solucionarlo?
Acabo de encontrar obsoleto ClientLoging. ¿Por qué Google lo hace tan difícil?
Saludos cordiales
he seguido su solución y mis credenciales no están en el archivo. ¿Puedes decirme cómo puedo cargar esos archivos y luego usar 'credentials.authorize()'. – user26
Escribí un ejemplo hace mucho tiempo, puedes encontrarlo en https://github.com/Rentier/ReindeerIkenga – reindeer