Atom a RSS - jak je zobrazit v prohlížeči a ETag
To, že RSS feedy (verze 0.9x, 1.0 a 2.0) a Atom 0.3 umí RSS a Atom čtečky je jasné. Nicméně, není od věci linkovat těmto zdrojům i CSS stylesheet, a umožnit jejich zobrazení v normálním prohlížeči (a v stylesheety podporujících čtečkách).
V případě moderního Atom 0.3 feedu včetně informace pro uživatele, které jej informuje o faktu, že tento zdroj není primárně určen pro prohlížeč, ale pro čtečku.
Jak ale na zobrazení v browseru? Prvním problémem je samozřejmě fakt, že MSIE 6.0 SP1 nezvládá MIME typ application/xhtml+xml. Podporuje jen text/html. Různými pokusy jsem dospěl k tomu, že jediný MIME typ, na kterém se prohlížeče shodnou, a který podporují i čtečky, je pro RSS a Atom: text/xml!
Tento MIME typ posílám jako:
header('Content-Type: text/xml')
… pro MSIE 6.0, Operu 7.50 i Firefox 0.8, i pro čtečky, a vypadá to, že vše funguje jak má.
Ještě jedna zajímavá věc tu je, pokud pošlu:
header('Content-Type: text/xml; charset=iso-8859-2');
… tak to MSIE 6.0 nezvládne a nedělá nic. Opera a Firefox fungují. Pokud oddělám charset, a dám jej jako první deklaraci v XML, tedy:
<?xml version="1.0" encoding="iso-8859-2" standalone="yes"?>
… tak je vše v pořádku, včetně kódování, ve všech testovaných browserech a RSS / Atom čtečkách.
Druhou věcí, kterou jsem udělal pro všechny feedy je to, že je neposílám znovu, pokud header ETag je shodný s MD5 (hash key feedu), který má již čtečka načten. Šetří to mraky přenosového pásma a dotazů do databáze (u těch instalací, které nepoužívají NP_Cache; a u čteček, které to podporují). Šlo by testovat ještě Last-Modified, ale… není to nutné.
Jak na ETag? Třeba následovně (příklad je pro Atom 0.3 feed):
// get feed into $feed ob_start(); // select and render skin selectSkin('atom'); selector(); $feed = ob_get_contents(); ob_end_clean(); // create ETAG (hash of feed) $eTag = '"'.md5($feed).'"'; header('Etag: '.$eTag); // compare Etag to what we got if ($eTag == serverVar('HTTP_IF_NONE_MATCH')) { header("HTTP/1.0 304 Not Modified"); header('Content-Length: 0'); else // dump feed echo $feed;
Můžete si to otestovat zde:
Feed | URI |
xml-rss.php | RSS 0.91 perex |
xml-rss.php?full=yes | RSS 0.91 celé články |
xml-rss1.php | RSS 1.0 perex |
xml-rss1.php?full=yes | RSS 1.0 celé články |
xml-rss2.php | RSS 2.0 perex |
xml-rss2.php?full=yes | RSS 2.0 celé články |
action.php?name=RSSBlog | RSS 2.0 komentářů |
atom.php | Atom 0.3 feed (!) |
Připravil jsem rovněž kompletní balíček těchto feedů pro Nucleus XE 3.0 FINAL. Instalaci proveďte následovně:
- překopírujte na FTP veškeré přiložené soubory.
- proveďte import skinů, s přepsáním stávajících.
- pokud používáte ExtraSkin, vložte obsah rss.inc souboru do ExtraSkinu nazvaného rss.
- de-instalujte a opět instalujte pluginy NP_RSSBlog, NP_XMLTools a NP_RSSItem.
Download: https://myego.cz/other/atomrss.zip (27 kB).
Veškeré feedy jsou samozřejmě plně validní a mají připojen CSS stylesheet :) Doufám, že Atom 0.3 nabídne více a více webů, RSS fakt přestává stačit…
Malá informace zdarma - přestože je většina webdesignérů přesvědčena o opaku, správným MIME typem pro XML feedy typu RSS skutečně je "text/xml". I selskou logikou lze dojít k poznání, že XML není v tomto případě žádnou aplikací, ale jednoduchým textovým souborem ;-)
Čau, tak mě napadlo - nechceš udělat v Atomu i příspěvky?