Tvorba RSS v PHP
O RSS vyšlo na Intervalu už několik článků. Tentokrát si můžete přečíst, jak se dá RSS generovat pomocí PHP. Při tvorbě budeme využívat třídu c_xml_generator, kterou jsme si popsali v článku o tvorbě XML výstupu v PHP – aby bylo snadnější RSS implementovat do různých projektů, vytvoříme si generátor RSS jako objekt.
Vkládání dat
Vlastní data se ukládají do proměnné chanel
, což je pole obsahující jednotlivé kanály. Každý kanál je asociativním polem, obsahujícím parametry kanálu, jako jsou například title
, description
či link
, které už obsahují konkrétní data. Může také obsahovat prvek image
, který obsahuje jednotlivé parametry obrázku. A samozřejmě prvek item
, který obsahuje pole s jednotlivýmy položkami RSS kanálu.
Protože přímý přístup k vlastnostem třídy je v rozporu se zásadami OOP a také abyste se nemuseli zabývat strukturou uložení dat, obsahuje třída dvě metody pro vládaní dat.
Vytvoření kanálu
Každé RSS může obsahovat více kanálů, tato třída to také umožňuje. Nový kanál vytvoříte pomocí metody add_chanel
:
function add_chanel($name, $param) {
$this->chanel[$name] = $param;
$this->chanel[$name][‚.content‘] = array();
}
Metoda obsahuje dva parametry. První určuje vnitřní označení kanálu, které se nedostane do výsledného RSS, ale používá se při vkládání jednotlivých položek typu item
. Tento parametr je datového typu int
nebo string
. Druhý parametr je typu array
a obsahuje parametry kanálu. Pole musí obsahovat prvky title
, description
, language
a link
, protože tyto parametry jsou povinné pro definici kanálu. Dále může obsahovat nepovinné parametry, jako jsou image
nebo copyright
. V případě prvků image
nebo textInput
je obsah prvku typu array
s dalšímy parametry. V opačném případě je nutné použít skalárních typů.
Níže vidíte ukázku kódu pro vložení kanálu, v níž předpokládáme, že proměnná $rss
obsahuje instanci třídy c_rss_generátor
:
$rss->add_chanel(‚interval‘,
array(
‚title’=>’Interval.cz‘,
‚description’=>’Denně o tvorbě webu a e-komerci‘,
‚link’=>’http://www.interval.cz‘,
‚language’=>’cs‘,
‚image’=>array(
‚title’=>’Interval logo‘,
‚url’=>’http://www.interval.cz/images/logo.gif‘,
‚link’=>’http://www.interval.cz‘,
‚width’=>’60‘,
‚height’=>’60‘,
‚description’=>’Interval – o webu a e-komerci‘,
)
)
);
Vložení položky item
do kanálu
Pro tuto operaci použijeme metodu add_item
:
function add_item($chanel_name, $param) {
$this->chanel[$chanel_name][‚.item‘][] = $param;
}
První parametr $chanel_name
obsahuje vnitřní označení kanálu, zadejte tedy stejnou hodnotu jako při vytváření kanálu. Parametr $param
je typu array
a obsahuje parametry kanálu.
Následuje ukázka kódu pro vložení položky do kanálu, v níž opět předpokládáme, že proměnná $rss
obsahuje instanci třídy c_rss_generátor
:
$rss->add_item(‚interval‘,
array(
‚title’=>’Název článku‘,
‚description’=>’Popis článku, pár slov na úvod, jen pár, ne zbytečně moc‘,
‚link’=>’http://www.interval.cz/clanek_1.html‘,
)
);
Generování RSS kódu
Generování RSS kódu provádí metoda create_rss()
. Metoda nemá žádné parametry a jejím výsledkem je kompletní kód RSS kanálu.
function create_rss() {
// vytvoří a nastaví instanci třídy c_xml_generator
$xg = new c_xml_generator();
$xg->xml_encoding = $this->rss_encoding;
// vytvoří nejvyšší xml element rss a nastaí verzi rss
$x_rss = $xg->add_node(0, ‚rss‘,
array(‚version’=>$this->rss_version)
);
// postupně prochází pole $chanel
foreach($this->chanel as $chanel) {
// vloží element chanel
$x_chanel = $xg->add_node($x_rss, ‚chanel‘);
// prochází jednotlivé parametry kanálu
foreach($chanel as $param_name => $param_value) {
// pokud je parametr ‚image‘ nebo ‚textInput‘ projde a vloží jeho parametry
if (($param_name == ‚image‘) || ($param_name == ‚textInput‘)) {
$x_image = $xg->add_node($x_chanel, $param_name);
foreach($param_value as $image_param_name => $image_param_value) {
$xg->add_node_cdata($x_image, $image_param_name, $image_param_value);
};
// pokud je parametr ‚item‘ – jednotliv0 položky kanálu, projde a vloží je
} elseif ($param_name == ‚.item‘) {
foreach($chanel[‚.item‘] as $item) {
// pro každou položku vyvtoří element item
$x_item = $xg->add_node($x_chanel, ‚item‘);
// projde a vloží jednotlivé parametry
foreach($item as $item_param_name => $item_param_value) {
// pokud je parametr ‚image‘ nebo ‚textInput‘ projde a vloží jeho parametry
if (($item_param_name == ‚image‘) || ($item_param_name == ‚textInput‘)) {
$x_image = $xg->add_node($x_item, $item_param_name);
foreach($item_param_value as $image_param_name => $image_param_value) {
$xg->add_node_cdata($x_image, $image_param_name, $image_param_value);
};
// pokud jde o jiný parametr vloží jeho hodnotu
} else {
$xg->add_node_cdata($x_item, $item_param_name ,$item_param_value);
};
};
};
// pokud jde o jiný parametr vloží jeho hodnotu
} else {
$xg->add_node_cdata($x_chanel, $param_name ,$param_value);
};
};
};
// nakonec vygeneruje a vrátí výsledné XML
return($xg->create_xml());
}
Pro generování XML používáme třídu c_xml_generátor
, o které si můžete přečíst v článku Tvorba XML výstupu v PHP.
Ukázka použití
Příklad ukazuje kompletní kód, potřebný k tvorbě RSS kanálu. Ukázkový skript a třídy pro tvorbu RSS si můžete také stáhnout a testovat je lokálně na svých počítačích nebo použít ve svých aplikacích.
<?php
// vložení potřebných tříd
include ‚rss_generator.class.php‘;
include ‚xml_generator.class.php‘;
include ‚xmysql.class.php‘;
// pomocí hlavičky nastvíme content-type¨na XML
header(‚Content-type: text/xml‘);
// vytvoření a nastavení třídy pro databázi
$sql = new tMysql;
$sql->dbName = ‚TEST‘;
$sql->dbHost = ‚localhost‘;
$sql->dbUser= “;
$sql->dbPassword= “;
// připojení k db
$sql->connect();
// provedení sql dotazu
$sql->query(‚rss‘,
‚SELECT id, author, title, description, pub_time ‚.
‚FROM articles ORDER BY pub_time DESC‘
);
// vytvoření instance třídy c_rss_generátor
$rss = new c_rss_generator;
// vytvoření kanálu
$rss->add_chanel(‚jedenmujweb‘,
array(
‚title’=>’neco.nekde.cz‘,
‚description’=>’Denně o kočikách, pejscích, myších a krysách.‘,
‚link’=>’http://neco.nekde.cz‘,
‚language’=>’cs‘,
‚image’=>array(
‚title’=>’neco.nekde.cz logo‘,
‚url’=>’http://neco.nekde.cz/images/logo.gif‘,
‚link’=>’http://neco.nekde.cz‘,
‚width’=>’60‘,
‚height’=>’60‘,
‚description’=>’Denně o kočikách, pejscích, myších a krysách.‘,
)
)
);
// procházení výsledků dotazu a vkládání do kanálu
while($row = $sql->fetch_assoc(‚rss‘)) {
$rss->add_item(‚jedenmujweb‘,
array(
‚title‘ => $row[‚title‘],
‚description‘ => $row[‚description‘],
‚author‘ => $row[‚author‘],
‚link‘ => ‚http://neco.nekde.cz/read.php?id=’$row[‚id‘],
// prevod z timestampu na požadovaný fromát
‚pubDate‘ => gmdate(‚D, d M Y H:i:s‘, $row[‚pub_time‘]).‘ GMT‘
)
);
};
// vytvoření rss a odeslání na výstup
echo $rss->create_rss();
?>
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Nové AI modely od Open AI a Google
22. května 2024 -
Aktualizujete svoji .NET webovou aplikaci? Může se hodit app_offline.htm
10. července 2024 -
Fandíme českým sportovcům a rozdáváme hosting ZDARMA!
26. července 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024