iCalendar - Internetový standard pro přenos událostí

Software 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(i­Calendar). 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/poz­vete_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:20130204T113700Z@itnetwork.cz/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ženo 816x (415 B)

 

  Aktivity (1)

Článek pro vás napsal {MEMBER||144}
Avatar

Jak se ti líbí článek?
Ještě nikdo nehodnotil, buď první!


 


Miniatura
Předchozí článek
Základy Cheat Enginu
Miniatura
Všechny články v sekci
Software

 

 

Komentáře

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Na konci se za END: vloudila mezera, jinak to funguje :) Má Google Calendar nějaké API co tohle žere?

Odpovědět 4.2.2013 20:49
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar

Redaktor
Avatar
:

Opraveno. Hlavní je, že funguje to ke stáhnutí. Čemu říkáš žere? Google Calendar to normálně zpracuje. Pokud to chceš exportovat, tak je to složitější, ale stačí při vytváření/editaci události někoho přizvat -> Google ti pošle e-mail, kde máš icalendar připojenej přímo ve zdrojovým kódu mejlu (MIME Content-Type: text/calendar;) nebo i v příloze jako .ics.
Existujou frameworky, ale vzheledem k tomu, že kalendáře potřebuju vytvářet a ne zpracovávat (to už za mě dělá androidí kalendář :D ), tak sem se APIčkama pro zpracování nějak extra nezabýval.

 
Odpovědět 5.2.2013 9:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.