Atom a RSS - jak je zobrazit v prohlížeči a ETag

MyEgo.cz

home foto blogy mywindows.cz kontakt

Atom a RSS - jak je zobrazit v prohlížeči a ETag

Technologie 09.06.04

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…


Komentáře

  1. 1 Vilém Málek 11.06.04, 07:06:30
    FB

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

  2. 2 noname 18.06.04, 02:06:30
    FB

    Čau, tak mě napadlo - nechceš udělat v Atomu i příspěvky?