【问题标题】:Google Calendar list events method not returning any events谷歌日历列表事件方法不返回任何事件
【发布时间】:2016-10-07 13:02:19
【问题描述】:

Events: list 并未返回所有事件。

我在日历上看到了很多事件,但是当我拨打Events: list 时,我只收到其中一些。

这不是 maxResults 太低的问题。我将其设置为最大返回 2500。我得到了 1251 左右,我通过 API 删除了大约 24 个,现在它返回 1227。但是日历上有一堆没有回来。

这也不是页面令牌的问题。我正在循环查看其余部分是否在下一页 pageToken 列表中,但是当我在第一页之后调用 getNextPageToken 时,它为空。

我使用的可选参数是:

    $optParams = array(
        'maxResults' => 2500,
        'singleEvents' => TRUE,
        'pageToken' => $pageToken,
    );

如果我将 singleEvents 设置为 false 或将其删除,Google 会以错误响应。

singleEvents boolean 是否将重复事件展开为实例 并且只返回单个一次性事件和重复的实例 事件,但不是潜在的重复事件本身。选修的。 默认为 False。

这似乎是在 Google 将 GMail 名称更改为 G suites 时开始发生的。

我的代码如下:(当我 var_dump $calendarList 时,我只得到一个日历。我使用类似的代码首先添加日历事件。)

$calendarList  = $service->calendarList->listCalendarList();
$calendarListEntry = $service->calendarList->get('primary');

$continue = 1;
echo "reading the calendar for duplicate appointments<br>";
while ($continue == 1) {
    $optParams = array(
        'maxResults' => 2500,
        'singleEvents' => TRUE,
        'pageToken' => $pageToken,
    );

    $events = $service->events->listEvents($calendarListEntry->id, $optParams);
    foreach ($events->getItems() as $event) {
        //process events
    }
    $pageToken = $events->getNextPageToken();
    if ($pageToken == null) { continue = 0; }
}

编辑:奇怪的是,当我将 maxResults 降低到 250 时,我得到了一些最初没有出现在结果中的结果。但我仍然没有得到所有这些。

Edit2:忘记包含读取下一页令牌的调用。

编辑 3:奇怪的是,虽然我传入了 'singleEvents' => TRUE,但我也收到了标记为重复的事件。

【问题讨论】:

  • 你在 $pageToken 中输入了什么,为什么?为什么不直接做 $events = $service->events->listEvents($calendarListEntry->id) ?
  • 因为如果我只做 listEvents,它只会返回前 250 个。我最初将 null 作为 pagetoken,在随后的调用中,我使用从 $pageToken 返回的值= $events->getNextPageToken();我只是忘了将它添加到上面的代码中。
  • 好的,我猜你不想分页。如果你删除单事件和页面令牌行会发生什么?
  • 我正在分页。您没有阅读我的评论或看到我的编辑吗?

标签: php google-calendar-api


【解决方案1】:

带分页

$events = $service->events->listEvents('primary');

while(true) {
  foreach ($events->getItems() as $event) {
    echo $event->getSummary();
  }
  $pageToken = $events->getNextPageToken();
  if ($pageToken) {
    $optParams = array('pageToken' => $pageToken);
    $events = $service->events->listEvents('primary', $optParams);
  } else {
    break;
  }
}

【讨论】:

  • 我已经在分页了。虽然如果我将分页设置为 2500 并且我只得到 1200,那么分页应该无关紧要。
猜你喜欢
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
相关资源
最近更新 更多