Génerer un xml (rss) a partir d'une base de données mySQL

Génerer un xml (rss) a partir d'une base de données mySQL - PHP - Programmation

Marsh Posté le 20-01-2007 à 20:46:45    

hello

 

j'ai voulu, a partir de ma base de données news, générer un rss avec la methode de cet article:

 

http://ghostdogpr.developpez.com/articles/rss/

 


j'ai tout le temps des erreurs de type invalid character ou whitespace not allowed here.

 


le code est le suivant :

 
Code :
  1. $build_xml='<?xml version="1.0" encoding="UTF-8"?>
  2. <rss version="2.0">
  3. <channel>
  4. <title>Le flux des niouzes du mobil12</title>
  5. <link>http://mobil12.my-underworld.net</link>
  6. <description>Le flux des niouzes du mobil12</description>';
  7. $db = mysql_connect('', '', '');
  8. mysql_select_db('mobil12',$db);
  9. $sql_allniouzes='SELECT * FROM m12_news  ORDER BY date DESC';
  10. $req_allniouzes=mysql_query($sql_allniouzes) or die('Erreur SQL !<br>'.$sql_allniouzes.'<br>'.mysql_error());
  11. while ($rep_allniouzes=mysql_fetch_array($req_allniouzes))
  12.  {
  13.  $build_xml.='<item>';
  14.  $build_xml.='<title>'.$rep_allniouzes['title'].'</title>';
  15.  //$build_xml.='<title>TEST</title>';
  16.  $build_xml .= '<link>'.'mobil12.my-underworld.net/niouzes.php'.'</link>';
  17.  $build_xml .= '<pubDate>'.date("D, d M Y H i s",$rep_allniouzes['date']).' +0200</pubDate>';
  18.  $build_xml .= '<description>'.$rep_allniouzes['content'].'</description>';
  19.  //$build_xml .= '<description>TEST</description>';
  20.  $build_xml.='</item>';
  21.  }
  22. $build_xml.='</channel></rss>';
  23. // écriture dans le fichier
  24. $fp = fopen("../../niouzes.xml", 'w+');
  25. fputs($fp, $build_xml);
  26. fclose($fp);
  27. mysql_close();
 


si je remplace les balises description et titre par celles actuellement desactivées : //; ca marche. donc le probleme vient bien de l'information renvoyée par la base.

 


j'ai essayé un $build_xml.='<title>'.utf8_encode($rep_allniouzes['title']).'</title>';
mais j'obtiends exactement le meme resultat . de toute maniere la base semble etre en utf8-unicode-ci a ce que j'en vois , (jy comprends pas grand chose en collationnement et tous ces trucs...)

 


donc est ce que quelqu'un a une idée de comment inscrire en utf8 propre dans le fichier pour que celui ci soit accepté?  

 

Accessoirement, comment sont codés les retours a la ligne dans le fichier ? actuellement mon fichier xml est donc un gros paté. or si je regarde des exemples de fichiers rss sur le net , ils sont indentés directement dans le fichier.

 

merci bcp je m'arrache les cheveux .


Message édité par gloun le 20-01-2007 à 22:38:17

---------------
c'est koi l'enroule ici ?  
Reply

Marsh Posté le 20-01-2007 à 20:46:45   

Reply

Marsh Posté le 20-01-2007 à 22:45:57    

:o

Reply

Marsh Posté le 22-01-2007 à 14:37:24    

Un fichier rss est un format de fichier xml. Utilise plustôt ce qui est fait pour créer facilement de genre de fichier : les fonctions xml par exemple : http://fr3.php.net/manual/fr/ref.xml.php .
Avec ça, tu ne devrais plus avoir ce genre de probléme. Par contre, ca te prendra peut être un peu plus de temps au début le temps de comprendre comment ca marche.

Reply

Marsh Posté le 26-01-2007 à 19:43:52    

hello

 

pour indenter : on rajoute "\n" à la fin des lignes, c'est un bon début. on peut aussi mettre des "\t", ca fait raffiné ;-)

 

pour les caractères spéciaux : moi je les rentre dans des CDATA.

 

je suis pas sûr que ca soit fait pour ca, mais ca a l'air de marcher...

  
Code :
  1. while ($rep_allniouzes=mysql_fetch_array($req_allniouzes))
  2.  {
  3.  $build_xml.='<item>' . "\n";
  4.                 $build_xml.='<title><![CDATA['.$rep_allniouzes['title'].']]></title>' . "\n";
  5.  $build_xml .= '<link>'.'mobil12.my-underworld.net/niouzes.php'.'</link>' . "\n";
  6.  $build_xml .= '<pubDate>'.date("D, d M Y H i s",$rep_allniouzes['date']).' +0200</pubDate>' . "\n";
  7.  $build_xml .= '<description><![CDATA['.$rep_allniouzes['content'].']]></description>' . "\n";
  8.  $build_xml.='</item>' . "\n";
  9.  }
 


dernier point, perso j'encode en iso-8859-1.

 

voilà


Message édité par nabbo le 26-01-2007 à 19:48:58
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed