RSS Feed Generator

Door Bo az, 20 jaar geleden, 13.506x bekeken

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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

// 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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

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

  1. rss-feed-generator

 

Er zijn 7 reacties op 'Rss feed generator'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
- -
- -
20 jaar geleden
 
0 +1 -0 -1
Nice :-)
Kevichill
Kevichill
20 jaar geleden
 
0 +1 -0 -1
Ziet er goed uit ;)
Joren de Wit
Joren de Wit
20 jaar geleden
 
0 +1 -0 -1
Netjes Boaz! Deze gaat tussen de bookmarks, hij komt zeker nog wel een keertje van pas...
Sip
Sip
20 jaar geleden
 
0 +1 -0 -1
Het script doet het over het algemeen goed :). Alleen als er in de link een teken zit zoals een '&' geeft hij een foutmelding. Bijvoorbeeld bij "http://nl.wikipedia.org/w/index.php?title=Hoofdpagina&action=edit"

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
Warning: DOMElement::__construct() [function.DOMElement---construct]: unterminated entity reference action=edit in (....)/rssfeed.php on line 305

Warning: Cannot modify header information - headers already sent by (output started at (...)/rssfeed.php:305) in (...)/rssfeed1.php on line (...)
Bo az
Bo az
20 jaar geleden
 
0 +1 -0 -1
Voor alle velden (muv RssFeedItem::setDescription wat ook met DOMCDATASection kan) geldt dat je van te voren moet escapen. In jou geval zal je dus van &, &amp; moeten maken.
John Tieleman
John Tieleman
15 jaar geleden
 
0 +1 -0 -1
Hallo beste vrienden,

Ik ben dus op zoek naar een script om feeds te maken. Kwam ik hier. Het script gedownload. Helaas....Ik zie alleen maar een witte bladzijde. Verder helemaal niets.
Kan iemand helpen ? Heel graag aub... :-)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jeroen VD
Jeroen VD
15 jaar geleden
 
0 +1 -0 -1
een nieuw topic openen, het is helemaal niet nodig om een 4 jaar oud script omhoog te halen! verwijs dan naar deze pagina.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. rss-feed-generator

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.