Saltar al contenido

Cómo acceder a Google Calendar REST API v3 con Java

Contamos con la mejor información que encontramos on line. Nuestro deseo es que te sea útil y si puedes comentarnos alguna mejora hazlo con total libertad.

Solución:

Si solo necesita acceder a un conjunto particular de calendarios, crearía una cuenta de servicio y compartiría los calendarios necesarios con esa cuenta.

Para hacerlo:

  1. Cree una “Cuenta de servicio” en esta Consola en la nube (se encuentra en “Aplicación web” / “Certificado”).
  2. Descarga el privado key y guárdelo en un lugar seguro.
  3. Tome nota de la dirección de correo electrónico asociada con la cuenta de servicio.
  4. Comparta (a través de la interfaz de usuario de Calendario) cualquier calendario necesario con esta dirección de correo electrónico.
  5. Instale las bibliotecas de cliente Java API de Google (https://developers.google.com/api-client-library/java/apis/).

Entonces deberías poder usar el siguiente código:

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.json.gson.GsonFactory;
import java.io.File;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import java.util.Arrays;
import com.google.api.services.calendar.Calendar;

GoogleCredential credentials = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport())
  .setJsonFactory(new GsonFactory())
  .setServiceAccountId("@developer.gserviceaccount.com")
  .setServiceAccountScopes(Arrays.asList("https://www.googleapis.com/auth/calendar.readonly"))
  .setServiceAccountPrivateKeyFromP12File(new File("-privatekey.p12"))
.build();
Calendar client = new Calendar.Builder(GoogleNetHttpTransport.newTrustedTransport(), new GsonFactory(), credentials).build();
client..execute();

Si, en cambio, es un administrador de dominio que necesita acceder a los calendarios de todas las cuentas de Google Apps que forman parte de su dominio sin el consentimiento de los usuarios individuales, en lugar del paso 4 anterior:

  1. Tome nota del ID de cliente asociado con la cuenta de servicio. Esto se puede encontrar en el archivo client_secrets.json, normalmente con el formato 1234.apps.googleusercontent.com.
  2. Autorice a este cliente a realizar solicitudes en nombre de los usuarios de su organización. Consulte https://support.google.com/a/answer/162106?hl=en para conocer los pasos: use los ámbitos que solicitará más adelante.

Ahora debería poder escribir código como el siguiente:

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.json.gson.GsonFactory;
import java.io.File;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import java.util.Arrays;
import com.google.api.services.calendar.Calendar;

GoogleCredential credentials = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport())
  .setJsonFactory(new GsonFactory())
  .setServiceAccountId("@developer.gserviceaccount.com")
  .setServiceAccountScopes(Arrays.asList("https://www.googleapis.com/auth/calendar"))
  .setServiceAccountPrivateKeyFromP12File(new File("-privatekey.p12"))
  .setServiceAccountUser("@yourdomain.com")
.build();
Calendar client = new Calendar.Builder(GoogleNetHttpTransport.newTrustedTransport(), new GsonFactory(), credentials).build();
client.()

Además de los pasos mencionados en la respuesta de @aeijdenberg, la cuenta de servicio ahora debe aceptar explícitamente el calendario compartido al agregarlo a su CalendarList a través de CalendarList.insert. Ver:

Las cuentas de servicio ya no aceptan calendarios compartidos automáticamente [148804709]
https://issuetracker.google.com/issues/148804709

Te mostramos las comentarios y valoraciones de los lectores

Eres capaz de corroborar nuestro cometido poniendo un comentario y dejando una valoración te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *