3

v3 API を使用して Google カレンダーを地元の非営利団体の既存のアプリケーションと統合する方法を見つけようとしています。

意図は次のとおりです。私たちの組織には、訪問者とアクティブなボランティアの両方が購読したり、独自のカレンダーに表示したりできる一般公開の Google カレンダー (Google アカウントを使用) があります。私たちは、タスク フォースを作成および管理できる単純な管理 Web アプリケーション (PHP で記述) を開発中です。中心的な機能は、会議の計画です (そして、これらの会議のメモを管理しますが、これは質問には関係ありません)。会議が計画されると、ユーザーは電子メールで通知されます。また、予定されている会議をプログラムで Google カレンダーに追加できると非常に便利です。予定されている会議ごとに手動でこれを行う必要があります。

developers.google.comのドキュメントと php ライブラリの Google Code ページを 2 日間読んでいますが、さまざまな認証スキーム、アカウントの種類、キーなどに迷って、これは意図した使用例ではないと考え始めています。

私の質問の核心に到達するには、組織の Google カレンダーにアクセスし、人間の介入なしでイベントを投稿できるようにする必要があります。これは可能ですか?その場合、Google API コンソールでどのアカウントを作成する必要がありますか (Web アプリ、サービス アカウント、またはインストール済みアプリ?)。アプリケーションをどのように認証しますか? 何らかの形でアプリケーションに権利を付与する必要がありますか? どこかに参照できる例はありますか (おそらく別の 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 に答える