iCalendar - Internetový standard pro přenos událostí
Úvod
Pokud se řídíte přesně daným časovým rozvrhem, uloženým například v Google kalendáři, nebo Applovském iCalu, určitě ste se občas při importu/exportu či synchronizaci mezi zařízeními setkali s podivným souborem s příponou .ics. Tento soubor se dá otevřít v jakémkoliv textovém editoru a je psán podle normy RFC 2445 - Internet Calendaring and Scheduling Core Object Specification(iCalendar). K čemu je to dobrý? Pomocí tohohle souboru můžete komunikovat mezi různými aplikacemi a zároveň zachovat kompatibilitu snad se všemi časovími organizéry. Chcete příklad? Máme webovou aplikaci, pomocí které se svolává pracovní tým na pivko. Aplikace umí například účetnictví, evidenci docházky (řád musí být) a zpracovávat .ics soubory. Tato aplikace mi běží ve dvou instancích - jedné pro programátory, druhé pro grafiky. Jednou se programátoři dohodnou, že půjdou i s grafiky. Nahrají tedy .ics soubor na adresu grafici.net/pozvete_nas.php - aplikace skript zpracuje z .ics vytáhne všechny potřebné informace jako kdy, kde, geo-souřadnice, popřípadě jak dlouho dopředu má dát grafikům vědět, pak ten samý soubor nabídne grafikům (kteří chtějí jít s programátory na pivko) ke stažení, ti si jej stáhnou do svých iPhonů a Siri je včas upozorní že mají vyrážet. Byla tedy přenesena informace o události mezi různými platformami a každá jí rozumí.
icalendar - Co to teda umí?
Jak už sem psal, icalendar umí předávat informace o událostech, to ale není všechno. Kromě událostí lze takhle přenášet i úkoly (to-do), vést deník, či vést informace o volném čase. Nevýhodou icalendaru, je, že má poměrně striktní formátování a výsledný soubor je pro člověka vcelku nepřehledný. Dnes si ukážeme jak sestavit jednoduchý "kód" pro přenos událostí.
V kalendáři se setkáme se známými datovými typy(TEXT, FLOAT), ale jeden je zde přeci jenom zvláštní: DATE-TIME Nejedná se o klasický time-stamp jako třeba v PHP, nebo o unixový čas, ale má následující formát(používá 24-hodinový záznam): yyyymmddThhmmssZ e.q 13.6.2013 10:30PM UTC se zapíše: 20130613T223000Z Z na konci udává že uvedený čas je v UTC. Bez něj se použije časová zóna nastavená v programu, který ICS zpracovává.
Každý .ics musí mít kódování UTF-8. Dále musí začínat a končit uvozením kalendáře, musí obsahovat verzi použitého icalendaru (obdoba DOCTYPE u HTML, aktuální verze je 2.0) a "produkční identifikátor" - značku podle které lze jasně definovat kdo, nebo jaký produkt událost vytvořil. PRODID by měl vypadat zhruba takhle: PRODID:-ABC CorporationNONSGML My Product//EN Prázdný kalendář vypadá takhle:
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//DevBook.cz-theAMD//NONSGML icalendar clanek v1.0//cs-CZ END: VCALENDAR
Takovýhle kalendář však nic neumí. Vnitřek kalendáře, tedy jeho vlastnoti definují komponenty:
- To-do - úkol
- event - událost - tu dnes popíšu
- journal - deník
- Free/Busy - požadavek na volný čas
- TimeZone - časová zóna
- Alarm - upomínky
Zkusme ho naplnit nějakou událostí:
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//DevBook.cz-theAMD//NONSGML icalendar clanek v1.0//cs-CZ BEGIN:VEVENT UID:[email protected]/zed/144 DTSTAMP:20130204T103700 DTSTART:20130222T103000 DTEND:20130222T221959Z SUMMARY:Programátorský pifko LOCATION:Hospůdka Za Rohem END:VEVENT END:VCALENDAR
Celkem přibylo 8 řádků z toho je 5 velice podstatných BEGIN:VEVENT a END:VEVENT - uvozuje komponentu události UID:jednoznačný identifikátor události - jeho generátor by měl deklarovat náhodnost, autoři icalendaru doporučili tvar, kdy nalevo od zavináče je čas vytvoření události a napravo je odkaz na autora - jeden autor těžko vytvoří 2 události v jedné vteřině. DTSTART: čas začátku události SUMMARY: Otrocky přeloženo shrnutí. Prostě název události, její popis, např. Zubař nebo Sraz Devbooku. Bez těchto řádků to většina programů nepřevezme, nebo nedokáže zpracovat.
Dále je tady spousta nepovinných parametrů, jako DTEND, který definuje konec události, LOCATION - textový popis místa(např. Čajovna Zelená kočka), GEO: udává souřadnice ve formátu dvou floatů oddělených středníkem, CLASS který určuje zda je událost veřejně přístupná či nikoliv, CATEGORIES, který udává zařazení události... Dál jsou tady parametry určující dokončenost projektu, ke kterému se událost váže, popis, prioritu, status události...
Máme tedy událost, kterou nám vezme OutLook, Google Calendar, iCal... příště se podíváme jak na rozdílné časové zóny a jak nastavit upozornění.
Odkazy:
Specifikace icalendar (RFC2445)
EDIT: Protože se asi najde pár lidí kteří neví jak importovat obrázek
do kalendáře, tak zde je malá nápověda:
A aby jste viděli že to funguje, stáhněte si do svého kalendáře pozvánku na Setkání Devbooku v Praze.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkamiStaženo 1724x (415 B)