Jak na (šablonu) RSS 2.0 v PHP?

MyEgo.cz

home foto blogy mywindows.cz kontakt

Jak na (šablonu) RSS 2.0 v PHP?

PHP 17.05.04

Posílal jsem včera Jirkovi Lahvičkovi, weblogy.cz, šablonu pro RSS 2.0, aby měl její zapracování na jeho web poněkud rychlejší. A myslím, že by to mohlo pomoci více lidem, takže, uvádím jednoduchý algoritmus pro vytvoření RSS 2.0 šablony v PHP.

Jednotlivé funkce jsou komentované přímo v kódu, takže nepotřebují moc dalšího komentáře:

// exportuje posledních 20 článků jako RSS
function exportRSSS(){
 putHeader();
 $q=mysql_query(
  'select title, body, link, '.
  '       UNIX_TIMESTAMP(datum) as dt '.
  'from items '.
  'order by dt desc '.
  'limit 0,20');
 while ($row=mysql_fetch_object($q)) 
  putItem($row);
 putEnd();
}

A vlastní implementace funkcí:

// hlavička
function putHeader(){
 // nastavení typu aplikace XML
 header ("Content-type: text/xml");
 echo '<?xml version="1.0" encoding="iso-8859-2">';
?>
<rss version="2.0">
<channel>"
<title>Občasný O'blog</title>
<link>https://myego.cz/</link>
<description>Vše o Nucleusu</description>
<language>cs</language>
<generator>Nucleus CMS</generator>
<copyright>(c) Radek Hulan</copyright>
<category>weblog</category>
<image>
 <url>http://hulan.cz/logo.gif</url>
 <title>Občasný O'blog</title>
 <link>https://myego.cz/</link>
</image>
<docs>http://backend.userland.com/rss</docs>
<?php
}


// musíme odstranit XHTML tagy
function encode_xml($data){
 return strip_tags( str_replace(
   '</p>',
   "n",
   str_replace(
     '<br />',
     "n",
     $data))); }
// zapsání jedné položky
function putItem($o) {
 // odstranění tagů..
 $itemtitle=encode_xml($o->title);
 $itembody=encode_xml($o->body);
 $itemlink=$o->link;
 // datum jako Sat, 15 May 2004 01:20:56 +0200
 $itempubdate=strval(date("r",$o->dt));
 echo "<item>";
 echo "<title>$itemtitle</title>";
 echo "<link>$itemlink</link>";
 echo "<description>$itembody</description>";
 echo "<pubDate>$itempubdate</pubDate>";
 echo "</item>";
}


// patička
function putEnd() {
 echo "</channel>";
 echo "</rss>";
}

Pro praktické využité je to samozřejmě více než vhodné "obalit objektem", zejména z důvodu možnosti podědění funkce exportRSS().