flux RSS bis...
Posté : 26 juin 2008, 11:31
Bonjour,
Je viens de trouver un code pour faire un agrégateur de flux RSS. Seulement, quand je l'affiche via Wamp, il m'affiche les différents modules avec du code au milieu...
voici la partie du code source ayant le plus gros paragraphe non interprété... ( début du programme).
Je viens de trouver un code pour faire un agrégateur de flux RSS. Seulement, quand je l'affiche via Wamp, il m'affiche les différents modules avec du code au milieu...
voici la partie du code source ayant le plus gros paragraphe non interprété... ( début du programme).
<?php
/* Agrégateur RSS v1.0 - PHP4/MySQL
© Didier YVER 2004
http://www.ASP-PHP.net
*/
// PARAMETRES
$rub_path = "rubriques.xml";
$password = "toto";
$maxperpage = 40;
$refresh = 60; // minutes
// Connexion
mysql_connect("localhost","root","");
mysql_select_db("rss");
// Extrait le nom du site de l'url
function site($url)
{
$site = parse_url($url);
return str_replace("www.","",$site["host"]);
}
// Date française (Merci Fabrice :)
function datefr($time)
{
setlocale(LC_TIME, "fr");
return ucfirst(strftime("%A %d %B %Y",$time));
}
// Lecture d'un fichier XML
function lit_xml($chaine,$item,$champs)
{
// on explode sur item
$tmp = preg_split("/<\/?".$item.">/",$chaine);
// pour chaque item
for($i=1;$i<sizeof($tmp)-1;$i+=2)
{
$tmp3[$i-1][] = $tmp[$i];
// on lit les champs demandés champ
foreach($champs as $champ)
{
$tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
// on ajoute au tableau
$tmp3[$i-1][] = @$tmp2[1];
}
}
// et on retourne le tableau
return @$tmp3;
}
// utf8_decode déconne parfois
function smart_utf8_decode($in_str)
{
// Replace ? with a unique string
$new_str = str_replace("?", "q0u0e0s0t0i0o0n", $in_str);
// Try the utf8_decode
$new_str=utf8_decode($new_str);
// if it contains ? marks
if (strpos($new_str,"?") !== false)
{
// Something went wrong, set new_str to the original string.
$new_str=$in_str;
} else
{
// If not then all is well, put the ?-marks back where is belongs
$new_str = str_replace("q0u0e0s0t0i0o0n", "?", $new_str);
}
$new_str = str_replace("'","'",$new_str); // RC t'es chiant :)
return $new_str;
}
// Mise à jour de la base
function lit_rss($url)
{
global $db;
// Récupération de l'ID du flux
$result = mysql_query("SELECT ID FROM flux WHERE url='".$url."'");
$id = mysql_result($result,0,0);
// Lecture du flux
if($chaine = @implode("",@file($url)))
{
$flux=lit_xml($chaine,"channel",array("title"));
$titre = $flux[0][1];
// Mise à jour du flux
mysql_query("UPDATE flux SET titre='".addslashes($titre)."',maj=".time()." WHERE ID=".$id);
$items = lit_xml($chaine,"item",array("title","link","pubDate","description"));
// Pour chaque item
foreach($items as $item)
{
// On récupère les champs
$date = @strtotime($item[3]); if(!$date) $date=time();
$titre = $item[1];
$lien = $item[2];
$desc = $item[4];
if($desc==$titre) $desc="";
// Anti-doublon sur URL
$result = mysql_query("SELECT ID FROM item WHERE lien='".$lien."' AND IDflux=".$id);
// Mise à jour
if(mysql_num_rows($result)>0)
{
mysql_query("UPDATE item SET titre='".addslashes($titre)."',description='".addslashes($desc)."' WHERE ID=".mysql_result($result,0,0));
// ou ajout à la BD
}
else
{
mysql_query("INSERT INTO item(IDflux,titre,lien,pubdate,description) VALUES(".$id.",'".addslashes($titre)."','".$lien."',".$date.",'".addslashes($desc)."')");
}
}
}
}
if($isAdmin)
{
// Ajout d'un flux
if(@$_POST["flux"])
{
// Test validité de l'url
if(!lit_xml($chaine = @implode("",@file($_POST["flux"])),"channel",array("title")))
$error = "[".$_POST["flux"]."] n'est pas un flux RSS !";
else
{
// Test anti-doublon
$result = mysql_query("SELECT * FROM flux WHERE url='".$_POST["flux"]."'");
if(mysql_num_rows($result)<1)
{
// Ajout à la table flux
$SQL = "INSERT INTO flux(url,rubrique) VALUES('".$_POST["flux"]."','";
// rubrique saisie ou choisie dans la liste ?
if(@$_POST["rubrique"]) $SQL.=$_POST["rubrique"];
elseif(@$_POST["listrub"]) $SQL.=$_POST["listrub"];
$SQL.="')";
mysql_query($SQL);
// et va lire le flux
lit_rss($_POST["flux"]);
}
}
}
// Destruction d'un flux
if(@$_GET["delflux"])
{
mysql_query("DELETE FROM flux WHERE ID=".$_GET["delflux"]);
mysql_query("DELETE FROM item WHERE IDflux=".$_GET["delflux"]);
mysql_query("OPTIMIZE TABLE flux"); // compresse la bd
mysql_query("OPTIMIZE TABLE item");
mysql_close();
Header("Location: ".$_SERVER["PHP_SELF"]);
}
// Génération du fichier xml contenant la liste des channels
if(@$_GET["action"]=="generexml")
{
$xml = "<"."?xml version='1.0' encoding='ISO-8859-1'?".">\n<liste>\n";
$result = mysql_query("SELECT * FROM flux ORDER BY lower(rubrique),lower(titre)");
$tmp = "";
// pour chaque flux
while($val=mysql_fetch_array($result))
{
// si la rubrique a changé -> nouveau channel
if($tmp!=$val["rubrique"])
{
if($tmp) $xml.="</channel>\n";
$xml.="<channel>\n<title>".$val["rubrique"]."</title>\n";
$tmp = $val["rubrique"];
}
// Ajoute le flux en item
$xml.="<item>\n<title>".$val["titre"]."</title>\n<link>".$val["url"]."</link>\n</item>\n";
}
if($tmp) $xml.="</channel>\n";
$xml.="</liste>";
// et enregistre le tout
$f = fopen($rub_path,"w"); fputs($f,utf8_decode($xml)); fclose($f);
}
}
// Mise à jour de la base (lecture de tous les flux non encore à jour - cf $refresh)
function update()
{
global $db,$refresh;
set_time_limit(300); // parfois c'est un peu long :)
$result = mysql_query("SELECT url FROM flux WHERE maj<".(time()-$refresh*60));
while($val=mysql_fetch_array($result))
lit_rss($val["url"]);
}
update();
// Affichage
?>
il m'affiche a partir de : /",$chaine); // pour chaque item for($i=1;$i/",$tmp[$i]); ... jusqu'à la fin de la balise php :
update();
// Affichage
?>
d'avance merci de votre aide.