Nasıl dinamik olarak Google Takvim tarafından okunacak bir nik dosyasını yayımlamaya PHP kullanabilirsiniz?

6 Cevap php

PHP iCal üzerinde herhangi bir Google arama sadece phpicalendar ve nasıl ayrıştırmak veya iCal dosyaları okumak kadar getiriyor. Ben sadece benim veritabanından olayları çeker ve nik formatında yazar bir PHP dosyası yazmak istiyorum.

Benim sorunum iki soruya cevap olacağı yerde bulamıyorum değildir:

  1. Vb başlıklar dahil exact iCal biçimi, dosya biçimi, altbilgiler, nedir? Diğer bir deyişle, dosya düzgün Google Takvim, vb tarafından okunacak üzere, tam olarak sahip olmak ne var?
  2. Ben bir. Php uzantısını kullanarak bu dosyayı oluşturmak, nasıl iCal olarak yayınlıyorsunuz? Yeni bir. Ics dosyası yazmak zorunda mı? Ya vb Google Takvim kadar uzun içeriği doğru biçimde olduğu gibi iCal gibi bir. Php dosyasını okuyacaktır? (Içeriği aslında CSS, vb eğer bir style.css.php dosyası gibi çok bir CSS dosyası olarak okunacak)

Tüm bana vermek ya da işvardırt edebilir Herhangi bir yardım büyük takdir edilecektir!

6 Cevap

Google Takvim *.ics-uzantısını (sunucu yeniden bazı URL gerektirir) gerektirmez, bu çok basit olmalıdır.

$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;

Böylece önbelleğe alma, metin kodlama ile ilgili bazı sorunlar olabilir rağmen Yani, aslında bir istemci bir iCalendar dosyasını hizmet konum olduğunu düşünüyorum yapmak için gereken herşey. Ama bu basit kod deneme başlayabilirsiniz.

http://www.kanzaki.com/docs/ical/ eski spec biraz daha okunabilir olan - bir başlangıç ​​noktası olarak yardımcı olur - birçok şey hala aynıdır.

Also on my site, I have 1) some lists of useful resources (see sidebar bottom right) on Ical Spec RFC 5545 and on ical Testing Resources

2) some notes recorded on my journey working with .ics over the last few years. http://icalevents.com/category/notes/ical-events/

in particular, you may find this repeating events 'cheatsheet' useful http://icalevents.com/2447-need-to-know-the-possible-combinations-for-repeating-dates-an-ical-cheatsheet/

Dikkatli kullanım gerekiyor ics alanları:

  • 'Tüm gün' etkinlikleri
  • tarih türleri (timezone, UTC veya yerel 'yüzen') - nb ayrımı anlamak
  • nüks kuralları birlikte çalışabilirlik

Emin böyle dize biçimlendirmek ya da alışkanlık iş yapmak

 $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";

Stefan Gehrig'in cevap ve Dave hiçbiri cevabı (ve mmmshuddup cevabını) hem de ek olarak kişisel deneyimi bir not:

Ben http://severinghaus.org/projects/icv/ de ICS onaylayıcıyı kullanıldığında \ n ve PHP_EOL ikisini de kullanarak doğrulama sorunlarınız

Ben kullanmak zorunda öğrendi \ r \ n düzgün doğrulamak için almak için, yani bu benim çözüm oldu:

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;

Bu benim ayrıştırma hataları durdu ve benim ICS dosyaları düzgün doğrulamak yaptı.

Belki biraz geç, ama burada gerçek spesifikasyonuna bir link bulunuyor. http://tools.ietf.org/html/rfc5545 1

  1. Tam ical biçimi: http://www.ietf.org/rfc/rfc2445.txt
  2. Spec göre, içinde bitmeli. Ics

Edit:. Aslında ben emin değilim - hattı 6186 yılında adlandırma biçimi ICS bir örnek verir, ama aynı zamanda url parametreleri kullanabilirsiniz belirtiyor. Ben çok uzun MIME türü doğru olarak, bu konularda sanmıyorum.

Edit: Örnek wikipedia: 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 tipi sunucu üzerinde yapılandırılır.