Mettre à jour un flux rss déja existant

Note : Ces scripts sont pour le format RSS 2.0

Version simple sans utilisation du dom

Cette version n'utilise pas le dom, elle à le mérite d'être simple à comprendre et a mettre en place mais n'ai pas réellement optimisé et propre.

php
function updateRss($myFeed,$myTitle,$myLink,$myDesc) {
	//on converti les entrées en utf8
	$myttile=utf8_encode($myTitle);
	$myLink=utf8_encode($myLink);
	$myDesc=utf8_encode($myDesc);
	//on créé le noeud
	$newNode="<item>
		        <title>".$myTitle."</title>
        		<link>".$myLink."</link>
       	 		<description>".$myDesc."</description>
        		<pubDate>".date('r')."</pubDate>
      			</item>
	";
	//on récupère le contenu du fichier
	$fp = fopen ($myFeed, "r+");
	$content = fread ($fp, filesize($myFeed));
	fclose ($fp);
 
	$position=stripos($content,"<item>");
 
	if(!$position) {
		$position=stripos($content,"</channel>");
	}
	//on récupère le header du rss
	$headerRss=substr($content,0,$position);
	//on récupère le reste du rss
	$resteRss=substr($content,$position,strlen($content));
	//on ajoute le noeud au rss
	$myRss=$headerRss.$newNode.$resteRss;
	//on enregistre le fichier
	$fp = fopen ($myFeed, "w");
	fwrite ($fp, $myRss);
	fclose ($fp);
}

Voici comme l'utiliser: updateRss(“chemin-de-mon-rss.xml”,”Titre de ma news”,”http://www.url-de-ma-news.com”,”Je met ici la description de ma news”);

Si vous utilisez php4 la fonction stripos ne sera pas reconnus il faut donc la réecrire .

php
function stripos($haystack, $needle){
    return strpos($haystack, stristr( $haystack, $needle ));
}

Version utilisant DOM XML (php4)

Voici une version plus propre utilisant la classe DOM XML de php 4

php
function updateRss($myFeed,$myTitle,$myLink,$myDesc) {
	$dom = domxml_open_file($myFeed);
	//on récupère le noeud channel
	$channelList=$dom->get_elements_by_tagname("channel");
	$channel=$channelList[0];
	//echo $channel->get_content();
 
	//on créé un nouvel item
	$item=$dom->create_element("item");	
 
	//on créé le noeud titre
	$title=$dom->create_element("title");
	$item->append_child($title);
	$text = $dom->create_text_node($myTitle);
	$text = $title->append_child($text);
 
	//on créé le noeud link
	$link=$dom->create_element("link");
	$item->append_child($link);
	$text = $dom->create_text_node($myLink);
	$text = $link->append_child($text);
 
	//on créé le noeud description
	$description=$dom->create_element("description");
	$item->append_child($description);
	$text = $dom->create_text_node($myDesc);
	$text = $description->append_child($text);
 
	//on créé le noeud pubDate
	$pubDate=$dom->create_element("pubDate");
	$item->append_child($pubDate);
	$text = $dom->create_text_node(date('r'));
	$text = $pubDate->append_child($text);
 
	//on ajoute le nouvel item au xml
	$channel->append_child($item);
	//on sauvegarde le xml dans le fichier
	$dom->dump_file($myFeed, false, true);
}

Version DOM (php5)

Cette version utilise la classe DOM ajoutée avec PHP5

php
function updateRss($myFeed,$myTitle,$myLink,$myDesc) {
	$dom = new DomDocument('1.0', 'UTF-8');
	$dom->preserveWhiteSpace = FALSE;
	$dom->formatOutput = TRUE;
	$dom->load($myFeed);
 
	//on récupère le noeud channel
	$channelList=$dom->getElementsByTagName("channel");
	$channel=$channelList->item(0);
	//on créé un nouvel item
 
	$item=$dom->createElement("item");
 
	//on créé le noeud titre
	$title=$dom->createElement("title",$myTitle);
	//on créé le noeud link
	$link=$dom->createElement("link",$myLink);
	//on créé le noeud description
	$description=$dom->createElement("description",$myDesc);
	//on créé le noeud pubDate
	$pubDate=$dom->createElement("pubDate",date('r'));
 
	//on insère les noeud dans le noeud item
	$item->appendChild($title);
	$item->appendChild($link);
	$item->appendChild($description);
	$item->appendChild($pubDate);
	//on ajoute le nouvel item au xml
	$channel->appendChild($item);
	//on sauvegarde le xml dans une variable
	$myXML=$dom->saveXML();
	//on met à jour le fichier
	$fp = fopen ($myFeed, "w");
	fwrite ($fp, $myXML);
	fclose ($fp);
}
Vous pouvez aussi utiliser la version pour php4 en incluant le fichier présent ici : domxml php4 vers dom php5

Valider un flux RSS

Vous pouvez utiliser le validateur du W3C : http://validator.w3.org/feed/check.cgi


16/11/2007 15:35 -

ManiT4c
Gérant et chef de projet de l'agence web Op'art, je suis également webmaster freelance. Retrouvez moi également sur twitter.