今回の制作段階でハマったところ、苦労したところを共有できればと思います。
構造としては以下のような簡単な処理です。
ですが、「iCalcreatorクラス」と「Google カレンダー」に悩まされました。
iCalcreatorクラス
WikiPediaでiCalendarを検索すると、紹介されているPHPクラス?ライブラリ?なんですが、これがはじめは便利だと思ったんですが、使ってみると癖があっていい加減自分でやった方がいいんじゃないかって思っていました。
ただ、いくつかのiCal形式を提供しているWebサイトで利用されているので悪いものではないないと思いますし、実際いろんな処理を渡すことができて便利です。
以下にいくつかの苦労点
- UIDが一意ではない
- DTSTARTなどの時刻指定にハマる
- 解決したくとも、みんなスルッと解決されているのか、
トラブル情報が少なくとも日本語で少ない
UIDが一意ではない
iCalendar形式には1イベントごとに唯一無二のUIDを設定します。
もちろん、iCalcreateorで自動で生成してくれるのですが、実は実行のたび毎回生成するので、UIDが同じイベントでも変わってしまうという問題があります。
これは、もしかしたらiCal.appやOutlook では大丈夫なのかもしれませんが、Googleカレンダーでは正常に認識してくれません。
(これは、あとから気がついたことで、Googleカレンダーがエラーを出力してくれるわけではありません)
実際の処理は
UIDを自分で生成しました。
[イベント開始日時]-[ハッシュ化した開催地]@snicker-jp.info
と、しました。
イベント開始日時だけだと、開催地次第ではかぶることもあります。
あまりにも安易ですが、これであれば他とかぶることはないと思ったのです。
実際のコード部分
DTSTARTなどの時刻指定にハマる
もともと、海外のライブラリなので、説明に時差の説明がないんで TIMEZONEのプロパティは設定しているけど、開始時間などの時刻指定にも時差分の指定が必要でした。