3

我正在尝试了解如何使用 v3 API 将 Google 日历与本地非营利组织的现有应用程序集成。

目的如下:我们的组织有一个通用的公共 Google 日历(带有 Google 帐户),访问者和活跃的志愿者都可以订阅或显示在他们自己的日历中。我们正在开发一个简单的管理 Web 应用程序(用 PHP 编写),可以在其中创建和管理任务组。核心功能是计划会议(并管理这些会议的笔记,但这与问题无关。)。计划会议时会通过电子邮件通知用户。如果可以以编程方式将计划中的会议添加到 Google 日历中,那也将非常好。我现在必须为每个计划的会议手动执行此操作。

我已经在developer.google.com上阅读文档和 php 库的 Google 代码页面已经两天了,我发现自己迷失在不同的身份验证方案、帐户类型、密钥等等中,以至于我我开始认为这不是一个预期的用例。

回到我的问题的核心:我需要访问组织的 Google 日历,并且能够发布活动,而无需任何人工交互。这甚至可能吗?如果是这样,我需要在 Google API 控制台中创建哪个帐户(网络应用程序、服务帐户或已安装的应用程序?)?我将如何验证应用程序?我是否需要以某种方式授予应用程序的权限?有没有我可以参考的例子(可能使用不同的 API?)?

从我所见,与 Google 文档中所有示例的关键区别在于,我不想修改当前或最终用户的日历,而是修改相同的日历,无论登录用户如何。(Google api 不会发生用户身份验证,我们推出了自己的。)重定向/用户同意机制对我来说并不完全有用。

这个问题中,提问者试图实现类似的目标。但是没有提供完整的答案。我似乎找不到接受的回复中提到的一些来源。

4

1 回答 1

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;
    }
}
于 2013-05-29T14:05:47.197 回答