Module de news avec flux rss ?

K20
Eléphant du PHP | 303 Messages

04 nov. 2005, 19:45

Bonjour tout le monde !
Voila, j'utilise sur mon site un module de flux RSS 2.0 pour mes news : ici

Je voudrais realiser un petit script PHP qui permette d'afficher tout ca en HTML sous la forme d'un beau petit tableau (comme sur le site).

Ce petit module sera ensuite facilement integrable sur n'importe quel site.

Voila, donc je voudrais savoir comment faire ca ?

Merci d'avance !
Modifié en dernier par K20 le 03 déc. 2005, 01:40, modifié 1 fois.

Eléphanteau du PHP | 19 Messages

04 nov. 2005, 23:47

Pour transformer du XML en HTML, tu peux aussi de passer du PHP.
Tu peux regarder du coté du XSL qui est ce que j'utilise pour rendre plus joli mes RSS. Regarde par exemple ce que fait la BBC de ses RSS : http://newsrss.bbc.co.uk/rss/newsonline ... ge/rss.xml

Mais comme tu veux en faire un module pour un autre site, c'est peut être pas la meilleure solution.
Tu peux alors faire un petit script qui sera le meme que pour faire le tableau sur ton site, mais qui ne renvoie que ca.
Si tu veux vraiment utiliser ton RSS, tu peux alors regarder du coté des fonctions DOM pour 'parser' ton fichier.
 $items=$doc->getElementsByTagName('item');
foreach($items as $item) {
$title=$item->getElementByTagName('title')->item(1)->nodeValue;
}
En esperant t'avoir aidé.

K20
Eléphant du PHP | 303 Messages

05 nov. 2005, 00:45

Heu ouai un peu mais ca correspond a quoi ce que tu m'qs file ??

Eléphanteau du PHP | 19 Messages

05 nov. 2005, 01:24

Euh ouais, désolé, c'est pas très clair en effet.
 $doc = new DomDocument;
 $doc->loadXMLFile('ton rss'); //la, tu ouvres ton fichier xml

echo '<table>';
$items=$doc->getElementsByTagName('item'); //ca, ca va chercher tous les item dans ton rss
foreach($items as $item) {
$title=$item->getElementByTagName('title')->item(1)->nodeValue;
echo '<tr><td>'.$title.'</td></tr>'; //pour chaque item, tu fais une ligne de tableau
}
echo '</table>';
Donc au final, ca ouvre le rss et ca le transforme en tableau, la, j'ai fait juste le titre, mais tu peux faire ce que tu veux de plus.
J'espère que j'ai éclairci, et que j'ai bien répondu à ta question.

K20
Eléphant du PHP | 303 Messages

05 nov. 2005, 04:19

Ouai c'est mieux ;)

Je verrais ca ce WE merci !

K20
Eléphant du PHP | 303 Messages

05 nov. 2005, 14:35

Heu, juste un truc, mon fichier XML est généré dynamiquement grâce à PHP, donc je n'ai pas de fichier XML ...

Je fais comment, je mes dans loadXMLFile mon fichier php, sachant que c'est de la forme : http://www.pc-shows.com/rss.php?act=news ??

EDIT : je rencontre une erreur :
Parse error: parse error, unexpected T_OBJECT_OPERATOR in /home/pcshows/www/rss/news.php on line 9
Je connais pas du tout :(

Voici mon code :
$doc = new DomDocument;
$doc->loadXMLFile('http://www.pc-shows.com/rss.php?act=news'); //la, tu ouvres ton fichier xml

echo '<table>';
$items=$doc->getElementsByTagName('item'); //ca, ca va chercher tous les item dans ton rss
foreach($items as $item) {
$title=$item->getElementByTagName('title')->item(1)->nodeValue;
echo '<tr><td>'.$title.'</td></tr>'; //pour chaque item, tu fais une ligne de tableau
}
echo '</table>';
C'est quoi qui cloche ?
Modifié en dernier par K20 le 05 nov. 2005, 14:49, modifié 1 fois.

Mammouth du PHP | 1311 Messages

05 nov. 2005, 14:39


MessagePosté le: 05 Nov 2005, 13:35 Sujet du message:
Heu, juste un truc, mon fichier XML est généré dynamiquement grâce à PHP, donc je n'ai pas de fichier XML ...
je comprend pas trop
comment genere tu ton fichier (le sauve tu ??)

K20
Eléphant du PHP | 303 Messages

05 nov. 2005, 14:51

J'ai un fichier rss.php composé de la sorte :
<?
header("Content-Type: text/xml; charset=\"iso-8859-1\"");
echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
include("config/conf.php");
$act = $_GET['act'];
?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  xmlns:admin="http://webns.net/mvcb/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns="http://purl.org/rss/1.0/">
<channel>
<title>Pcshows : les news, les articles et le forum</title>
<link><? echo $url; ?></link>
<description>Site de tunning PC, overclocking, watercooling, tests ...</description>
<managingeditor><? echo $email_admin; ?></managingeditor>
<webmaster><? echo $email_admin; ?></webmaster>
<language>fr</language>
<lastbuilddate><?=date('r')?></lastbuilddate>
<?
if ($act == "forum") {
// Forum
$requete = mysql_query("SELECT * FROM phpbb_forums",$connexion);
$nombre_forum = mysql_num_rows($requete);
$k = 0;
while ($k<$nombre_forum)
{
$lastpost = mysql_result($requete,$k,"forum_last_post_id");
// Vérification id != 0
if ($lastpost != 0) {
// Dernier post
$requete_post = mysql_query("SELECT * FROM phpbb_posts_text WHERE post_id=\"".$lastpost."\"",$connexion);
$tableau = mysql_fetch_array($requete_post, MYSQL_ASSOC);
$idpost = $tableau['post_id'];
$sujet = $tableau['post_subject'];
$texte = $tableau['post_text'];
// Topic
$requete_topic = mysql_query("SELECT * FROM phpbb_topics WHERE topic_first_post_id=\"".$idpost."\"",$connexion);
$tableau2 = mysql_fetch_array($requete_topic, MYSQL_ASSOC);
$idtopic = $tableau2['topic_id'];
// Affichage flux ...
echo('<item>
<title>'.$sujet.'</title>
<link>'.$url.'/forum/viewtopic.php?t='.$idtopic.'</link>
<description>'.$texte.'</description>
</item>');
}
$k++;
}
}

if ($act == "news") {
// Requête
$requete = mysql_query("SELECT * FROM news WHERE valider=\"1\" ORDER BY id DESC LIMIT 0, 10",$connexion) or die ("Requête invalide") ;
$resultat = mysql_num_rows($requete);
$i = 0;
while ($i<$resultat)
{
$id = mysql_result($requete,$i,"id");
$titre = mysql_result($requete,$i,"titre");
?>
<item>
<title><? echo html_entity_decode($titre, ENT_QUOTES); ?></title>
<link><? echo $url; ?>/site/onenews.php?id=<? echo $id; ?></link>
</item>
<?
$i++;
}
}
if ($act == "articles") {
$j = 1;
while ($j<7)
{
$categ = mysql_query("SELECT * FROM article WHERE valider=\"1\" AND categorie=\"".$j."\" ORDER BY id DESC LIMIT 1",$connexion);
// Vérification présence d'un article dans la catégorie
if (mysql_num_rows($categ) != 0) {
$tableau_categ = mysql_fetch_array($categ, MYSQL_ASSOC);
$id = $tableau_categ['id'];
$titre = $tableau_categ['titre'];
?>
<item>
<title><? echo html_entity_decode($titre, ENT_QUOTES); ?></title>
<link><?=$url?>/site/ article.php?id=<?=$id?>&categorie=<?=$j?>&page=1</link>
</item>
<?
}
$j++;
}
}
mysql_close($connexion);
?>
</channel>
</rdf:RDF>
Il permet de construire 3 fichiers XML RSS différents à partir du même fichier PHP ;) Il suffit de renseigner la variable dans l'url ;)

Donc non il n'est pas sauvegardé mais généré dynamiquement, plus rapide et moins de ressources :)

Sinon, j'ai essayé ton code et y a une erreur : voir mon edit dans le post précédent ;)

Mammouth du PHP | 1311 Messages

05 nov. 2005, 14:54

soit tu l'ecris tu ecris le fichier xml sous forme de chaine et tu fait un loadxml
soit tu capture le flux de sortie de ta page et fait un load xml :wink:
Sinon, j'ai essayé ton code et y a une erreur : voir mon edit dans le post précédent Wink
:?:
le mien??

Eléphanteau du PHP | 19 Messages

05 nov. 2005, 14:58

Si ton Rss et généré dynamiquement, je ne vois pas l'interet de l'utiliser pour former ton tableau de news, pourquoi ne pas directement lire dans la base et en faire en tableau, c'est plus simple et plus rapide, non?

K20
Eléphant du PHP | 303 Messages

06 nov. 2005, 19:18

Si ton Rss et généré dynamiquement, je ne vois pas l'interet de l'utiliser pour former ton tableau de news, pourquoi ne pas directement lire dans la base et en faire en tableau, c'est plus simple et plus rapide, non?
En fait moi je veux que mes news soient en RSS.
Et en plus faire un module qui transforme ce RSS en tableau HTML

Le tableau servira pour d'autres site pas le mien ;)

@ jeff : oui le tient ;)
soit tu l'ecris tu ecris le fichier xml sous forme de chaine et tu fait un loadxml
soit tu capture le flux de sortie de ta page et fait un load xml
Heu, la première solution c'est pas pratique du tout ... Car faudrait que quelqu'un aille sur la page pour générer le fichier xml ou que j'utilise webcron ...

Pour la 2e soluc je fais comment ?

Mammouth du PHP | 1311 Messages

06 nov. 2005, 19:21

il faut que tu regarde du cote des fonctions ob_start et get_content

quel code ne fonctionnait pas???

K20
Eléphant du PHP | 303 Messages

06 nov. 2005, 19:23

Ba regarde mon post plus haut, j'ai mis le code que j'ai mis et l'erreur qu'il me renvoie ;)

EDIT : heu pourrais-tu m'expliquer un peu plus en détail ce que je dois faire avec les fonctions que tu viens de me passer ? Car je comprends pas trop leur fonctionnement :(
Modifié en dernier par K20 le 06 nov. 2005, 19:27, modifié 1 fois.

Mammouth du PHP | 1311 Messages

06 nov. 2005, 19:26

il y a rien qui ressemble a une partie de mon code
dans mon ancien de mes post sur le salon xml il y a peut etre des morceau de code qui peuvent d'aider

K20
Eléphant du PHP | 303 Messages

06 nov. 2005, 19:27

Je me suis trompé de personne, je parlais de Fab ...
heu pourrais-tu m'expliquer un peu plus en détail ce que je dois faire avec les fonctions que tu viens de me passer ? Car je comprends pas trop leur fonctionnement :(