PHPでicsファイル形式をダウンロードできるようにする
2022/09/10
ある案件で、icsファイルをダウンロードさせたいという要望があり、使ったライブラリ関係での情報が全然なかったのでメモしておきます。
PHPのフレームワークはCodeigniter3を利用しています。
icsファイル生成には、Zap Calendar iCalendar Libraryを利用しました。
※このライブラリを選定した理由は、クライアントからの指定があったというだけです。
Zap Calendar iCalendar Libraryには、composerでインストールするんではないようなので、ダウンロードしてきたものを適当なディレクトに保存しておきます。
// iCalendarライブラリをインポート
require_once '【path_to_iCalender_directory】/zapcallib.php';
// インスタンス生成
$icalObj = new ZCiCal();
// イベント生成スタート
$eventObj = new ZCiCalNode('VEVENT', $icalObj->curnode);
// タイトル
$eventObj->addNode(new ZCiCalDataNode('SUMMARY:' . 'タイトル'));
// 開始時間
$eventObj->addNode(new ZCiCalDataNode('DTSTART:' . ZCiCal::fromSqlDateTime('2022-9-10-12:00:00')));
// 終了時間
$eventObj->addNode(new ZCiCalDataNode('DTEND:' . ZCiCal::fromSqlDateTime('2022-9-10-13:00:00')));
// 内容
$eventObj->addNode(new ZCiCalDataNode('DESCRIPTION:' . '内容を入力'));
// 場所
$eventObj->addNode(new ZCiCalDataNode('LOCATION:' . '場所'));
// UID
$eventObj->addNode(new ZCiCalDataNode('UID:' . 'ランダムなuid')); <= 必要ないかも。同じUIDで作成したicsファイルでも別の予定としてoutlookでは取り込めました。
// ダウンロード
$this->load->helper('download'); // codeigniterのhelper
force_download('ファイル名' . 'ics', $icalObj->export(), 'text/calendar');
内容自体はすごく簡単なんですが、ライブラリの公式ドキュメントの方で、DESCRIPTIONやLOCATIONの説明などが見つけられず、icsファイルのフォーマットを確認したりしたので、情報がまとまっている方がいいだろうと思い、残しておきます。
ダウンロードのところは各フレームワークに従ってもらえればいいので、もしほかのクライアントから要望があった場合は、出力内容さえ決めてもらえればサクッと実装できそうですね。