过滤事件列表Google Calendar PHP

时间:2015-05-29 15:40:06

标签: php calendar google-calendar-api google-api-php-client

我正在尝试使用以下代码段从Google日历中获取某些用户指定日期之间的事件:

form name="dates" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  Start: <input type="date" name="start">
  End: <input type="date" name="end">
  <br />
  <input type="submit" name="submit" value="Anzeigen">
</form>

<?php
if(isset($_POST['submit'])) 
{ 
    echo "Dates were chosen: Start " . date($_POST['start']) . ' and End ' . date($_POST['end']);
    // Get the API client and construct the service object.
    $client = getClient();
    $service = new Google_Service_Calendar($client);

    // Print the next 10 events on the user's calendar.
    $calendarId = 'bkrni7gfaiumlahibu0mnifjvk@group.calendar.google.com';
    $optParams = array(
      'maxResults' => 10,
      'orderBy' => 'startTime',
      'singleEvents' => TRUE,
      'timeMin' => date($_POST['start']),
    );
    $results = $service->events->listEvents($calendarId, $optParams);

    if (count($results->getItems()) == 0) {
      print "No upcoming events found.\n";
    } else {
      print "Upcoming events:\n";
      foreach ($results->getItems() as $event) {
        $start = $event->start->dateTime;
        if (empty($start)) {
          $start = $event->start->date;
        }
        printf("%s (%s)\n", $event->getSummary(), $start);
      }
    }
} else {
    echo 'Bitte ein Start- und Enddatum auswählen.';
}
?>

日期选择工作正常,显示所选日期,但我收到以下php错误:

[29-May-2015 17:34:05 Europe/Berlin] PHP Fatal error:  Uncaught exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/calendar/v3/calendars/bkrni7gfaiumlahibu0mnifjvk%40group.calendar.google.com/events?maxResults=10&orderBy=startTime&singleEvents=true&timeMin=2015-05-31CEST00%3A00: (400) Bad Request' in /html/calendar/api/google-api-php-client/src/Google/Http/REST.php:110
Stack trace:
#0 /html/calendar/api/google-api-php-client/src/Google/Http/REST.php(62): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 [internal function]: Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request))
#2 /html/calendar/api/google-api-php-client/src/Google/Task/Runner.php(174): call_user_func_array(Array, Array)
#3 /html/calendar/api/google-api-php-client/src/Google/Http/REST.php(46): Google_Task_Runner->run()
#4 /html/calendar/api/google-api-php-client/src/Google/Client.php(590): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#5 /html/calendar/ap in /html/calendar/api/google-api-php-client/src/Google/Http/REST.php on line 110

为什么会失败,因为根据this API,timeMin应该是dateTime。

1 个答案:

答案 0 :(得分:1)

感谢luc的评论,我发现了这个问题。现在,使用

$timeMin = date($_POST['start']) . "T00:00:00Z";
$timeMax = date($_POST['end']) . "T00:00:00Z";

调用API

// Print appointments between given start and end date
$calendarId = 'bkrni7gfaiumlahibu0mnifjvk@group.calendar.google.com';
$optParams = array(
  'orderBy' => 'startTime',
  'singleEvents' => TRUE,
  'timeMin' => $timeMin,
  'timeMax' => $timeMax,
);
$results = $service->events->listEvents($calendarId, $optParams);

我得到了理想的结果。