尝试使用PHP从日历中获取事件列表

ran*_*ndy 2 php google-calendar-api google-api

我想从日历中获取事件列表.我正在查看developers.google.com/google-apps/calendar/v3/reference/calendarList/list

我假设$ service是从$ cal = new apiCalendarService($ client)创建的; 该文档不是非常具体.

当我尝试执行下面的代码时,我得到错误PHP致命错误:在非对象上调用成员函数getItems()

但如果我这样做,它的确有效

$calendarList = $cal->calendarList->listCalendarList();
print "<h1>Calendar List</h1><pre>" . print_r($calendarList, true) . "</pre>";
Run Code Online (Sandbox Code Playgroud)

如果我尝试示例代码@

developers.google.com/google-apps/calendar/v3/reference/events/list#examples我得到了同样的错误PHP致命错误:在非对象上调用成员函数getItems()

这有效:

$events = $cal->events->listEvents('rtparies@gmail.com');    print "<h1>Events</h1><pre>" . print_r($events, true) . "</pre>";[/PHP]
Run Code Online (Sandbox Code Playgroud)

这失败了:

foreach($events->getItems()as $event){
echo $event->getSummary();
Run Code Online (Sandbox Code Playgroud)

}

我无法想象所有这些例子都不好,所以对我做错了什么建议?

示例如下:

$calendarList = $service->calendarList->listCalendarList();
while(true){
  foreach($calendarList->getItems()as $calendarListEntry){
      echo $calendarListEntry->getSummary();
   }
  $pageToken = $calendarList->getNextPageToken();
  if($pageToken){
      $optParams = array('pageToken'=> $pageToken);
      $calendarList = $service->calendarList->listCalendarList($optParams);
  }else{
      break;
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

小智 5

你需要得到$calendarList一个Object,而不是当前代码所做的Array.

使用

$client->setUseObjects(true); 
Run Code Online (Sandbox Code Playgroud)

就在此之前

$service = new apiCalendarService($client);
Run Code Online (Sandbox Code Playgroud)

说明:

$events = $cal->events->listEvents('rtparies@gmail.com');
Run Code Online (Sandbox Code Playgroud)

返回一个数组.如果您不需要对象进行进一步处理,那就没问题.

由于您需要一个对象,您需要将对象的使用设置为true:

$client->setUseObjects(true);
Run Code Online (Sandbox Code Playgroud)

现在,

$events = $cal->events->listEvents('rtparies@gmail.com');
Run Code Online (Sandbox Code Playgroud)

仍然有效,唯一的区别是你现在有一个对象,你可以用它来代替这行下面的代码.