iCalendar - Internetový štandard pre prenos udalostí
Úvod
Ak sa riadite presne daným časovým rozvrhom, uloženým napríklad v Google kalendári, alebo Applovském iCal, určite ste sa občas pri importe / exporte či synchronizáciu medzi zariadeniami stretli s podivným súborom s príponou .ics. Tento súbor sa dá otvoriť v akomkoľvek textovom editore a je písaný podľa normy RFC 2445 - Internet Calendaring and Scheduling Core Object Specification (iCalendar). K čomu je to dobrý? Pomocou tohoto súboru môžete komunikovať medzi rôznymi aplikáciami a zároveň zachovať kompatibilitu snáď so všetkými časovım organizéry. Chcete príklad? Máme webovú aplikáciu, pomocou ktorej sa zvoláva pracovný tím na pivko. Aplikácia vie napríklad účtovníctvo, evidenciu dochádzky (poriadok musí byť) a spracovávať .ics súbory. Táto aplikácia mi beží v dvoch inštanciách - jednej pre programátorov, druhé pre grafiky. Raz sa programátori dohodnú, že pôjdu aj s grafiky. Nahrajú teda .ics súbor na adresu grafici.net/pozvete_nas.php - aplikácia skript spracuje z .ics vytiahne všetky potrebné informácie ako kedy, kde, geo-súradnice, poprípade ako dlho dopredu má dať grafikom vedieť, potom ten istý súbor ponúkne grafikom ( ktorí chcú ísť s programátormi na pivko) k stiahnutiu, tí si ho stiahnu do svojich iPhonov a Siri je včas upozorní že majú vyrážať. Bola teda prenesená informácie o udalosti medzi rôznymi platformami a každá jej rozumie.
ICalendar - Čo to teda vie?
Ako už sem písal, iCalendar vie odovzdávať informácie o udalostiach, to ale nie je všetko. Okrem udalostí možno takhle prenášať aj úlohy (to-do), viesť denník, či viesť informácie o voľnom čase. Nevýhodou iCalendar, je, že má pomerne striktné formátovanie a výsledný súbor je pre človeka vcelku neprehľadný. Dnes si ukážeme ako zostaviť jednoduchý "kód" pre prenos udalostí.
V kalendári sa stretneme so známymi dátovými typmi (TEXT, FLOAT), ale jeden je tu predsa len zvláštne: DATE-TIME Nejedná sa o klasický time-stamp ako trebárs v PHP, alebo o unixový čas, ale má nasledujúci formát (používa 24- hodinový záznam): yyyymmddThhmmssZ eq 13.6.2013 10:30 PM GMT sa zapíše: 20130613T223000Z Z na konci udáva že uvedený čas je v GMT. Bez neho sa použije časová zóna nastavená v programe, ktorý ICS spracováva.
Každý .ics musí mať kódovanie UTF-8. Ďalej musí začínať a končiť uvozením kalendára, musí obsahovať verziu použitého iCalendar (obdoba DOCTYPE u HTML, aktuálna verzia je 2.0) a "produkčné identifikátor" - značku podľa ktorej možno jasne definovať kto, alebo aký produkt udalosť vytvoril. Prodid by mal vyzerať zhruba takto: prodid: - ABC Corporation NONSGML My Product // EN Prázdny kalendár vyzerá takhle:
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//DevBook.cz-theAMD//NONSGML icalendar clanek v1.0//cs-CZ END: VCALENDAR
Takýto kalendár však nič nevie. Vnútro kalendára, teda jeho vlastnoti definujú komponenty:
- To-do - úloha
- event - udalosť - tu dnes popíšem
- journal - denník
- Free / Busy - požiadavka na voľný čas
- TimeZone - časová zóna
- Alarm - upomienky
Skúsme ho naplniť nejakou udalosťou:
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
Celkom pribudlo 8 riadkov z toho je 5 veľmi podstatných BEGIN: VEVENT a END: VEVENT - bude pred komponent udalosti UID: jednoznačný identifikátor udalosti - jeho generátor by mal deklarovať náhodnosť, autori iCalendar odporučili tvar, kedy naľavo od zavináča je čas vytvorenia udalosti a napravo je odkaz na autora - jeden autor ťažko vytvoria 2 udalosti v jednej sekunde. DTSTART: čas začiatku udalosti SUMMARY: otrockú preložené zhrnutie. Proste názov udalosti, jej popis, napr. Zubár alebo Zraz Devbooku. Bez týchto riadkov to väčšina programov neprevezme, alebo nedokáže spracovať.
Ďalej je tu množstvo nepovinných parametrov, ako DTEND, ktorý definuje koniec udalosti, LOCATION - textový popis miesta (napr. Čajovňa Zelená mačka), GEO: udáva súradnice vo formáte dvoch float oddelených bodkočiarkou, CLASS ktorý určuje či je udalosť verejne prístupná alebo nie, CATEGORIES, ktorý udáva zaradenie udalosti ... Ďalej sú tu parametre určujúce dokončenia projektu, ku ktorému sa udalosť viaže, opis, prioritu, status udalosti ...
Máme teda udalosť, ktorú nám vezme Outlook, Google Calendar, iCal ... nabudúce sa pozrieme ako na rozdielne časové zóny a ako nastaviť upozornenia.
Odkazy:
Špecifikácia iCalendar (RFC2445)
EDIT: Pretože sa asi nájde pár ľudí ktorí nevedia ako importovať obrázok do kalendára, tak tu je malá nápoveda:
A aby ste videli že to funguje, stiahnite si do svojho kalendára pozvánku na Stretnutie Devbooku v Prahe.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkamiStiahnuté 1654x (415 B)