Články
Jak vytvořit RSS kanál v PHP
Článek byl doplněn 12. 10. 2008.
Co je to RSS
RSS (Really Simple Syndication) je soubor ve formátu XML, který běžně obsahuje informace o novinkách na webu. Obecněji řečeno, jde o seznamu odkazů s popisem a určitými vlastnostmi. První verze RSS vznikla v roce 1999 a do dnešní doby se tento formát velmi rozšířil a je hojně podporován. V současnosti nejnovější je verze 2.0 (2.01) z roku 2002. Vedle RSS existují i další obdobné formáty jako třeba novější Atom.
RSS se využívá stále více. Hlavní využití je u informačních webů, kde se pomocí RSS oznamují nově vložené články. Ale využití se nalezne i jinde, například nějaký inzertní web takto může šířit nové inzeráty nebo se může tímto způsobem sledovat fórum. RSS se dnes používá i tak, že existují weby, které k sobě stahují RSS kanály velké řady webů a tyto informace, zařazené do kategorií, pak nabízí čtenářům s možností vyhledávání. Příkladem je www.krab.cz.
Malou nevýhodou je zátěž webu, která by ale dnes neměla být problematická. Protože pokud člověk na web přistupuje sám, aby zkontroloval, zda zde není nějaká novinka, tak to učiní třeba jednou dvakrát za den. Kdežto RSS čtečka, stahuje informační soubor pravidelně v zadaném intervalu, který může být velice krátký. I když podle mne nemá cenu nic menšího než jedna hodina. Trochu lépe tuto situaci řeší třeba Google Reader (viz. dále).
Jak RSS používat
Pro přístup k RSS kanálu (RSS feed), tedy souboru RSS na webové adrese, máme několik možností. Jelikož se jedná o formát XML, můžeme jej přímo zobrazit ve webovém prohlížeči. Pokud je přiřazen nějaký stylesheet, tak dostaneme i pěkný přehledný výstup. Ale například Firefox 3 používá svůj vlastní styl, takže vypadá čitelně vše.
Běžnější možností je využití speciálního nástroje na čtení RSS kanálů, tzv. RSS čtečky, který nám sdružuje informace z mnoha webů. Dříve jsem používal Feedreader, ale podobných nástrojů je velké množství. Výhoda použití speciálního nástroje je, že máme na jednom místě nadpisy a krátký popis nových článků na všech webech, které nás zajímají, a otevřeme si již pouze článek, který chceme číst.
Firefox 3 a RSS
V poslední době se začala velmi rozmáhat integrace RSS čtečky přímo do jiného programu. Takže třeba webový prohlížeče Firefox má svoji jednoduchou čtečku. Pokud jsme na stránce, která obsahuje RSS kanál, tak se nám v adresní liště Firefoxu zobrazí oranžová ikona RSS a pomocí ní jej můžeme otevřít. Pak je zde možnost přidat daný kanál do stahování a ten je přístupný přes oblíbené položky.

Microsoft Outlook 2007
Program pro elektronickou poštu MS Outlook má také čtečku RSS. V levém stromu se nachází položka RSS Feeds, kam můžeme přidávat jednotlivé kanály.
Google Reader
Asi poslední možností jsou různé webové čtečky. Jedna z nich je Google Reader, který je ovšem velice vydařený. Jednoduše a přehledně se používá. A výhodou je, že informace z webů stahuje Google pouze jednou a pak je přiděluje všem uživatelům, kteří jsou k tomuto kanálu přihlášeni (a Google tyto informace uchovává centrálně, takže se dostaneme i ke starším verzím).

Formát RSS
Formát RSS je velmi volný, ale poskytuje řadu možností. Já zde popíši pouze hlavní elementy a pro podrobnější informace odkáži na jiné články uvedené na konci textu. Podmínkou správného RSS souboru je, aby vyhovoval specifikaci XML 1.0 a aby obsahoval několik povinných elementů.
Jelikož se jedná o XML dokument, tak první řádek musí být určení typu
<?xml version="1.0" encoding="utf-8"?>
následovat může přiřazení stylesheetu
<?xml-stylesheet type="text/css" href="rss.css"?>
celý obsah dokumentu je uzavřen v kořenovém elementu <rss>, který musí obsahovat atribut version s číslem verze RSS souboru
<rss version="2.0">
kvůli rozšířené kompatibilitě se dnes doporučuje doplnit i informace pro atom, pak element <rss> může vypadat takto
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
uvnitř se nachází element s popisem kanálu
<channel>
a uvnitř následuje libovolný (v RSS 2.0) počet položek, které představují jednotlivé články
<item>
Na výsledný RSS soubor se můžete podívat třeba u mne www.samuraj-cz.com/rss/, zde je použit CSS soubor pro upravení vzhledu, takže je výsledek čitelný. Pokud si zobrazíte zdrojový kód, vidíte příklad RSS.
Povinné elementy
- <channel>
- Informace o celém kanálu. Musí obsahovat tyto elementy:
- <title>
- jméno kanálu, pod kterým uživatelé uvidí vaše RSS. Většinou odpovídá jménu webu
- <link>
- URL k obsahu daného webu
- <description>
- popis RSS kanálu
pokud chceme využít rozšíření kompatibility pro atom, tak musíme do elementu channel doplnit informace o adrese kanálu
<atom:link href="http://www.samuraj-cz.com/rss/" rel="self" type="application/rss+xml" />
Volitelné elementy
Aby uživatel získal co nejkomplexnější informace, tak existuje velká řada dalších nepovinných elementů, které doplňují informace o kanálu.
Element <item>
Jednotlivé informace (články, aktuality ...) jsou popsány v elementu <item>, těchto elementů se uvnitř <channel> může nacházet libovolné množství. Položka obsahuje buď krátký popis a link na celý obsah nebo se může celý obsah nacházet uvnitř a link se nepoužije. Všechny elementy uvnitř jsou nepovinné, ale buď title nebo description se musí použít.
Podle mne jsou nejpoužívanější vnořené elementy:
- <title>
- název položky
- <link>
- URL odkazující na položku (na detail)
- <guid>
- jednoznačný globální identifikátor položky
- <description>
- popis položky (stručný přehled, výtah, obsah)
- <category>
- zařazení položky do kategorie nebo kategorií
- <comments>
- URL na stránku s komentáři k položce
- <pubDate>
- čas vytvoření (zveřejnění) položky
Jak na RSS v PHP
Tvorba RSS souboru v PHP je velmi jednoduchá, většinou bereme data z databáze a dynamicky vytváříme RSS. Je zde pouze jedna malá záludnost a to, že musíme nastavit typ dokumentu na XML (pomocí upravení hlavičky).
Pozn.: dále uváděný kód je psaný schématicky.
Takže náš soubor, například rss.php, začneme upravením hlavičky (přidáme i nastavení datumů kvůli kešování). Příkaz header slouží k nastavování vlastností hlavičky dokumentu, který posíláme klientovi, můžeme tedy změnit náš PHP dokument (který by se vracel jako HTML) na XML (nebo cokoliv jiného).
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Content-Type: text/xml; charset=utf-8');
dále pokračujeme klasickým vkládáním dat
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="rss.css"?>
<rss version="2.0">
<channel>
<title>SAMURAJ-cz.com</title>
<webMaster>samuraj@samuraj-cz.com (Petr Bouška)</webMaster>
...
<lastBuildDate><?php echo gmdate("D, d M Y H:i:s")." GMT"; ?></lastBuildDate>
...
a pak už jen z databáze vytáhneme informace k jednotlivým (posledním) článkům
<?php DBConnect(); // naše funkce, která se připojí k databázi Query(); // dotaz do naší DB, který vrátí požadované články while($rec = getRecord()) { // fce vrací jednotlivé záznamy z DB (třeba mysql_fetch_array) ?> <item> <description><?php echo htmlspecialchars(strip_tags($rec["descr"])); // zobrazujeme jednotlivé položky bez speciálních znaků ?></description> ... </item> <?php } ?>
všechno uzavřeme a je to
</channel> </rss>
Téměř kompletní příklad
Tak pro některé, kterým nestačil předchozí popis, tu máme kompletní příklad, až na databázi.<?php
require_once("db.php");
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Content-Type: text/xml; charset=utf-8');
?>
<?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <title>SAMURAJ-cz.com</title> <link>http://www.samuraj-cz.com/</link>
<webMaster>samuraj@samuraj-cz.com (Petr Bouška)</webMaster> <category>blog, karate, cestování, webdesign, administrace počítačů</category>
<docs>http://backend.userland.com/rss</docs>
<lastBuildDate><?php echo gmdate("D, d M Y H:i:s")." GMT"; ?></lastBuildDate>
<atom:link href="http://www.samuraj-cz.com/rss/" rel="self" type="application/rss+xml" />
<image>
<url>http://www.samuraj-cz.com/graphics/mini_title.gif</url>
<title>SAMURAJ-cz.com</title>
<link>http://www.samuraj-cz.com/</link>
</image>
<?php $sql = /* dotaz do DB */; $res = mysql_query($sql);
while($rec = mysql_fetch_array($res)) { <item> <title><?php echo $rec["title"]; ?></title>
<link>http://www.samuraj-cz.com/<?php echo $rec["link"]; ?>/</link>
<guid>http://www.samuraj-cz.com/<?php echo $rec["link"]; ?>/</guid>
<description><?php echo htmlspecialchars(strip_tags($rec["descr"])); ?>/description> <pubDate><?php echo gmdate("D, d M Y H:i:s", $rec["date"])." GMT"; ?></pubDate>
</item> <?php } ?>
Odkazy
linkuj.cz | zalinkuj.cz | jagg.cz | vybrali.sme.sk | del.icio.us.
Pokud se chcete vyjádřit k tomuto článku, využijte komentáře níže. Pokud chcete poradit s nějakým problémem či diskutovat na nějaké téma, tak použijte fórum.

Komentáře
Super! Dost mi to pomohlo.
Parada, presne takovy navod jsem hledal. Diky
super, moc dík
No ještě by to chtělo napsat na tom konci vcelku a s příkladem proměných
Moc prosím
A taky nějak nechapu, jak mám udělat, abych nastavil typ dokumentu xml a pritom to bylo php ????
odpověď na [5]noname: Tenhle článek nebyl určen pro úplné začátečníky. Počítám, že ten, kdo si dokáže vytvořit dynamický web, tak tyto základní znalosti má. Přesto jsem článek doplnil o komentáře i kompletní příklad.
Díky moc :)