中国進出・視察を応援します!

2008年01月16日

googleカレンダーとical形式(PHP)の同期

進捗管理にPHP+MySQLな自前システムを使っているのですが、ごくたまに取りこぼしが。。。(お客さんから連絡が来て、え!忘れてた状態・・・)
これじゃ行けないので、スタッフのスケジュール管理に使っているGoogleカレンダーと同期を取りたいと思って調べてみました。

以下、自分用メモ

結果は、カレンダーの「URLで追加」機能をつかうとすごく簡単にできます。
まずは、
1.Googleカレンダーで読み込めるようにical形式で出力
2.それだけでは日本語が文字化けするので、数値文字参照に変換
3.URLで追加する
だけです。

--------------------------
<?

require('config.php');
require('database.php');

// 現在進行中のリスト
$sql="SELECT MAX(XXX) as pid, name, s_limit from AAAA LEFT JOIN BBBB ON XXX = XXX where XXX IS NOT NULL GROUP BY XX ORDER BY XX";

print <<<EOD
BEGIN:VCALENDAR
PRODID:calender name
VERSION:2.0
METHOD:PUBLISH
CALSCALE:GREGORIAN
X-WR-CALNAME:calender name
X-WR-CALDESC:calender name
X-WR-TIMEZONE:Asia/Tokyo
EOD;

$convmap = array(0x0080, 0xffff, 0, 0xffff);

$conn_id=dbconnect();
$result = dbproc($conn_id,$sql);

while($Data = mysql_fetch_array( $result )){
 $pid = $Data['pid'];
 $name = i18n_convert($Data['name'], "UTF-8", "EUC"); // EUC -> SJIS
 $name = mb_encode_numericentity($name, $convmap, "UTF-8");
 $dtstart = str_replace('-', '', $Data['s_limit']);
 print <<<EOD
BEGIN:VEVENT
UID:$pid
DESCRIPTION:$name
DTSTART:$dtstart
DTEND:$dtstart
SUMMARY:$name
END:VEVENT
 EOD;
}

dbdisconnect($conn_id);
 

print <<<EOD
BEGIN:VTIMEZONE
TZID:Asia/Tokyo
BEGIN:STANDARD
DTSTART:19700101T000000
TZOFFSETFROM:+0900
TZOFFSETTO:+0900
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
EOD;

?>
-----------------------

即席だけどこんなんでOKかな。
あとはG以外のアクセスは規制をつけたい。

カレンダーの同期のタイミングは、まだつかめていないです。
1日に数回更新されるようなので、現状は問題ない感じです。
XXXとかはおきかえてます。

参考にしたところ
phpで数値文字参照
RDFカレンダー -- iCalendarとRSSによるイベント情報の公開と活用
posted by barrel at 13:33| Comment(0) | TrackBack(0) | PC等
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/9560984
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック