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
Vous désirez créer votre site web ? Je suiswebmaster en normandie sinon vous pouvez consulter mon profil yoolink pour suivre mon actu etmon twitter.

Discussion

Si vous ne pouvez pas lire les lettres, tlchargez ce fichier WEV et coutez les.