Page 1 sur 1

Flux RSS

Posté : 28 févr. 2008, 17:43
par kweb
Bonjour,
j'ai récupéré sur le net une fonction qui permet d'écrire des donnée venant d'une BD dans un fichier XML.
<?php

function RSS() {

	// En-tête du flux RSS version 2.0
	$xml = '<?xml version="1.0" encoding="ISO-8859-1"?><rss version="2.0">';
	$xml .= '<channel><title>Henkel Grand Chelem</title><link>http://www.xxxx.com/</link>';
	$xml .= '<description>xxxxxx volley</description><language>fr-fr</language><copyright>Copyright 2008 xxxxx.com</copyright>';

	// Ajout de la date actuelle de publication (suivant la DTD RSS)
	$xml .= '<lastBuildDate>'.date("D, d M Y H:i:s").' GMT</lastBuildDate>'; 

	// En-tête suite et fin
	$xml .= '<docs>http://www.stervinou.com/projets/rss/</docs><category>xxxx</category><managingEditor>[email protected]</managingEditor><webMaster>[email protected]</webMaster>';
	$xml .= '<ttl>60</ttl><image><title>monsite.com</title><url>http://www.monsite.com/logo.gif</url><link>http://www.monsite.com/</link></image>';

	// paramêtres de connection à votre base de donnée
	mysql_connect($host,$login,$password);
	mysql_select_db($bdd);

	// Sélection des 10 premières news triées de la plus récente à la plus ancienne
	$Result = mysql_query("SELECT * FROM news ORDER BY date_news DESC LIMIT 0,10");

	// Creation des items : titre + lien + description + date de publication
	while($val=mysql_fetch_array($Result)) {
		$xml .= '<item>';
		$xml .= '<title>'.$val["titre_news"].'</title>';
		$xml .= '<link>http://www.henkel-grandchelem.com/index.php?id='.$val["id_news"].'</link>';
		$xml .= '<description>'.$val["texte_news"].'</description>';
		$xml .= '<pubDate>'.date("D, d M Y H:i:s",$val["date_news"]).' GMT</pubDate>';
		$xml .= '</item>';
	}

	// Déconnexion
	mysql_close();

	// Fin du flux
	$xml .="</channel></rss>";

	// Ecriture du flux dans un fichier xml
	$fp = fopen("rss.xml", 'w+');
	      fputs($fp, $xml);
	fclose($fp);

}
?>
j'ai créer un fichier XML sur le serveur en chmod 777.

mais je ne sais pas comment faire pour testé ma fonction et voir si l'enregistrement ce fais bien dans le fichier ?

merci de votre aide

Posté : 28 févr. 2008, 17:54
par Ryle
hmm... supprime le fichier et fait un simple appel à ta fonction depuis ton script ou depuis un autre script qui incluera celui-ci. Ex :
<?php 
  include ("ton_script_avec_ta_fonction_rss.php");
  RSS();
?>
Tu verras bien si elle le créer correctement :) (voir la doc de fopen() lorsque l'on ouvre un fichier en mode "w+")

Et histoire de gagner du temps, pour que ta fonction puisse se connecter à ta base de données, il faut qu'elle puisse accéder aux variables $host,$login,$password,... qui sont des variables externes à ta fonction. Il te faut donc déclarer celles-ci comme étant des variables globales, sinon ta fonction les cherchera en local et ne les trouvant pas, génèrera une erreur :) :
function machin() {
  global $host,$login,$password;
  ...
}

Posté : 28 févr. 2008, 18:53
par kweb
Ok, merci
tout fonctionne....

Par contre une autre question, lorsque je jette un coup d'oeil à mon fichier XML, les 10 news qu'il à incrémenté dedans son tous dans une et seul balise <item> ?

Il ne faut pas que chaque news soit dans une balise <item> ? pour que la lecture du flux rss fonctionne correctement

Je sais que cette question ne devrais pas ce trouvé dans ce forum mais plutôt dans le forum XML.
désoler et merci encore

Posté : 28 févr. 2008, 18:57
par Ryle
Effectivement, tu ne devrais avoir qu'un seul élément par balise <item> ... chose que le code donné ci-dessus fait très bien, puisque pour chaque enregistrement de ta requête tu vas créer une nouvelle balise <item>
   // Creation des items : titre + lien + description + date de publication 
    while($val=mysql_fetch_array($Result)) { 
        $xml .= '<item>'; 
        $xml .= '<title>'.$val["titre_news"].'</title>'; 
        $xml .= '<link>http://www.henkel-grandchelem.com/index.php?id='.$val["id_news"].'</link>'; 
        $xml .= '<description>'.$val["texte_news"].'</description>'; 
        $xml .= '<pubDate>'.date("D, d M Y H:i:s",$val["date_news"]).' GMT</pubDate>'; 
        $xml .= '</item>'; 
    } 
Donc soit t'es pas sur le bon fichier xml, soit le code que tu nous a donné plus haut n'est pas celui que tu utilises :)

Posté : 28 févr. 2008, 19:00
par kweb
Effectivement... :?
étant donnée que le xml n'as pas de mise en page, les ITEM été noyé dans le code..
Merci beaucoup

je passe ce post en résolu

Posté : 28 févr. 2008, 19:15
par Ryle
Pour une mise en page avec indentation correcte et couleur (et un rapide contrôle de cohérence sur les balises ouvertes/fermées et les caractères spéciaux posant problème), ouvre le fichier xml directement dans ton navigateur ;)