Android、Java、Web系、Linux、マラソン等の備忘録

2011/07/10

PHPからGoogleカレンダー操作2:Event(予定)を投稿する

1 件のコメント

前回はPHPの環境を整えてカレンダーリストを取得するもの↓でしたが、

・PHPからGoogleカレンダー操作1:Zend Framework(Zend Gdata)の環境を整える | たかいわ屋
http://takaiwa.net/archives/545

今回はカレンダーへ予定を追加してみたいと思います。前回同様、

・Data API Developer's Guide: PHP - Google Calendar APIs and Tools - Google Code
http://code.google.com/intl/ja/apis/calendar/data/1.0/developers_guide_php.html

こちらを参考にします。
Event(予定)に設定する項目は、「Creating Events」辺りに説明があります。

  • Title:イベントの見出し
  • When :イベントの期間。省略するととりあえず現在時刻に追加されるようです
  • Author:イベントを作成したユーザ
  • Content:イベントの詳細(説明)
  • EventStatus:そのイベントが確認済み (confirmed) なのか仮の予定 (tentative) なのか、 あるいは取り消された (canceled) を表す
  • Hidden:カレンダー上で非公開にする
  • Transparency:イベントをユーザの予定表に反映させるかどうかを指定
  • WebContent:イベント内で外部のコンテンツへのリンクを指定
  • Where:イベントの場所を指定し
  • Visibility:イベントを公開リスト上で非表示


WS000152 

とりあえず、赤字の部分だけ設定してEventを投稿してみたいと思います。





サンプルコード




<?php
require_once 'Zend/Loader.php';

Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

echo "hello create Event<br>";

$user = 'hogehoge@gmail.com'; // ユーザ名
$pass = 'password'; // パスワード
$service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
// ログイン
$client = Zend_Gdata_ClientLogin::getHttpClient($user,$pass,$service);
$gdataCal = new Zend_Gdata_Calendar($client);
// 新規イベントの作成
$newEvent = $gdataCal->newEventEntry();
// イベントの見出し
$newEvent->title = $gdataCal->newTitle("test5 event タイトル");
// イベントの期間
$startDate = '2011-07-09'; // 開始日時
$startTime = '08:16'; // 開始時刻
$endDate = '2011-07-09'; // 終了日時
$endTime = '09:16'; // 終了時刻
$tzOffset = '+09'; // タイムゾーンを日本に設定

$when = $gdataCal->newWhen();
$when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
$when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
$newEvent->when = array($when);
// イベントの説明
$newEvent->content = $gdataCal->newContent("test 説明");
// イベントの場所
$newEvent->where = array($gdataCal->newWhere("test 場所"));
// イベントをカレンダーへ反映
$createdEvent = $gdataCal->insertEvent($newEvent);
// 追加したイベントのID
echo $createdEvent->id->text;
?>








実行結果




このPHPを実行すると、




[実行結果]


WS000156


 
イベントのIDがhttp://www.google.com/calendar~と返ってきます。




このソースで注意する点というか、引っかかった点はイベントの期間のところで、午前だったので8:16と設定してたらエラーが出ました。上記ソースのように0埋めが必要です→ 08:16


で、Googleカレンダーの方は、




[ブラウザで見たGoogleカレンダー]


WS000157



のように反映されてます。







別のカレンダーへEventを投稿








上記のサンプルソースでは、特にカレンダーを指定していないので、デフォルトのhogehogeカレンダー追加されます。insertEventの引数に、POST先URIを指定すればfugafugaカレンダーへの投稿も可能です。そのURIは




http://www.google.com/calendar/feeds/○○○○○/private/full


○○○○の部分へ、カレンダーIDを記述します。カレンダーIDは、上図のブラウザ画面で、マイカレンダーの[設定] – [fugafugaカレンダー] のカレンダーのアドレスの所へ記述されています。



WS000158




先ほどのソースへ直打ちするとこんな感じの修正になりますが、



$uri = "http://www.google.com/calendar/feeds/".
"fugafugaid@group.calendar.google.com".
"/private/full";
$createdEvent = $gdataCal->insertEvent($newEvent, $uri);


こういったシーンは、あまりないと思いますので、「fugafugaカレンダー」という名前だけ分かっているという前提で直打ちのソースを書き換えると。



$postCalName ="fugafugaカレンダー";

$calListFeed = $gdataCal->getCalendarListFeed();

foreach ($calListFeed as $calendar) {
// if文で止めても良いけど、とりあえず連想配列として格納
$calList[$calendar->title->text] = $calendar->content->src;
}

$uri = $calList[$postCalName];

$createdEvent = $gdataCal->insertEvent($newEvent, $uri);


これで、「fugafugaカレンダー」という値を与えるだけで、fugafugaカレンダーへの投稿が可能となります。



[ブラウザで見たGoogleカレンダー]


WS000159 
※10:16~11:16にfugafugaカレンダーへ追加

1 件のコメント :

  1. [...] PHPからGoogleカレンダー操作2:Event(予定)を投稿する | 僻地プログラマーの開発日記 – デフォルトのカレンダー以外に投稿する方法 [...]

    返信削除