我正在尝试连接到 Google日历,并使用域范围内的授权设置了服务帐户。 然后,我下载了json p12文件,将其放在我的Web服务器上,并尝试运行以下代码。
目标是让php脚本从Google日历返回事件列表,以便可以使用它们。
执行代码时, $ events 不包含日历中列出的任何项目,而是一个类似于php源代码下方的json对象。
我误读了文档,是否遗漏了明显的内容?
非常感谢您的反馈,
内特
<? require_once 'vendor/autoload.php';
$calendar = initCalendar();
$events = $calendar->events->listEvents('primary');
// Take from : https://developers.google.com/calendar/v3/reference/events/list
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;
}
}
function initCalendar(){
$KEY_FILE_LOCATION = __DIR__ . '/my_downloaded_file.json';
$client = new Google_Client();
putenv('GOOGLE_APPLICATION_CREDENTIALS='.$KEY_FILE_LOCATION);
$client->setAuthConfig($KEY_FILE_LOCATION);
$client->useApplicationDefaultCredentials();
$client->setApplicationName('Calendar Sync');
$client->setIncludeGrantedScopes(true); // incremental auth
$client->setScopes([
Google_Service_Calendar::CALENDAR
, Google_Service_Calendar::CALENDAR_READONLY
]);
$client->setRedirectUri('https://' . $_SERVER['HTTP_HOST'] . '/api/events.php');
$client->setAccessType('offline'); // offline access
$calendar = new Google_Service_Calendar($client);
return $calendar;
}
?>
返回的JSON
object(Google_Service_Calendar_Events)#58 (19) {
["collection_key":protected]=>
string(5) "items"
["accessRole"]=>
string(5) "owner"
["defaultRemindersType":protected]=>
string(37) "Google_Service_Calendar_EventReminder"
["defaultRemindersDataType":protected]=>
string(5) "array"
["description"]=>
NULL
["etag"]=>
string(18) ""sdfsdfgsdfsf""
["itemsType":protected]=>
string(29) "Google_Service_Calendar_Event"
["itemsDataType":protected]=>
string(5) "array"
["kind"]=>
string(15) "calendar#events"
["nextPageToken"]=>
NULL
["nextSyncToken"]=>
string(28) "sdfsdfsdfsdfsdf="
["summary"]=>
string(67) "user@domain.test"
["timeZone"]=>
string(3) "UTC"
["updated"]=>
string(24) "2018-09-20T10:17:37.161Z"
["internal_gapi_mappings":protected]=>
array(0) {
}
["modelData":protected]=>
array(0) {
}
["processed":protected]=>
array(0) {
}
["defaultReminders"]=>
array(0) {
}
["items"]=>
array(0) {
}
}
答案 0 :(得分:1)
服务帐户是虚拟用户,不是您的个人用户。它有自己的Google日历帐户。为日历提供primary
时,如果它是当前经过身份验证的用户(服务帐户)的主要日历。
您可以将新事件添加到服务帐户日历中,或者与服务帐户共享日历,然后需要提供日历的日历ID才能访问该数据。