Č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 } ?> </channel> </rss>
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 :)
Musím poděkovat za parádní a jednoduchý příklad. Jenom by jsem potřeboval poradit ohledně hlaviček. Soubor se spustí jako jako rss.php a dále se tváří jako PHP. Neusetále mi naráží na <?xml ver... Nevíte, kde dělám chybu? Předem díky za odpověď
odpověď na [8]farradox: Typ souboru si prohlížeč nebere z přípony, ale z návratové hlavičky. Proto musíme nastavit tuto hlavičku na XML. Všechny změny hlavičky se musí provést dříve, než vznikne jakýkoliv výstup (v tomto případě určitě hned na začátku, s tím souvisí i to, mít jako první znaky souboru <?php a poslední ?>, před ani za nesmí být ani mezery). Změnu hlavičky provádí příkaz:
header('Content-Type: text/xml; charset=utf-8');
odpověď na [9]Samuraj: Ano, hlavičky mám přímo na začátku souboru rss.php. Tento soubor samořejmě nespouštím přes include();
<?php
header('Content-Type: text/xml; charset=utf-8');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
?>
<?xml version="1.0" encoding="utf-8"?>
u posleního řádku mi PHP vyhodí Parse error
odpověď na [10]Farradox: Když použiju ten váš kousek kódu, tak to u mě funguje, i když to následně vyhodí XML Parsing Error.
Pokud vám to dává nějakou PHP chybu, jako Fatal error, tak se neprovede změna hlavičky, netuším proč. Zkusil bych zapnout v PHP zobrazování všech chyb.
Ok, díky moc. Aspoň vím, kde hledat chybu. Ještě to zkusím na hostingu a uvidím.
tak jak to dopadlo? mě to dělá stejnou chybu, asi se mi také nezmění změna hlavičky, vždy to natazí v php na <?xml version="1.0"
odpověď na [13]methew: To je opravdu zvláštní. Pošlete mi kdyžtak váš soubor na samuraj@samuraj-cz.com a já se podívám, jestli je OK. Že by to mohlo být serverem se mě moc nezdá.
ten php server bere začátek toho kódu jako script php <?xml version="1.0" encoding="utf-8"?>
a proto si myslí že jde o php a vypíše vám chybu že za <? je nějaký divný tag tagže stačí tenhle řádek jednoduše upravit a by vipadal taghle - <?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?>
odpověď na [15]donLukas: omlouvám se za pravopisné chyby
odpověď na [15]donLukas: Tak tohle mě vůbec nenapadlo. Doporučil bych v php.ini nastavit
short_open_tag = Off
pak musí být otevírací tag <?php a ne pouze <?. Je to maximálně doporučované nastavení a většinou bývá i defaultní.
Super návod, teď už vím jak na RSS. RSS, to byl můj jediný nedostatek
Zdarek lidi, prvne dekuji za super navod:) A co se týče chybi v řádku <?xml version="1.0" encoding="utf-8"?>, stačí aby se ten řádek pro phpko trošku upravil:
<?php echo '<'.'?xml version="1.0" encoding="utf-8"?'.'>'." " ?>
Mělo by to jít, mě to problém odstranilo..:)
Díky, to jsem hledal.
Možná Vám můj dotaz příjde hloupý, ale bohužel php neovládám a z článku jsem zcela úplně nepochopil pár věcí. Byl bych vděčný, kdyby mi někdo ze zkušených poradil:
1) Jak mám vkládat novinky do RSS? Když aktualizuju své www stránky, tak mám do RSS souboru zkopírovat to, co jsem zaktualizoval, nebo si to RSS soubor z toho webu "vytáhne" nějak automaticky? Našel jsem totiž tuto šablonu pro <item> s php vsuvkami:
<item>
<title><?php echo $rec["title"]; ?></title>
<link>http://www.maturita20007.wz.cz… echo $rec["link"]; ?>/</link>
<guid>http://www.maturita20007.wz.cz… echo $rec["link"]; ?>/</guid>
<description><?php echo htmlspecialchars(strip_tags($rec["des… ?>/description>
<pubDate><?php echo gmdate("D, d M Y H:i:s", $rec["date"])." GMT"; ?></pubDate>
</item>
To znamená, že bych měl ty php vsuvky "title", "link", "descr" a "date" nějakým způsobem zakomponovat na webu do toku html stránky a RSS si to pak vytáhne?
2) Prosím o objasnění použití tagu <guid>. Nepochopil jsem z popisu jeho použití. Děkuji za příklad.
Mockrát děkuji za objasňující odpovědi.
Hezký den.
odpověď na [21]Miroslav: RSS je primárně pro dynamický web. To znamená, že máme články v DB a jak generujeme jejich normální zobrazení, tak generujeme i RSS soubor. Ty hodnoty $rec jsou právě brány z DB. Pokud nemáte dynamický web, tak musíte vše vytvářet ručně a linky a popis zadávat přímo do RSS souboru.
GUID je nějaký řetězec, který musí být unikátní. Podle něj se pozná, že když se stáhne nová verze RSS, tak některé položky již existují a tedy se nepřidají u klienta.
Poraďte začátečníkovi.
Nějak mi není jasné, jestli v souboru RSS mají být jen novinky nebo kompletí obsah webu. A jak potom čtečka pozná, co je novinka? Nebude ten RSS soubor moc dlohý, když mám na webu cca 1000 významných článků?
Chci přidat RSS na své stránky.
1. Mám udělat RSS soubor pro všechno, co tam už je?
Nebo pouze přidávané věci?
2. Když něco přidám na stránky, musím to přidat do RSS souboru. To je mi jasné.
V RSS souboru ale byly věci z minula, mám je smazat, dát jinam (do archivu, nebo co je nejrozumnější)?
Jak nejlépe pojmenovávat historii RSS souborů.
3. Vlastně totéž, co v minulém dotazu, ale jak se mám zachovat při významné změně v obsahu souboru?
odpověď na [23]Michal: Jak jsem se snažil pospat, použití RSS záleží na vás. Původně (a stále převážně) bylo používáno pro upozornění na novinky. Většinou se do RSS vkládá pouze nadpis a stručný popis článku. Rozhodně bych ale RSS nedělal ručně, ale použil pouze u dynamického webu.
Také se běžně v RSS exportuje pouze posledních x (10 či 20) novinek. Některé čtečky také načítají pouze určitý počet záznamů.
muže mi někdo poradit jak mám vygenerovát kod do RSS
mam stranka www.pujcky-uvery.snadno.eu
<?php echo $_SERVER['REMOTE_ADDR'];?>
Vratim se jeste k prvnimu dotazu od odpověď na [23]Michal: Michal:
"1. Mám udělat RSS soubor pro všechno, co tam už je?
Nebo pouze přidávané věci?"
Kdyz chci spustit RSS kanal poprve a naplnit ctecky celym obsahem (napr.1000 clanku, protoze jsou vsechny aktualni nebo napr. eshop zbozi nabidka, ktera je vzdy aktualni) nikoliv poslednich 10 nebo 20 jak doporucujete, tak je to vhodne reseni z hlediska omezeni poctu zaznamu, ktere nektere ctecky dokazi cist? Nebo co by jste poradil jak v takove situaci ? Predem diky.
GDI je hlavní světový registrátor .ws (WebSite) domén – stránek. Proto je tato příležitost ojedinělá! na www.entriws.ws
diky za navod, pomohlo
Ahoj, potreboval by som trochu poradiť s tvorbou rss kanálu, som docela začiatočník no robím svoje prvé rss ono v podstate vytvorený rss kanál už mám ale problém je v tom že nieviem ako ho spraviť tak aby sa mi tam automaticky pridávaly nové články z webu, treba niečo pridať aj do HTML kódu stránky ?
tu je môj rss kanál: http://aviationews.szm.com/rss.xml
články ktoré tam sú, sú pridaná ztial len ručne priamo v xml dokumente rss.
prípadne by mi veľmi pomohlo keby mi niekto pošlete aj hotové riešenie web stránky s rss kanálom teda ich zdroj na E-mail freeflashes@gmail.com
Ďky, inak super web aj návod je dobrý len to automatické pridávanie článkov neviem.
Mám velký dotaz dělal jsme to podel tohoto návodu na stránky svoje ale vůbec nevím co stím ...
odpověď na [30]Filip: Ten xml se generuje z databáze, jak popsal v článku výše samuraj. Pokud si přidáš na stránkách přes nějakou administraci článek a potom si vyžádáš generovaný XML dokument, musíš tam ten článek mít. Pokud ho negeneruješ z databáze a máš ho statický... předělej si web do databáze. Jinak doporučuju nastudovat nějaký tutoriál. Tohle jsou základy (ne funkčnost, ale teorie jak to vlastně funguje).
Zdravím, měl bych jednu otazecku, lze vytvorit script, ktery do sebe natahne rekneme treba 10 rss feedu a udela z toho jeden celkovy, ktery se me pak bude promitat na webu?
Dekuji
Ahoj, chci se zeptat sestavil jsem si RSS ale kdyz na nej najedu nelibi se mu radek <?xml ..... ?> a kdyz ho dam pryc tak mi funguje ale nenacte polozky.. nevim proc mu to vadi..
odpověď na [34]Petr: vyřešeno dal jsem prostě celý kód do <?php ... ?>
ale když se pokouším přečíst RSS píše mi že nemám žádné položky
Potřebuji použít v rss znak \"&\" (v url adrese) ale když ho tam vložím hlásí to chybu EntityRef: expecting \';\'
Ahoj,
díky moc za tyhle kvalitní články co píšeš. O PHP se zajímám vcelku dost, ale českých kvalitních článků o nich zase tak moc není. Myslím že PHP je jeden z nejlépe uplatitelných jazyků. a to v kombinaci s nějakou dobrou prací (já sem hledal tady http://timone.cz// , takže jestli někdo hledá, tak ať zkusí štěstí zde) je úplně v pohodě
Skvělé jen bych měl pár připomínek za while ti chybí ?>
a potom tam nemáš na konci </channel> </rss> , ale to si každý zvládne dopsat po pár chybovkách + jsem musel ještě poupravit xml definici na <?php echo '<'.'?xml version="1.0" encoding="utf-8"?'.'>'." " ?> Jinak paráda opravdu stručné a dá se to zařídit celkem rychle, tak ti jsem moc vděčný za tento návod.
Bohužel se tu vyskytuje jedna zásadní chyba. Ta hlavička má vypadat takto:
<?php
header("Content-Type: application/xhtml+xml; charset=utf-8");
?>
Hledáte naléhavou půjčku? Mám pro tebe dobrou zprávu! Nabízíme půjčky od 5 000 EUR do 30 milionů EUR s 2% úrokovou sazbou za rok. Úvěry na rozvoj podnikání, osobní půjčky, půjčky na auto atd. Jsme certifikovaní, důvěryhodní, spolehliví, efektivní, rychlí a dynamičtí, kontaktujte nás na e-mailu: dannyoscar6@gmail.com
Díky za srozumitelný návod, moc mi pomohl!
Zde je případně fajn doplnění www.atlaso.cz/co-je-rss-feed/