RSS Feed Generator
Alweer? Ja alweer, maar deze keer als uitbreiding op PHP DOM.
Bekijk het script: http://php.n3rd.nl/index.php/source/rssfeed.php
Download het script: http://php.n3rd.nl/index.php/download/rssfeed.php
Deze RSS Feed Generator is door zowel mensen die een eenvoudige feed, als door mensen die een uitgebreide feed op hun site willen te gebruiken. Ik heb de generator geschreven aan de hand van de specificaties op http://www.rssboard.org/rss-specification en de W3 feed validator op http://validator.w3.org/feed/ en heb deze voorzien van alle standaard elementen. De generator is geschreven als uitbreiding op de in PHP5 ingebouwde DOM functies.
Om te beginnen een eenvoudig voorbeeld:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ini_set('display_errors', true);
error_reporting(E_ALL);
require_once 'rssfeed.php';
$oRss = new RssFeed('test title', 'http://www.test.com', 'test omschrijving');
$oRss->setWebMaster('[email protected] (Boaz den Besten)');
$oRss->setLastBuildDate(new DateTime());
$oRssItem = $oRss->createFeedItem();
$oRssItem->setTitle('Item title');
$oRssItem->setLink('http://www.test.com/item/123/');
$oRssItem->setDescription('Een beschrijving van het nieuws item...'));
$oRssItem->setAuthor('[email protected] (Boaz den Besten)');
header('Content-Type: application/rss+xml');
echo $oRss->saveXML();
?>
Als je een RSS feed gaat valideren op http://validator.w3.org/feed/ zal je opmerken dat er een aantal tips gegeven worden die niet voorkomen in de standaard RSS 2.0 specificatie. Zo wordt het bijvoorbeeld aanbevolen een dc:creator element te gebruiken in plaats van het standaard author element. Dit om te voorkomen dat spambots er met je e-mail adres vandoor gaan (een author element moet namelijk verplicht een e-mail adres bevatten). Omdat dit niet bij de standaard specificatie hoort heb ik besloten dit niet in de klasse in te bouwen, maar omdat RssFeed een uit breiding is op DOMDocument en RssFeedItem een uitbreiding op DOMElement, is er niets wat je er van weerhoud deze handmatig toe te voegen.
2
3
4
5
6
7
8
9
10
11
12
// extra: dc:creator element
$oRss->getElementsByTagName('rss')->item(0)->setAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/');
$oRssItem->appendChild($oRss->createElement('dc:creator', 'Boaz den Besten'));
// extra: atom:link element
$atomLink = $oRss->getElementsByTagName('channel')->item(0)->appendChild($oRss->createElementNS('http://www.w3.org/2005/Atom', 'atom:link'));
$atomLink->setAttribute('href', 'http://www.test.com/feed/rss.xml');
$atomLink->setAttribute('rel', 'self');
?>
In de meeste elementen kan standaard alleen tekst worden opgegeven door het gebruik van het datatype string, maar voor de methode RssFeedItem::setDescription heb ik een uitzondering gemaakt. Deze methode kan namelijk ook om het een instantie van DOMCDATASection. Dit zorgt er voor dat je HTML kan toevoegen in de beschrijving die dan weer door RSS Feed Readers als http://reader.google.com weergegeven zal worden.
2
3
4
5
$oRssItem->setDescription($oRss->createCDATASection('<p>Een beschrijving van het nieuws item...</p>'));
?>
De RssFeed en RssFeedItem klassen zullen zo nu en dan een RssFeedException gooien als je een regel van de RSS specificatie overtreed. Helaas heb ik niet voor alle regels en eisen controles ingebouwd, zo moet je er zelf op toe zien dat de author, webMaster en managingEditor elementen een e-mail adres in een van de juiste formaten bevatten. Een andere regel is dat een item minstens een title of een description element moet bevatten. De andere vereisten zal je wel achterkomen als je gaat valideren of de specificatie eens door leest.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
try {
// Hier kan je dus veilig de feed in elkaar zetten...
} catch(RssFeedException $e) {
} catch(DOMException $e) {
} catch(Exception $e) {
}
?>
Gesponsorde koppelingen
PHP script bestanden
Er zijn 7 reacties op 'Rss feed generator'
Om te reageren heb je een account nodig en je moet ingelogd zijn.
PHP hulp
0 seconden vanaf nu