Google Calendar にiCalサービスを作る

f:id:tenman:20090509111539j:image:w400


wikipedia:iCalendar

iCalendar(アイカレンダー)とはPIMソフトなどで使われるスケジュールの標準フォーマット。


googleCalendarや、outlookなどが対応しています。

このフォーマットを使う事で、日時や時間など、イベントの細かな情報を一気に受け渡す事ができます。

そのWEBでの例に、イベントキャストなどがあります。


誰でも自由に、サービスを構築できるようになるのでとても魅力的ですが、
「うまくやる」ことは簡単ではありません。


googleCalendarでは文字化けが発生するためです。

その他、プラットフォームにより、改行等でエラーになる等、実際にやろうとすると、問題が付きまといます。


そのような中でも、うまくやっているところもあります。


文字化けが発生しないサービスの中には、特別な文字を使っているものもあります。(livedoor 天気予報)

16進の数値文字列参照といわれるもの

日本語を変換する方法がなかなか見つかりません。phpで試行錯誤しながら、何とか変換用コードが出来たので、公開します。

//10進に変換します。

  $str= mb_convert_encoding($str, 'HTML-ENTITIES', 'UTF-8');

//16進に変換します。

  preg_match_all(" |(&#)([0-9]+)(;) |u",$str,$regs,PREG_SET_ORDER);

  foreach($regs as $dohex){

    $str= str_replace($dohex[0] , "&#x".dechex($dohex[2]).';', $str);
  }

  $str= trim(str_replace("\n","\r\n",$str));

  file_put_contents("data.ics",$str);

>とか、<等、は別途に処理してくださいね。

ヘッダをつける必要があれば、sample

header("Content-Type: text/Calendar");
header("Content-Disposition: inline; filename=calendar.ics");

出来上がったサンプル