Commentaire(s) Comment créer un flux rss dynamique pour votre site?
- Retour au Tutoriel : « Comment créer un flux rss dynamique pour votre site? »
Commentaire(s)
- #180 Commentaire de GO posté le 12/01/11 à 14:03:49 :

-
Bonjour,
je vous remercie pour votre aide afin de créer un flux rss à partir d'infos dynamiques. J'ai repris votre code et l'ai adapté avec mes codes d'accès. Seulement cela me donne cette erreur:
Parse error: syntax error, unexpected T_STRING in /home/www/207a6f0b0362da274bc59132c6d36696/web/rss.php on line 86
Pouvez-vous me dire pourquoi...
merci
- #181 Commentaire de c00lman posté le 12/01/11 à 15:21:21 :

-
Bonjour,
Si vous avez effectué un bête copier/coller, c'est une erreur de commentaire qui n'est pas précédé d'un double slashe // .
- #229 Commentaire de GO posté le 16/02/11 à 01:13:50 :

-
Nouvelle erreur... Je ne comprends du reste pas pourquoi.
La description des articles ne correspond pas au titre. Quand j'ouvre la page du flux, les titres et les liens sont corrects, mais la description du premier article se dédouble sur le deuxième et troisième article...???
Voici mon code:
<?php
// On modifie l'entête du document pour dire que c'est du xml
header("Content-type: application/xml");
//Données à complèter pour la connexion à la base de données
$nom_du_serveur ="localhost";
$nom_de_la_base ="xxxx";
$nom_utilisateur ="xxxx";
$passe ="xxxx";
//Nombre de flus rss à afficher
$nombre_flux=20;
//Nombre de caractères à afficher pour les descriptions avant d'être tronquées par des ...
$max_caracteres=300;
//A remplir si vous n'utilisez pas l'url rewriting
//Nom de la page affichant vos articles (ex: page.php, news.php, article.php, etc..)
$nom_de_la_page="plus_info.php";
//Utilisez vous l'url rewriting?» 1=oui|0=non
$rewrite=0;
//Nom de la table à explorer
$nom_de_la_table="mylog";
//Identifiant - Généralement le champ id
$identifiant="ID";
//Nom du champ affichant le titre
$titre="titre";
//Nom du champ affichant la description
$description="accroche";
//Fonction pour récupérer l'url principale du site
function url_actuelle()
{
return "http://" . $_SERVER["SERVER_NAME"];
}
$url ="http://www.monsite.com"; //au lieu de $url = (url_actuelle());
//Fonction pour re écrire les url. A modifier ou à adapter selon vos besoins
function OptimiseUrl($chaine)
{
$chaine=strtolower($chaine);
$accents = Array("/é/", "/è/", "/ê/","/ë/", "/ç/", "/à/", "/â/","/á/","/ä/","/ã/","/å/",
"/î/", "/ï/", "/í/", "/ì/", "/ù/", "/ô/", "/ò/", "/ó/", "/ö/");
$sans = Array("e", "e", "e", "e", "c", "a", "a","a", "a","a", "a", "i", "i", "i", "i",
"u", "o", "o", "o", "o");
$chaine = preg_replace($accents, $sans,$chaine);
$chaine = preg_replace('#[^A-Za-z0-9]#','-',$chaine);
// Remplace les tirets multiples par un tiret unique
$chaine = ereg_replace( "\-+", '-', $chaine );
// Supprime le dernier caractère si c'est un tiret
$chaine = rtrim( $chaine, '-' );
while (strpos($chaine,'--') !== false) $chaine = str_replace('--','-',$chaine);
return $chaine;
}
//Entête du flux rss. A complèter selon vos besoins
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n
<rss version=\"2.0\">\n
<channel>\n
<title>Titre </title>\n
<link>$url</link>\n
<description>description </description>\n
<language>fr</language>\n\n";
//Connexion à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
//Vérification d'accès à la base de données
mysql_select_db("$nom_de_la_base") or die("Impossible d'ouvrir la base de données ");
//On sélectionne les données
$result = mysql_query("SELECT $identifiant, $titre, $description FROM $nom_de_la_table
ORDER BY id DESC LIMIT $nombre_flux");
while($affiche = mysql_fetch_array($result))
{
//On affiche les flux
echo '<item>
<title>'.$affiche["$titre"].'</title>';
//Affichage du titre sans url rewriting
if($rewrite==0){
echo '<link>'.$url.'/'.$nom_de_la_page.'?idnews='.$affiche["$identifiant"].'</link>';}
//Affichage du titre avec url rewriting- Partie à modifier/complèter selon votre propre ré écriture d'url
else
{
echo '<link>'.$url.'/'.OptimiseUrl($affiche["$titre"]).'-'.$affiche["$identifiant"].'
.php</link>';
}
//On tronque la description
if (strlen($affiche["$description"])>$max_caracteres)
{
//Séléction du maximum de caractères
$tronque_description = substr($affiche["$description"], 0, $max_caracteres);
//Récupération de la position du dernier espace (afin déviter de tronquer un mot)
$position_espace = strrpos($tronque_description, " ");
$tronque_description = substr($tronque_description, 0, $position_espace);
// Ajout des "..."
$tronque_description = $tronque_description."...";
}
echo '<description>'.$tronque_description.'</description>
</item>';
}
// Fermeture de la connexion à la base de données
mysql_close();
//On ferme le flux rss
echo "</channel>\n</rss>";
?>
- #230 Commentaire de c00lman posté le 16/02/11 à 09:05:18 :

-
Salut,
Je vois une erreur dans la sélection des données à la variable $result . Le champ ID de la variable $identifiant est écrit en majuscule alors que dans $result , id est écrit en minuscule.
Sinon, tu peux tester ça en modifiant/rectifiant quelques trucs :
<?php
// On modifie l'entête du document pour dire que c'est du xml
header("Content-type: application/xml");
//fonction pour tronquer un texte
function tronquer($texte, $i)
{
// On compte le nombre de caractères présents dans le texte.
$caracteres = strlen($texte);
$boucle = true;
// Si le nombre de caractères est supérieur à la limite d'affichage :
if($caracteres > $i)
{
// On coupe le texte après un espace :
$texte = substr($texte, 0, $i);
$position_espace = strrpos($texte, " ");
$texte = substr($texte, 0, $position_espace).' ...';
}
// On renvoie le texte tronqué :
return $texte;
}
//Données à complèter pour la connexion à la base de données
$nom_du_serveur ="localhost";
$nom_de_la_base ="xxxx";
$nom_utilisateur ="xxxx";
$passe ="xxxx";
//Entête du flux rss. A complèter selon vos besoins
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n
<rss version=\"2.0\">\n
<channel>\n
<title>Titre </title>\n
<link>$url</link>\n
<description>description </description>\n
<language>fr</language>\n\n";
//Connexion à la base de données
mysql_connect("$nom_du_serveur","$nom_utilisateur","$passe");
//Vérification d'accès à la base de données
mysql_select_db("$nom_de_la_base") or die("Impossible d'ouvrir la base de données ");
//On sélectionne les données
$result = mysql_query("SELECT ID, titre, accroche FROM mylog ORDER BY ID DESC LIMIT 20");
while($affiche = mysql_fetch_array($result))
{
//On affiche les flux
echo '<item>
<title>'.$affiche['titre'].'</title>';
//Affichage du titre
echo '<link>http://www.monsite.com/plus_info.php?idnews='.$affiche['ID'].'</link>';
//On tronque la description
echo tronquer(''.$affiche['accroche'].'', 300);
echo '</item>';
}
// Fermeture de la connexion à la base de données
mysql_close();
//On ferme le flux rss
echo "</channel>\n</rss>";
?>
- #234 Commentaire de GO posté le 16/02/11 à 14:01:22 :

-
Merci de la réponse.
Malheureusement avec ce nouveau code, l'accroche ne s'affiche plus. Par contre, le titre et le lien des pages fonctionnent parfaitement.
As-tu une idée pour améliorer cela?
a+
- #236 Commentaire de c00lman posté le 16/02/11 à 16:07:44 :

-
Dans un premier temps vérifie que la ligne ci-dessous correspond bien à ce que tu dois chercher en bd (nom des champs) :
$result = mysql_query("SELECT ID, titre, accroche FROM mylog ORDER BY ID DESC LIMIT 20");
Ensuite, remplace la ligne
echo tronquer(''.$affiche['accroche'].'', 300);
par :
echo ''.tronquer($affiche['accroche'], 300).'';
Si ça ne fonctionne toujours pas, teste simplement :
echo $affiche['accroche'];
Si cette dernière fonctionne et pas les autres, je me suis alors planté dans le code
- #370 Commentaire de Helene posté le 12/05/11 à 16:00:19 :

-
Bonjour,
Tout d'abord je vous remercie pour ce tuto.
Tout fonctionne tres biens, j'ai juste un souci avec l'urlrewriting... je ne sais pas quoi mettre dans mon htaccess...
pour l'instant j'ai mis ça :
RewriteEngine on
RewriteRule ^-(.*)\.php$ http://www.monsite.net/monsite-infos.php?id=$1 [L]
Mais bien sur cela ne fonctionne pas... je galère vraiment avec la réécriture... si vous pouviez me donner une petite piste ce serait très très sympa !
Merci
- #371 Commentaire de Hélène posté le 12/05/11 à 19:47:57 :

-
Bonjour,
Merci pour ce tuto très bien commenté.
J'ai un petit souci avec l'urlrewriting. Si je l'active$rewrite=1;lorsque je survole mon lien, l'url est bien réécrite donc la bonne nouvelle c'est que le code que vous avez donné fonctionne tres bien !
Le problème vient de ma règle de réécriture dans mon htaccess. je ne vois vraiment pas comment la demander car le titre peut comporter 2, 3, 4 mots avant que l'id soit envoyé.
Je ne sais pas si je suis claire et en plus je suis une daube dans ce domaine donc voici la règle que j'ai mise et qui ne fonctionne pas, si quelqu'un a une idée...
RewriteEngine on
RewriteRule ^(.*)-(.*)\.php$ http://www.monsite.com/mapagedestination.php?id=$2 [L]
merci beaucoup à toutes les ames charitables, je tourne en rond depuis des heures !
- #372 Commentaire de c00lman posté le 12/05/11 à 20:43:45 :

-
Salut helene,
En supposant que votre page (la dynamique) se nomme page.php alors la variable du script sera$nom_de_la_page="page.php";.La règle d'écriture peut être alors :
RewriteRule ^(.*)-([0-9]*)\.php$ page.php?titre=$1&id=$2 [L]
Peut importe le nombre de mot contenu dans le titre, celui-ci sera ré écrit et donnera une url du style :mon-titre-a-rallonge-super-long-4.php
- #373 Commentaire de Hélène posté le 12/05/11 à 21:29:43 :

-
c00lman je vous AIME !!!!!!!!!!!!

ça marche super bien maintenant et ça va me faire gagner quelques heures de sommeil...
Merci encore pour votre réponse rapide et je m'excuse d'avoir posté 2 fois, j'ai cru que j'avais mal saisi le code la 1ere fois.
- #374 Commentaire de c00lman posté le 13/05/11 à 08:12:05 :

-
Lol, et de rien
.
- #375 Commentaire de Hélène posté le 13/05/11 à 14:05:33 :

-
Bonjour,
Encore un petit souci... avec feedparser je pense.
Voilà le titre et la date s'affiche bien mais la description ne s'affiche que sur le dernier item..
est-ce que cela vient de cette ligne :
// puis la date et la description;
$html .= "<span>$date - $description</span><br clear=\"left\"><br />\n"
Merci pour votre aide
- #376 Commentaire de c00lman posté le 13/05/11 à 18:52:23 :

-
Salut,
Non je ne pense pas que ça vienne du fichier "feedparser" et pour être honnête, je ne vois pas d'ou ça peut provenir!
J'opterais pour une erreur dans le code .. il y a moyen de voir ça en directe?
- #379 Commentaire de Hélène posté le 15/05/11 à 09:33:25 :

-
Bonjour,
j'ai trouvé, cela venait de ma base de donné. Dans la description j'avais intégré des balises <br> et <strong>... en les enlevant tout fonctionne parfaitement.
Merci encore



