PHP icalでGoogle検索を行うと、phpicalendarが表示され、IN icalファイルを解析または読み取る方法がわかります。イベントをプルするPHP私のデータベースとそれらをical形式で書き出します。
私の問題は、2つの質問に答える場所が見つからないことです。
あなたがすべて私に与えることができるか、私を指すことができるどんな助けも大歓迎されます!!!
これは、Googleカレンダーが*.ics
-拡張子(サーバーでのURL書き換えが必要)を必要としない場合、非常に簡単です。
$ical = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:" . md5(uniqid(mt_Rand(), true)) . "@yourhost.test
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR";
//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=calendar.ics');
echo $ical;
exit;
キャッシング、テキストエンコーディングなどに関する問題がある場合でも、クライアントにiCalendarファイルを提供していると思わせるために必要なのは、これだけです。ただし、この単純なコードを試してみることができます。
Stefan Gehrigの回答とDave Noneの回答(およびmmmshuddupの回答)に加えて、個人的な経験のメモ:
ICSバリデーターを http://severinghaus.org/projects/icv/
適切に検証するために\ r\nを使用する必要があることを知ったので、これが私の解決策でした:
function dateToCal($timestamp) {
return date('Ymd\Tgis\Z', $timestamp);
}
function escapeString($string) {
return preg_replace('/([\,;])/','\\\$1', $string);
}
$eol = "\r\n";
$load = "BEGIN:VCALENDAR" . $eol .
"VERSION:2.0" . $eol .
"PRODID:-//project/author//NONSGML v1.0//EN" . $eol .
"CALSCALE:GREGORIAN" . $eol .
"BEGIN:VEVENT" . $eol .
"DTEND:" . dateToCal($end) . $eol .
"UID:" . $id . $eol .
"DTSTAMP:" . dateToCal(time()) . $eol .
"DESCRIPTION:" . htmlspecialchars($title) . $eol .
"URL;VALUE=URI:" . htmlspecialchars($url) . $eol .
"SUMMARY:" . htmlspecialchars($description) . $eol .
"DTSTART:" . dateToCal($start) . $eol .
"END:VEVENT" . $eol .
"END:VCALENDAR";
$filename="Event-".$id;
// Set the headers
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename=' . $filename);
// Dump load
echo $load;
これにより解析エラーが停止し、ICSファイルが適切に検証されました。
Icsファイルを簡単に作成できる優れた eluceo/ical パッケージがあります。
ドキュメントの使用例を次に示します。
// 1. Create new calendar
$vCalendar = new \Eluceo\iCal\Component\Calendar('www.example.com');
// 2. Create an event
$vEvent = new \Eluceo\iCal\Component\Event();
$vEvent->setDtStart(new \DateTime('2012-12-24'));
$vEvent->setDtEnd(new \DateTime('2012-12-24'));
$vEvent->setNoTime(true);
$vEvent->setSummary('Christmas');
// Adding Timezone (optional)
$vEvent->setUseTimezone(true);
// 3. Add event to calendar
$vCalendar->addComponent($vEvent);
// 4. Set headers
header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="cal.ics"');
// 5. Output
echo $vCalendar->render();
少し遅れるかもしれませんが、実際の仕様へのリンクはこちらです。 http://tools.ietf.org/html/rfc55451
http://www.kanzaki.com/docs/ical/ には、古い仕様の読みやすいバージョンがあります。それは出発点として役立ちます-多くのことはまだ同じです。
また my site で、私は
.ics
ここ数年にわたって。特に、これは イベント 'チートシート'を繰り返す が有用であることがわかります。.ics
注意深い取り扱いが必要なエリア:
必ずこのように文字列をフォーマットしてください。そうしないと動作しません
$content = "BEGIN:VCALENDAR\n".
"VERSION:2.0\n".
"PRODID:-//hacksw/handcal//NONSGML v1.0//EN\n".
"BEGIN:VEVENT\n".
"UID:".uniqid()."\n".
"DTSTAMP:".$time."\n".
"DTSTART:".$time."\n".
"DTEND:".$time."\n".
"SUMMARY:".$summary."\n".
"END:VEVENT\n".
"END:VCALENDAR";
編集:実際にはわからない-6186行目は.ics命名形式の例を示していますが、urlパラメーターを使用できることも示しています。 MIMEタイプが正しい限り、それは重要ではないと思います。
編集:ウィキペディアの例: http://en.wikipedia.org/wiki/ICalendar
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR
MIMEタイプはサーバーで構成されます。