PHP - načítání RSS
(článek ze dne 12. 01. 2011)
Je váš web je zastaralý? Nezobrazuje se korektně v mobilu? Dost možná je čas na změnu.
Kompletní analýza SEO a přístupnosti, programování webů na platformě ProcessWire.
Zeptejte se, jak co nejefektivněji situaci napravit a držet krok s vývojem webových technologií.
V tomto případě jsem se raději obrátil tak jako při uploadu obrázků na modifikaci osvědčených řešení. Hledal jsem doporučované externí PHP třídy a našel:
- Last RSS (pouze RSS) a z něho odvozené RSS-okenko (autor kód prošpikoval vlastní reklamou)
- FeedParser (RSS + ATOM)
- MagPieRSS (RSS + ATOM - tohle se mi moc líbilo, jen jsem neměl dost času zjišťovat, zda by nakonec nedokázal to, co bez nastavování zvládl následující)
- SimplePie (RSS + ATOM - vítěz mého odpoledního testování)
Vyzkoušel jsem všechny a nakonec největší počet různorodých kanálů zvládl poslední - SimplePie. Sice i tak nacházím weby, které exportují XML soubor s nimiž si neumí poradit, ale jejich procento je přijatelné. Napsal jsem si funkci, která includuje soubor s parserem a prožene jím soubor, jehož URL tvoří argument této funkce. V modulu článků mi pak stačí pouze tuto funkci včlenit a jako argument načíst ten prvek pole složeného z URL zdrojů, který podle indexu odpovídá příslušnému článku. Parser SimplePie tak nenačítám zbytečně do stránek, kde index odpovídající zobrazené stránce má práznou hodnotu. Ve funkci, která parser volá rovnou využívám CSS tříny ze stylopisu webu. Úpravou funkce pak mohu měnit parametry zobrazení RSS zdroje na všech místech zobrazení najednou.
<?php
function Simplepie($rss) {
if ($rss!='') {
require_once('simplepie/simplepie.inc');
$feed = new SimplePie();
$feed->set_feed_url($rss);
$feed->init();
$feed->handle_content_type();
$pocetodkazu=10;
?>
<div class='header'>
<h2>Z webu: <a href='<?php echo $feed->get_permalink();?>' rel='nofollow'>
<?php echo $feed->get_title();?></a></h2>
<p><?php echo $feed->get_description();?></p>
</div>
<?php
$max = $feed->get_item_quantity($pocetodkazu);
for ($x = 0; $x < $max; $x++):
$item = $feed->get_item($x);
?>
<div class='item' style='border-bottom:1px solid #08A8E4;padding-bottom:5px;'>
<h4><a href='<?php echo $item->get_permalink();?>'>
<?php
echo $item->get_title();?></a></h4>
<p>
<?php echo $item->get_description();?><br>
<small>Článek ze dne <?php echo $item->get_date('j.n.Y | G.i');
?>
</small>
</p>
</div>
<?php
endfor;
}
}
?>