Pregunta

La documentación para la API de Google Calendar está desactualizada, no puedo obtener una simple lista de calendarios.Aquí está mi código hasta ahora.

<?php
require_once "includes/partials/_header.php";
set_include_path(get_include_path() . '/google-api-php-client/src');

$client_id = 'xxxx.apps.googleusercontent.com';
$service_account = 'xxxx@developer.gserviceaccount.com';
$p12 = 'xxxx-privatekey.p12';

session_start();
require_once 'Google/Client.php';
require_once 'Google/Service/Calendar.php';

$client = new Google_Client();
$client->setApplicationName("Calendrier");

if (isset($_SESSION['token'])) {
 $client->setAccessToken($_SESSION['token']);
}

$key = file_get_contents($p12);
$client->setClientId($client_id);
$cred = new Google_Auth_AssertionCredentials(
    $service_account,
    array('https://www.googleapis.com/auth/calendar'),
    $key);

$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();

$cal = new Google_Service_Calendar($client);

$events = $cal->calendarList->listCalendarList();
echo "<pre>";
print_r($events);
echo"</pre>";

while(true) {
    foreach ($events->getItems() as $event) {
    echo $event->getSummary();
        print_r($event);
  }
  $pageToken = $events->getNextPageToken();
  if ($pageToken) {
    $optParams = array('pageToken' => $pageToken);
    $events = $service->calendarList->listCalendarList($optParams);
  } else {
    break;
  }
}
?>

Obtuve mucho de este código de diferentes sitios porque los documentos estaban desactualizados, ahora estoy totalmente atascado como he estado pasando por alto todo el día.¿Alguna idea?

Todo lo que llego hasta ahora es una respuesta como esta sin "artículos"

Google_Service_Calendar_CalendarList Object
(
    [etag] => "xxxxxxxxxxxx"
    [itemsType:protected] => Google_Service_Calendar_CalendarListEntry
    [itemsDataType:protected] => array
    [kind] => calendar#calendarList
    [nextPageToken] => 
    [nextSyncToken] => 00001401741798955000
    [collection_key:protected] => items
    [modelData:protected] => Array
        (
            [items] => Array
                (
                )

        )

    [processed:protected] => Array
        (
        )

)

¿Fue útil?

Solución

AllTright, esto está avergonzado después de todo el tiempo que pasé en esto.Por alguna razón, nunca intenté hacer el público calendario.Acabo de asumir que con todos los pasos de autorización que podría acceder al calendario de la cuenta del proyecto.Supongo que no.

Fácil solución ... Solo haz el público calendario en su configuración.

para eventos Reemplazar $ cal-> parte del calendario con

$cal->events->listEvents('calendarID', $optionalParams);

Nota: Ni siquiera estoy seguro de que se necesita todas las cosas de la autorización / token de Autorización / Acceso en la sesión, parece que la página Docs de Google Cal aún usa el antiguo cliente PHP.Creo que debería funcionar utilizando solo la cuenta de servicio (setassertioncremnentials), el resto con la sesión no estoy seguro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top