Créer son propre flux RSS à partir d'une requête SQL Par JarodxXx
le vendredi 22 août 2008, 14:32
Il est possible que vous ayez à créer un flux rss vous-même. Je vous donne ici UNE des milliers de solutions possibles. C'est en l'occurrence celle que j'ai utilisée pour créer le flux rss de boobs for france
Avant tout commençons par la connexion à la base de données :
[PHP]
<?php
$server="localhost"; //serveur
$user="login"; //login sql
$pass="pass"; // mot de pass sql
$base="base"; // nom de la base
$connexion = mysql_connect($server, $user, $pass);
if (!$connexion) die('Connect error: '.mysql_error());
$res = mysql_select_db($base);
if($res)
echo "Connected<br>";
else
echo "$user not available<br>";
?>
Pour assurer un format compatible on va utiliser une petite fonction php pour convertir le contenu en UTF 8
[PHP]
<?php
// convert the format to UTF-8
function makeUTF($desc)
{
$desc = UTF8_encode($desc);
$desc = stripslashes($desc);
return($desc);
}
?>
Maintenant il faut construire l'entête du flux RSS, ici ce sont les informations de mon site que vous devrez remplacer
[PHP]
<?php
$rss = '<?xml version="1.0" encoding="UTF-8" ?>'."
";
$rss .= '<rss version="2.0">'."
";
$rss .= '<channel>'."
";
$rss .= '<title>Boobs for france</title>'."
";
$rss .= '<link>http://www.boobsforfrance.com</link>'."
";
$rss .= '<description>Boobs for , Des seins pour la France</description>'."
";
$rss .= '<copyright>jarodxxx</copyright>'."
";
$rss .= '<language>fr</language>'."
";
$rss .= '<image>'."
";
$rss .= ' <title>Boobs for France</title>'."
";
$rss .= ' <url>http://www.boobsforfrance.com/logo.gif</url>'."
";
$rss .= ' <link>http://www.boobsforfrance.com</link>'."
";
$rss .= '</image>'."
";
$today= date("D, d M Y H:i:s +0100");
$rss .= "<pubDate>$today</pubDate>
";
?>
Et ensuite on va entrer les 10 derniers articles de la base de données, pour ma part j'ai aussi inclus des images dans le contenu des posts
[PHP]
<?php
$command="SELECT * FROM boobs ORDER BY id DESC LIMIT 10";
$items = mysql_query($command, $connexion);
if(!$items) die("Select error: ".mysql_error());
while($article = mysql_fetch_assoc($items))
{
$title = makeUTF('une nouvelle paire de seins pour la France');
$url = 'http://www.boobsforfrance.com';
$desc = 'une nouvelle paire de seins pour la France';
$desc = trim(substr($desc, 0, 128));
$len = strlen($desc) -1;
$x = strpos($desc, '<');
if($x !== false && $x < $len) $len = $x;
if($desc[$len] != ".")
{
while($len > 20 && ord($desc[$len]) != 32) $len--;
}
$desc = trim(substr($desc, 0, $len)) . "...";
$desc = makeUTF($desc);
$rss .= "<item>
";
$rss .= "<title>$title</title>
";
$rss .= "<link>$url</link>
";
$rss .= "<guid>$url</guid>
";
$rss .= "<pubDate>$date</pubDate>
";
$rss .= "<description>$desc<br />";
// ajout d'une image
$rss .= '<![CDATA[<img src="http://www.boobsforfrance.com/photos/'.$article['url'].'.jpg" width="120" height="90" alt="Boobs for france" />]]>';
$rss .= "</description>
";
$rss .= "</item>
";
}
$rss .= "</channel>
";
$rss .= "</rss>
";
?>
Pour finir on va écrire le tout dans fichier XML:
[PHP]
<?php
$fp = fopen('../rss.xml', 'w');
fputs($fp, $rss);
fclose($fp);
echo '<br><a href="../rss.xml">Voir le fichier</a><br>';
?>
Pour les flemmards ou ceux qui ont peur de se tromper voici le code source final :
[PHP]
<?php
$server="localhost"; //serveur
$user="login"; //login sql
$pass="pass"; // mot de pass sql
$base="base"; // nom de la base
$connexion = mysql_connect($server, $user, $pass);
if (!$connexion) die('Connect error: '.mysql_error());
$res = mysql_select_db($base);
if($res)
echo "Connected<br>";
else
echo "$user not available<br>";
// convert the format to UTF-8
function makeUTF($desc)
{
$desc = UTF8_encode($desc);
$desc = stripslashes($desc);
return($desc);
}
$rss = '<?xml version="1.0" encoding="UTF-8" ?>'."
";
$rss .= '<rss version="2.0">'."
";
$rss .= '<channel>'."
";
$rss .= '<title>Boobs for France</title>'."
";
$rss .= '<link>http://www.boobsforfrance.com</link>'."
";
$rss .= '<description>Boobs for , Des seins pour la France</description>'."
";
$rss .= '<copyright>jarodxxx</copyright>'."
";
$rss .= '<language>fr</language>'."
";
$rss .= '<image>'."
";
$rss .= ' <title>boobs for france</title>'."
";
$rss .= ' <url>http://www.boobsforfrance.com/logo.gif</url>'."
";
$rss .= ' <link>http://www.boobsforfrance.com</link>'."
";
$rss .= '</image>'."
";
$today= date("D, d M Y H:i:s +0100");
$rss .= "<pubDate>$today</pubDate>
";
$command="SELECT * FROM boobs ORDER BY id DESC LIMIT 10";
$items = mysql_query($command, $connexion);
if(!$items) die("Select error: ".mysql_error());
while($article = mysql_fetch_assoc($items))
{
$title = makeUTF('une nouvelle paire de seins pour la France');
$url = 'http://www.boobsforfrance.com';
$desc = 'une nouvelle paire de seins pour la France';
$desc = trim(substr($desc, 0, 128));
$len = strlen($desc) -1;
$x = strpos($desc, '<');
if($x !== false && $x < $len) $len = $x;
if($desc[$len] != ".")
{
while($len > 20 && ord($desc[$len]) != 32) $len--;
}
$desc = trim(substr($desc, 0, $len)) . "...";
$desc = makeUTF($desc);
$rss .= "<item>
";
$rss .= "<title>$title</title>
";
$rss .= "<link>$url</link>
";
$rss .= "<guid>$url</guid>
";
$rss .= "<pubDate>$date</pubDate>
";
$rss .= "<description>$desc<br />";
$rss .= '<![CDATA[<img src="http://www.boobsforfrance.com/photos/'.$article['url'].'.jpg" width="120" height="90" alt="Boobs for France" />]]>';
$rss .= "</description>
";
$rss .= "</item>
";
}
$rss .= "</channel>
";
$rss .= "</rss>
";
$fp = fopen('../rss.xml', 'w');
fputs($fp, $rss);
fclose($fp);
echo '<br><a href="../rss.xml">Voir le fichier</a><br>';
?>













Ziki
Dailymotion
Flickr
Technorati
Twitter
1. Le vendredi 22 août 2008, 14:56 par zipolo
pfffffffff, tu fais des tutos sur ton blog alors que tu devrais présenter des sites de cul... =D
2. Le vendredi 22 août 2008, 14:59 par jarodxxx
@zipolo > je suis vraiment navré , je ne sais plus ou j'en suis
MDR
3. Le vendredi 22 août 2008, 15:23 par Kaimite
Salut,
Juste une petite remarque.
Si j'ai bien compris à chaque chargement du script le fichier rss.xml est généré et enregistré.
Mais si l'internaute accède directement au fichier XML (ce que fera son agregateur) avec http://www.monsite.com/rss.xml comment être sur d'avoir une version à jour ?
Pourquoi ne pas donner l'adresse d'un fichier rss.php par exemple qui contient ton script et qui fini par un echo $rss;
Comme ça je suis sur d'avoir toujours un flux à jour.
Voilà pour ma p'tite contribution
@++ Kaimite
4. Le vendredi 22 août 2008, 16:00 par Dator
Entièrement d'accord avec @Kaimite ! évitons les fopen !
Bon tutorial sinon
5. Le vendredi 22 août 2008, 16:01 par Steve
Complètement d'accord avec Kaimite... je vois pas l'intérêt d'enregistrer le flux dans un fichier...
6. Le vendredi 22 août 2008, 16:03 par Matt1113
Merci du tuto seulement il arrive trop tard pour moi, j'ai du me faire un code comme je pouvais pour faire mon flux RSS car je ne trouvais pas de tuto potable :P .
Merci quand même ^^'
7. Le vendredi 22 août 2008, 16:11 par Catar4x
Il suffit de faire un echo $rss;, de dégager le fopen() et de relier le tout avec Feedburner !
8. Le vendredi 22 août 2008, 16:47 par Seoplayer
Merci pour l'astuce Jarod
9. Le vendredi 22 août 2008, 21:52 par Sébastien Couix
Ptin je suis désolé j'aime beaucoup ton blog mais quand je vois un code comme ça ça me fait piquer les yeux.
Les dernières versions de PHP intègrent XMLWriter, qui permet d'écrire des xml en quelques lignes seulement..
J'avoue moi aussi avoir du mal à suivre les évo de PHP. Comme preuve je dirais que j'utilise un script similaire au tien pour mes XML et je reporte mon passage à XMLWriter par manque de temps..
Plus d'info : http://classes.scriptsphp.org/artic...
Qu'en penses-tu ?
http://www.deefuz.net
10. Le samedi 23 août 2008, 22:16 par Hugo
+1 avec XMLWriter ou SimpleXML qui sont faits pour ça.
Sinon utiliser une classe POO pour générer des flux.
Autre chose, les 3 lignes permettant d'enregistrer le flux dans un fichier peuvent se faire en une seule avec file_put_contents().
++
11. Le dimanche 24 août 2008, 16:46 par exotux
+1 pour SimpleXml. C'est fait pour ça. Le code est trop lourd là.
@+
12. Le vendredi 5 septembre 2008, 10:47 par Jean Benoit
Bonjour,
Je viens de proposer un code utilisant XMLwriter sur mon blog.
http://www.leblogecommerce.com/gene...
13. Le mercredi 24 décembre 2008, 23:31 par cynik
et vous autres, vous avez pensé aux pauvres gens qui connaissent seulement comme ca le PHP et qui ne connaissent que de nom le XML? Alors si vous critiquez, faites mieux !!