IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

PHP: Generování RSS z databáze pomocí DOMDocument

Kromě šablon se k vytváření RSS používá i přímý zápis do výstupu. To přináší několik problémů v podobě potřeby ošetření vstupu, zejména pokud příspěvky pochází od různých autorů. PHP však obsahuje třídu DOMDocument, která vše potřebné vyřídí za nás.

Nejprve si připravím data do databáze. K tomuto účelu jsem si z místního RSS vytáhl dva příspěvky, které jsem uložil do jednoduché tabulky SQLite

BEGIN TRANSACTION;
CREATE TABLE clanek(id integer primary key autoincrement,
    title text, link text, pubDate text, description text, creator text);
INSERT INTO "clanek" VALUES(1,'Diskuze: ITnetwork - RSS',
    '/diskuzni-forum-islandsoft-pochvaly-napady-nazory/rss-508aec4a06fd1#goto16342',
    'Fri, 26 Oct 2012 22:02:18 +0200',
    'Všiml jsem si, že se dnes změnilo RSS. Udivilo mě, jak se má vlastní čtečka n..',
    'Kit');
INSERT INTO "clanek" VALUES(2,'Inkubátor - BattleZombies',
    '/diskuzni-forum-inkubator-ohlaste-nove-a-rozpracovane-projekty/battlezombies-504a4a2831a1a#goto16341',
    'Fri, 26 Oct 2012 21:18:28 +0200',
    'Myslím, že demu přikládáš moc velkou obsahovou hodnotu. O moc víc, n...',
    'Kuny');
COMMIT;

Záměrně jsem vytvořil tabulku přizpůsobenou RSS, aby příklad nevypadal příliš složitě. Rovněž datum jsem ponechal v textovém tvaru, i když pro interní uložení by se jistě hodil jiný datový typ.

Příklad jsem nedělal modulárně, snad mi to puristé odpustí.

<?php

// Nejprve otevřu databázi.
$db=new PDO('sqlite:rss.sqlite');

// vytvořím objekt $dom, od kterého budu vytvářet všechny jeho potomky
$dom=new DOMDocument("1.0","UTF-8");

// zde je vytvoření kořenového elementu s potřebnými atributy
$rss=$dom->createElement('rss');
$rss->setAttribute('version','2.0');
$rss->setAttribute('xmlns:content', "http://purl.org/rss/1.0/modules/content/");
$rss->setAttribute('xmlns:wfw', "http://wellformedweb.org/CommentAPI/");
$rss->setAttribute('xmlns:dc', "http://purl.org/dc/elements/1.1/");

// kořenový element obsahuje element "channel", ve kterém se nachází záhlaví RSS
$channel=$dom->createElement('channel');
$channel->appendChild($dom->createElement('title','itnetwork'));
$channel->appendChild($dom->createElement('link','http://www.itnetwork.cz/'));
$channel->appendChild($dom->createElement('description','ITnetwork - Programátorská sociální síť a materiálová základna'));

// součástí záhlaví je i logo
$image=$dom->createElement('image');
$image->appendChild($dom->createElement('title','itnetwork'));
$image->appendChild($dom->createElement('link','http://www.itnetwork.cz/'));
$image->appendChild($dom->createElement('url','http://www.itnetwork.cz/logo.png'));
$channel->appendChild($image);

// nyní vyberu články. Dotaz je nutné přizpůsobik konkrétní struktuře databáze
$result=$db->query("SELECT * FROM clanek");
foreach($result->fetchAll(PDO::FETCH_CLASS) as $row) {
  $item=$dom->createElement('item');
  $item->appendChild($dom->createElement('title',htmlspecialchars($row->title)));
  $item->appendChild($dom->createElement('link',htmlspecialchars($row->link)));
  $item->appendChild($dom->createElement('pubDate',$row->pubDate));
  $item->appendChild($dom->createElement('description',htmlspecialchars($row->description)));
  $item->appendChild($dom->createElement('dc:creator',htmlspecialchars($row->creator)));
  $channel->appendChild($item);
}

// a nakonec to vše spojím do jednoho stromu a vypíšu na výstup
$rss->appendChild($channel);
$dom->appendChild($rss);
header('Content-Type: text/xml');
echo $dom->saveXML();

Uvedený příklad je velmi jednoduchý a přesto vytvoří podobné RSS, jako generátor na ITnetwork.cz. Úplně zde chybí ošetření chyb, které je jistě nezbytné, ale ukázka by se snadno mohla stát nepřehlednou.

Pozorný čtenář si jistě všiml, že zde není žádná sekce CDATA, která je u originálního RSS. Třída DOMDocument provádí potřebná ošetření vstupního textu, proto taková sekce není nutná. V případě potřeby však je možné ji vytvořit.


Galerie

Program byl vytvořen v roce 2012.

 

Všechny články v sekci
Zdrojákoviště PHP - soubory
Program pro vás napsal Kit
Avatar
Uživatelské hodnocení:
4 hlasů
Jsem spokojeným uživatelem operačních systémů založených na linuxovém jádře. Zejména openSUSE a Ubuntu. Pro psaní veškerých textů a programů používám vynikající textový editor Vim. Aplikace se snažím psát vždy v tom nejvhodnějším programovacím jazyk...
Aktivity