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:
- Cree una “Cuenta de servicio” en esta Consola en la nube (se encuentra en “Aplicación web” / “Certificado”).
- Descarga el privado key y guárdelo en un lugar seguro.
- Tome nota de la dirección de correo electrónico asociada con la cuenta de servicio.
- Comparta (a través de la interfaz de usuario de Calendario) cualquier calendario necesario con esta dirección de correo electrónico.
- 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:
- 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.
- 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.