前回は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:イベントを公開リスト上で非表示
とりあえず、赤字の部分だけ設定して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を実行すると、
[実行結果]
イベントのIDがhttp://www.google.com/calendar~と返ってきます。
このソースで注意する点というか、引っかかった点はイベントの期間のところで、午前だったので8:16と設定してたらエラーが出ました。上記ソースのように0埋めが必要です→ 08:16
で、Googleカレンダーの方は、
[ブラウザで見たGoogleカレンダー]
のように反映されてます。
別のカレンダーへEventを投稿
上記のサンプルソースでは、特にカレンダーを指定していないので、デフォルトのhogehogeカレンダーへ追加されます。insertEventの引数に、POST先URIを指定すればfugafugaカレンダーへの投稿も可能です。そのURIは
http://www.google.com/calendar/feeds/○○○○○/private/full
○○○○の部分へ、カレンダーIDを記述します。カレンダーIDは、上図のブラウザ画面で、マイカレンダーの[設定] – [fugafugaカレンダー] のカレンダーのアドレスの所へ記述されています。
先ほどのソースへ直打ちするとこんな感じの修正になりますが、
$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カレンダー]
※10:16~11:16にfugafugaカレンダーへ追加
[...] PHPからGoogleカレンダー操作2:Event(予定)を投稿する | 僻地プログラマーの開発日記 – デフォルトのカレンダー以外に投稿する方法 [...]
返信削除