Клиент и учетная запись сервиса Google API php: дата события отсутствует

У меня есть такой php код:

$service = new Google_Service_Calendar($client);

$calendarId = 'your calendar id';
$optParams = array(
  'timeMin' => date('c'),
  'maxResults' => 100,
  'singleEvents' => TRUE,
);

$results = $service->events->listEvents($calendarId, $optParams);
$events = $results->getItems();

// in order to use it in javascript
echo json_encode($events);

$events является ожидаемым массивом, но не содержит даты каждого события. я провел некоторое тестирование, прежде чем использовать учетную запись службы, и каждая дата была доступна через свойство «start», но не в списке, который я получаю сейчас. есть идеи, как нет надлежащей документации о том, что я должен получить в качестве ответа? кстати. изменение прав доступа учетной записи службы в настройках календаря не помогает.

1 ответ

  1. хорошо, я понял это. я был в замешательстве, так как документация по этому вопросу довольно запутана, по крайней мере для меня.

    $events действительно является правильным списком, но причина, по которой он не содержит все свойства, упомянутые в документах, заключается в том, что некоторые свойства должны быть получены с помощью вызова метода. так что нам нужно сделать вот что:

    // start of first event
    $startDate = $events[0]->getStart();
    

    так выглядит сейчас весь мой сценарий. извините мой php, никогда не использовал его раньше

    <?php
    
        header('Content-type: application/json');
    
        include_once __DIR__ . '/vendor/autoload.php';
    
        $client = new Google_Client();
    
        $client->setAuthConfig('your service account json secret');
    
        $client->setApplicationName('your application name');
        $client->setScopes(['https://www.googleapis.com/auth/calendar.readonly']);
        $service = new Google_Service_Calendar($client);
    
        // make actual request
        $calendarId = 'your calendar id';
        $optParams = array(
          'timeMin' => date('c'),
          'maxResults' => 100,
          'singleEvents' => TRUE,
          'orderBy' => 'startTime',
        );
    
        // of type Events.php
        $events = $service->events;
    
        // list of items of type Event.php
        $eventItems = $events->listEvents($calendarId, $optParams)->getItems();
    
        // compose an result object, we're only interested in summary, location and dateTime atm
        // don't know if this is considered proper php code, works though
        $result = array();
        for ($i = 0; $i < count($eventItems); $i++)
        {
            $result[$i]->{summary} = $eventItems[$i]->getSummary();
            $result[$i]->{location} = $eventItems[$i]->getLocation();
            $result[$i]->{startDate} = $eventItems[$i]->getStart()->getDateTime();
        }
    
        echo json_encode($result);
    
    ?>