我正在尝试了解如何使用v3 API将Google日历与当地非营利组织的现有应用程序集成。
意图如下:我们的组织有一个普通的公共Google日历(使用Google帐户),访问者和活跃的志愿者都可以订阅或显示在他们自己的日历中。我们正在开发一个简单的管理Web应用程序(用PHP编写),可以在其中创建和管理任务组。核心功能是计划会议(以及管理这些会议的注释,但这与问题无关。)。计划会议时,将通过电子邮件通知用户。如果计划会议可以通过编程方式添加到Google日历中,那也非常好。我现在必须为每次计划的会议手动执行此操作。
我已经在developers.google.com和php库的Google Code页面上阅读了两天的文档,我发现自己迷失了不同的身份验证方案,帐户类型,密钥等等。我开始认为这不是一个预期的用例。
提出我的问题的核心:我需要访问组织Google日历,并且能够发布事件,而无需任何人工干预。这甚至可能吗?如果是这样,我需要在Google API控制台中创建哪个帐户(网络应用,服务帐户或已安装的应用?)?我如何验证应用程序?我是否需要以某种方式授予应用程序权限?我可以参考某个地方的例子(可能有不同的API吗?)?
从我所看到的,与Google文档中所有示例的关键区别在于,我不想修改当前或最终用户的日历,而是修改相同的日历,无论登录用户如何。 (Google api不会进行用户身份验证,我们自行推出。)重定向/用户同意机制对我来说并不完全有用。
在this问题中,提问者正在努力实现类似的目标。但是没有提供完整的答案。我似乎无法找到接受的回复中提到的一些来源。
答案 0 :(得分:0)
您应该可以从这里开始使用示例代码:https://code.google.com/p/google-api-php-client/source/browse/trunk/examples/calendar/simple.php
请参阅此处:https://developers.google.com/google-apps/calendar/v3/reference/events/quickAdd#examples
关于身份验证,您需要访问https://code.google.com/apis/console?api=calendar来创建并获取相关密钥,但它不是很清楚,因此您可能需要稍微玩一下。
我创建了一个"服务帐户"对于API访问,它给了我客户端ID并让我下载私钥,但我不确定如何进一步尝试如何适用于上面链接的代码示例。
修改强>
我刚刚发现了一些旧的代码仍可以使用ZendGdata-1.10.2库在日历中创建事件:
//for Google Calendar
set_include_path('./ZendGdata-1.10.2/library');
function createAlert($message, $date) {
$google = array();
// Define credentials for the Google Calendar account
$google['GCAL_USER'] = "info@example.com";
$google['GCAL_PASS'] = "password123";
// Include Zend GData client library
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
// Get Google Calendar service name (predefined service name for calendar)
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
// Authenticate with Google Calendar
$client = Zend_Gdata_ClientLogin::getHttpClient($google['GCAL_USER'], $google['GCAL_PASS'], $service);
date_default_timezone_set('GMT');
// Create a calendar object
$calendar = new Zend_Gdata_Calendar($client);
// Create a new event
$event = $calendar->newEventEntry();
$event->title = $calendar->newTitle($message);
// Add our message as the event content
$event->content = $calendar->newContent($message);
$when = $calendar->newWhen();
// Min time is 5 mins away
if ($date == "" || strtotime('+5 minute') >= strtotime($date)+300) {
$when->startTime = date("c", strtotime('+5 minute'));
$when->endTime = date("c", strtotime('+10 minute'));
} else {
$when->startTime = date("c", strtotime($date)+300);
$when->endTime = date("c", strtotime($date)+600);
}
$event->when = array($when);
// Setup reminders for event
$reminder = $calendar->newReminder();
$reminder->method = "all";
$when = $event->when[0];
$when->reminders = array($reminder);
// Send the new event to be added to Google Calendar
if (defined('GCAL_ID')) {
$newEvent = $calendar->insertEvent($event, 'http://www.google.com/calendar/feeds/' . $google['GCAL_ID'] . '/private/full');
} else {
$newEvent = $calendar->insertEvent($event);
}
// Check response
if (stripos($newEvent->id->text, "http://www.google.com/calendar/feeds/". str_replace('@', '%40', $google['GCAL_ID']) ."/private/full/") !== false) {
return "Sent!\n";
} else {
return $newEvent->id->text;
}
}