forum

www.SAMURAJ-cz.com 

20.11.2008 Nikola kategorie: VÍTEJTE V MÉM SVĚTĚ

Články

Jak vytvořit RSS kanál v PHP

Úterý, 04.04.2006 16:52 | Samuraj | webdesign
Dnes již naprosto běžnou součástí informačních webů je existence RSS kanálu. Zde se dočtete základní popis co to RSS je, jaký je jeho formát a jak jednoduše doplnit svoje stránky v PHP o RSS kanál.

Č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.

Firefox RSS Reader

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

Google Reader

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

zobrazeno: 5120krát | Komentáře [7]

Pokud se Vám článek líbil, tak mne potěšíte, když uložíte odkaz na některý server:
  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

  1. [1] 63+1

    Super! Dost mi to pomohlo.;-)

    Neděle, 01.06.2008 14:55 | odpovědět
  2. [2] Petr

    Parada, presne takovy navod jsem hledal. Diky

    Pátek, 20.06.2008 09:36 | odpovědět
  3. [3]  

    super, moc dík

    Neděle, 05.10.2008 09:33 | odpovědět
  4. [4] noname

    No ještě by to chtělo napsat na tom konci vcelku a s příkladem proměných :-) Moc prosím

    Pátek, 07.11.2008 16:35 | odpovědět
  5. [5] noname

    A taky nějak nechapu, jak mám udělat, abych nastavil typ dokumentu xml a pritom to bylo php ????

    Pátek, 07.11.2008 17:00 | odpovědět
  6. [6] Samuraj

    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.

    Neděle, 09.11.2008 13:01 | odpovědět
  7. [7] noname

    Díky moc :)

    Středa, 12.11.2008 17:40 | odpovědět
Přidat komentář

Vložit tag: strong em link

Vložit smajlík: :-) ;-) :-( :-O


Ochrana proti SPAMu, zdejte následující čtyři znaky image code

Nápověda:
  • maximální délka komentáře je 2000 znaků
  • HTML tagy nejsou povoleny (budou odstraněny), použít se mohou pouze speciální tagy (jsou uvedeny nad vstupním polem)
  • nový řádek (ENTER) ukončí odstavec a začne nový
  • pokud odpovídáte na jiný komentář, vložte na začátek odstavce (řádku) číslo komentáře v hranatých závorkách