Domanda

La documentazione per API di Google Calendar non è aggiornata, non riesco a ottenere anche una semplice lista di calendari.Ecco il mio codice finora.

<?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;
  }
}
?>
.

Ho un sacco di questo codice da diversi siti perché i Documenti erano obsoleti, ora sono totalmente bloccato come ho fatto tutto il giorno.Qualsiasi intuizione?

Tutto quello che ottengo finora è una risposta come questa senza "oggetti"

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
        (
        )

)
.

È stato utile?

Soluzione

zio, questo è imbarazzante dopo tutto il tempo che ho speso per questo.Per qualche motivo non ho mai provato a rendere il calendario pubblico.Ho appena assunto che con tutti i passaggi di autorizzazione che potresti accedere al calendario dal conto del progetto.Indovina no.

Easy Fix ... basta rendere il calendario pubblico nelle sue impostazioni.

Per gli eventi Sostituisci $ Cal-> CalendarList Part con

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

Nota: non sono nemmeno sicuro che è necessaria tutta la roba del token di autorizzazione / accesso in sessione Sembra che la pagina dei documenti di Google Cal utilizzi ancora il vecchio client PHP.Credo che dovrebbe funzionare utilizzando solo il conto del servizio (setassertioncredentials) il resto con la sessione non sono sicuro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top