【发布时间】:2016-07-18 23:21:26
【问题描述】:
我正在编写一个脚本,以便从 Google 日历中提取一个事件并将其放到一个网站上。目的是能够将我的雇主(大学图书馆)的营业时间放在我们的网站上。基本上,我们在 Google 日历中创建活动,并在摘要中显示营业时间。我的目标是以编程方式从日历中提取相关信息,并将其放入我们主页上的 div 标签中。
从 Google 修改基本 PHP 示例以检索必要信息并不难。不幸的是,控制器代码停止检索新创建的事件。这不是权限问题,因为我是日历的所有者。直到昨天下午,我才能够创建新事件并让脚本将它们打印到我的浏览器。这是我的代码:
<?php
require __DIR__ . '/vendor/autoload.php';
define('APPLICATION_NAME', 'Library Hours Script');
define('CREDENTIALS_PATH', '~/path-to-credentials');
define('CLIENT_SECRET_PATH', __DIR__ . '/private key file');
// If modifying these scopes, delete your previously saved credentials
// at ~/.credentials/calendar-php-quickstart.json
define('SCOPES', implode(' ', array(
Google_Service_Calendar::CALENDAR_READONLY)
));
/**
* Returns an authorized API client.
* @return Google_Client the authorized client object
*/
$client_email = 'project-name@clean-mason-95113.iam.gserviceaccount.com';
$private_key = file_get_contents('/path-to-private-key');
$credentials = new Google_Auth_AssertionCredentials(
$client_email,
SCOPES,
$private_key
);
// Get the API client and construct the service object.
$client = new Google_Client();
$client->setAssertionCredentials($credentials);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
$service = new Google_Service_Calendar($client);
// Get the calendar ID. The script currently uses the "Regular Hours" calendar.
$calendarId = 'dsulibraryinfo@gmail.com';
$optParams = array(
'maxResults' => 1,
'singleEvents' => TRUE,
'timeMin' => date('c'),
);
$results = $service->events->listEvents($calendarId, $optParams);
if (count($results->getItems()) == 0) {
print "<a href='http://www.deltastate.edu/academics/libraries/libraries-hours-of-operation/' target='_blank'>Click here for Library hours</a>.\n";
} else {
foreach ($results->getItems() as $event) {
$opHours = $event->getSummary();
$start = $event->start->dateTime;
if (empty($start)) {
$start = $event->start->date;
}
print($opHours . " " . $start . " " . date('c'));
}
}
基本上,上面的代码向日历 API 发出请求,以获取按当前日期过滤的最大结果数为 1 的事件列表。然后它将开始日期和摘要打印到屏幕上。
API 浏览器返回的结果与我在 Web 服务器上运行脚本时的结果相同。它只显示一段时间前创建的未来事件。我昨天和今天为本周晚些时候创建的事件不会返回。这个问题似乎不是很常见,但没有报告过它的人找到解决方案。任何帮助将不胜感激。
【问题讨论】:
标签: php google-calendar-api gdata-api