使用相同设置访问其他日历 - Google Calendar API PHP

时间:2016-09-20 16:01:18

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

我使用Google Calendar PHP API从日历中获取活动。

一切都适用于初始日历,但现在我尝试使用相同的设置来接收来自其他日历(同一Google帐户)的活动。

日志中出现以下错误:

PHP致命错误:在/www/apache/domains/www.domain.ee/htdocs/wp中显示错误消息'Google_Service_Exception',并显示错误'错误调用GET https://www.googleapis.com/calendar/v3/calendars/CALENDAR_ID.calendar.google.com/events?maxResults=999&orderBy=startTime&singleEvents=true&timeZone=Europe%2FTallinn&timeMin=2016-09-19T00%3A01%3A00Z&timeMax=2018-07-17T00%3A00%3A00Z :( 404)未找到' -content /主题/主题/预订/供应商/谷歌/ apiclient / SRC /谷歌/ HTTP / REST.php:79

这是代码:(我唯一要做的就是$calendarId

require_once 'vendor/autoload.php';

$client_email = 'name@name.iam.gserviceaccount.com';
$private_key = file_get_contents('name.p12');
$scopes = array('https://www.googleapis.com/auth/calendar');
$credentials = new Google_Auth_AssertionCredentials(
    $client_email,
    $scopes,
    $private_key
);

$client = new Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
  $client->getAuth()->refreshTokenWithAssertion();
}

$service = new Google_Service_Calendar($client);

// Print the next 999 events on the user's calendar.
$calendarId = 'calendar_id@group.calendar.google.com';
$optParams = array(
  'maxResults' => 999,
  'orderBy' => 'startTime',
  'singleEvents' => TRUE,
  'timeZone' => 'Europe/Tallinn',
  'timeMin' => '2016-09-19T00:01:00Z',
  'timeMax' => '2018-07-17T00:00:00Z',
);
$results = $service->events->listEvents($calendarId, $optParams);

将相同数据插入Google API Explorer会准确返回我要查找的事件。

1 个答案:

答案 0 :(得分:2)

根据Google Calendar API中的处理API错误,您获得的error 404表示找不到指定的资源。其他可能的原因是所请求的资源(使用提供的ID)从未存在或访问用户无法访问的日历。

此处建议的操作是使用exponential backoff

根据此SO question,此问题的另一个问题是,当使用service account访问私人日历时,如果您拥有包含这些日历的域,或者您需要,则需要执行授权委派与服务帐户的电子邮件地址共享私人日历。