
De blogs die hier op de site te lezen zijn, zijn samengesteld uit de persoonlijke blogs van mijn collega's. Om direct een nieuwe blog van iemand te kunnen zien, kan een 'abonnement' worden genomen op een zogenaamde RSS feed. Zo'n feed kan in bijvoorbeeld Mozilla Thunderbird worden ingevoerd (
Mozilla Thunderbird - Standards support). Als iemand een nieuwe blog schrijft, verschijnt in Thunderbird een 'mailtje', waarin de inhoud van de nieuwste blog staat.
De RSS-feed van mijn persoonlijke blog is bijvoorbeeld:
http://www.ibuildings.nl/blog/feeds/authors/Jeroen-van-Sluijs.rss
Net zoals Thunderbird RSS-feeds kan inlezen, gebeurt dat ook aan de beheerkant van onze website. Voor verwerken van de informatie uit een feed wordt gebruik gemaakt van Zend_Feed, afkomstig uit het
Zend framework.
Zend Framework
Het Zend framework is een verzameling van handige componenten die kunnen worden gebruikt voor het ontwikkelen van web applicaties in PHP5. Het versienummer van het framework, 0.2.0, verklapt al dat het om een preview gaat. Na downloaden en uitpakken blijkt dat er een onderverdeling is gemaakt in bèta- en alpha-functionaliteit.
De
/library directory bevat files die over het algemeen werken en met een goede kans op succes te gebruiken zijn. Ze kunnen echter nog niet als stabiel worden bestempeld en kunnen ook nog steeds aan wijzigingen onderhevig zijn.
In de 'broed'-directory
/incubator staat functionaliteit die recentelijk is toegevoegd en bij voldoende kwaliteit naar de library directory zal worden verplaatst. Deze bestanden kunnen wel gebruikt worden, maar moeten als uiterst onstabiel beschouwd worden.
Inlezen van een feed
Met het component Zend_Feed (uit de /library map) wordt het gemakkelijk gemaakt om een RSS-feed in te lezen en te verwerken.
Hieronder een code-voorbeeld met mijn RSS-feed. Aan de try-catch constructie is direct te zien dat we met PHP5 te maken hebben: als er een fout optreedt bij het importeren van de feed (bijvoorbeeld een ongeldig URL), wordt deze afgevangen in de 'catch'.
PHP:
<?php
zendimport('Feed');
try
{
$rss_feed = Zend_Feed::import('http://www.ibuildings.nl/blog/feeds/authors/Jeroen-van-Sluijs.rss');
}
catch (Exception $e)
{
echo "Fout bij inlezen rss-feed: {$e->getMessage()}\n";
}
?>
RSS-kanaaldata en blogs opslaan
Een
RSS feed is in het XML formaat opgeslagen. De RSS feed van mijn persoonlijk blog zou er als volgt uit kunnen zien:
CODE:
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Jeroen van Sluijs' blog</title>
<link>http://www.ibuildings.nl/blog/authors/Jeroen-van-Sluijs</link>
<pubDate>Tue, 31 Oct 2006 14:37:40 GMT</pubDate>
<item>
<title>Kijkje in de blog-keuken</title>
<link>http://www.ibuildings.nl/blog/archives/13-Kijkje-in-de-blog-keuken.html</link>
<description>De blogs die hier op de site te lezen zijn, zijn samengesteld door het
combineren van verschillende RSS-feeds...</description>
<pubDate>Tue, 31 Oct 2006 14:37:40 GMT</pubDate>
</item>
</channel>
</rss>
De RSS feed begint met informatie over het RSS kanaal <channel>, met in dit geval als <title>: "Jeroen van Sluijs' blog". Het <link> veld geeft aan waar de blog-post te vinden is en <pubdate> wanneer deze blog gepubliceerd is.
Deze informatie is in je code als volgt uit te lezen:
PHP:
<?php
if ($rss_feed instanceof Zend_Feed_Rss)
{
$rss_kanaal_data = array('title' => $feed->title(),
'link' => $feed->link(),
'pubDate' => $feed->pubDate(),
'blogs' => array()
);
}
?>
In 'blogs' komen de afzonderlijke blogs van mijn blogpagina te staan. Aangezien dit mijn eerste blog is, zal mijn RSS feed 1 blog bevatten (deze blog) met de titel "Kijkje in de blog-keuken".
De code om de informatie per blog uit te lezen en ze toe te voegen aan de RSS-kanaaldata-structuur van hierboven, zou er als volgt uit kunnen zien:
PHP:
<?php
foreach ($rss_feed as $blog)
{
$rss_kanaal_data['blogs'][] = array('title' => $blog->title(),
'link' => $blog->link(),
'description' => $blog->description()
'pubDate' => $blog->pubdate()
);
}
?>
Alle standaard informatie uit de RSS-feed is nu verzameld en kan in onze interne database op een gestructureerde manier worden opgeslagen.
Ten slotte
De opgeslagen informatie kan met ATK prima worden weergegeven in de beheeromgeving van de website. Op die manier kan de beheerder per medewerker-blog bepalen of deze op de algemene blog van de website getoond moet worden. En zie hier het resultaat!
De onderdelen uit het Zend Framework die nodig zijn om te kunnen werken met Zend_Feed zijn standaard opgenomen in ATK (versie > 5.6)