Page 1 sur 1

Update RSS XML

Posté : 29 janv. 2008, 21:36
par lux
Bonjour tout le monde.

Je suis en train de faire un fichier RSS pour un site. (PHP 5).
L'ajout se fait sans problème.

Première question : on update un fichier RSS, voir efface des noeuds, quand on efface une news/respectivement quand on modifie la news ?
Ou alors on poste bêtement la mise à jour par dessus ?

Vu que moi je voulais effacer/modifier dans le fichier xml pour que le RSS soit à jour.
Alors, je sais le faire si je mets des id dans les attributs de noeud, p.ex <item id="54"> etc...
MAIS : on à pas le droit de mettre d'attributs id d'après les validateur RSS de la W3C.

Alors comment retrouver le bon noeud, puis son parent, et le passer dans removechild ?
Parce que la je sèche.

Je peux vous montrer du code :
$dom = new DomDocument();
$dom->preserveWhiteSpace = FALSE;
$dom->formatOutput = TRUE;
$dom->load($path);

$xpath = new DomXpath($dom);
$root = $dom->documentElement;
$next = $xpath->query('//channel/item[title = Test]');
foreach($next as $item)
	{
             //Deja ça ça marche pas, en plus faudrait trouver le parent plutot		
             $dom->removeChild($item);
	}
$dom->save($path);

Posté : 31 janv. 2008, 13:40
par lux
Je me permets un petit up.
C'est étrange comment le traitement du xml est relativement mal fait, mal documenté, et rares sont les personnes à le maîtriser.

Je crois que je vais me borner à ajouter un item pour chaque modification faite dans le rss, et abandonner cette idée d'effaçage/modification ... :oops:

Posté : 31 janv. 2008, 15:04
par Hubert Roksor
Si tu utilises RSS 2.0, tu es sensé indiquer la mise à jour dans <lastBuildDate>. C'est ce que disent les specs mais je n'ai jamais testé.

En règle générale, les gens ne modifient pas le fichier XML mais se contentent d'en générer un nouveau (plus pratique) donc ils ne s'embêtent pas avec la manipulation XML. Néanmoins, si tu veux manipuler du XML, utilise SimpleXML plutôt que DOM. Tout n'est pas possible avec SimpleXML, si tu veux utiliser des méthodes DOM tu peux utiliser ce truc hybride que j'ai écrit. Pas de docs, il faut lire les commentaires des méthodes dans le fichier, mais tu peux effacer un nœud d'après une expression XPath de cette façon
$rss = simplexml_load_file('monrss.xml', 'SXE');
$rss->deleteNodes('//channel/item[title = Test]');
Ceci dit, je recommanderais plutôt de générer un nouveau fichier à chaque modification.

Posté : 31 janv. 2008, 15:12
par lux
Alors, oui j'update lastBuildDate à chaque ajout.

Donc le plus simple serait effectivement de recréer le fichier xml à chaque ajout / modification / effaçage de news. Je peux faire ça facilement, je fais mon insert dans le xml, après l'insert en base de donnée.

Ça ne sera pas trop lourd pour le serveur, niveau connexion à la base de donnée etc... (encore que je crois que pour l'instant je ne parle que de maximum environ 100 news par an, et encore ...) ?
Il va devoir récupérer le contenu de 3-4 champs à chaque fois.

Posté : 31 janv. 2008, 15:35
par Hubert Roksor
Si tu régénères ton fichier XML à chaque modification des news (ajout/suppression/etc...) et non à chaque lecture alors non, aucune problèm. En fait, en terme de performances tu es déjà un cran au dessus de la plupart des utilisateurs, qui utilisent PHP+SQL pour chaque lecture du RSS :roll:

Avec ce système, tu pourrais sans problèmes faire un RSS de 50 news mises à jour 10 fois par jour sur un hébergeur mutualisé à 2€/mois :P

Posté : 31 janv. 2008, 15:43
par lux
Okay facile. Comme ça ça à l'air simple. Bon ben j'ai ma solution, qui tiendra en même pas 20 ligne de code :P. Merci Merci beaucoup ça m'aide grandement.


(P.S. y a des gens qui utilisent php/mysql pour recréer le fichier xml à chaque lecture ? J'aurais meme pas pensé à faire ça moi :P )

Posté : 31 janv. 2008, 16:01
par Hubert Roksor
Ils ne créent pas vraiment de fichier, au lieu de créer un fichier "rss.xml" sur le disque avec file_put_contents() ils affichent le résultat par un script "rss.php".

Au fait, en parlant de performance, pour ceux qui tomberont sur ce sujet lors d'une recherche future : un fichier statique est au minimum 10 fois plus rapide qu'un script PHP.

Posté : 31 janv. 2008, 16:06
par lux
Ha okay je vois, j'avais un script comme ça, qui faisait un rss pour phpbb si je me souviens bien.
Et c'est clair que le fichier xml statique sera 10 fois plus rapide à la lecture.

Merci encore :wink: