Hello,
> La colle du jour : je reçois un fil RSS qui encode toutes
ses données
> dans des champs CDATA, comme ci-dessous.
>
> <item rdf:about="monsite.com - Ce site web est à vendre ! - Ressources et information concernant monsite Resources and Information.;
> <title><![CDATA[titre]]></title>
> <link><![CDATA[monsite.com - Ce site web est à vendre ! - Ressources et information concernant monsite Resources and Information.]]></link>
> <description><![CDATA[texte.]]></description>
> <dc:date>2003-11-20T11:02:49 CET</dc:date>
> </item>
Si tu donnes une URL d'exemple pour ce genre de fil RSS, ce sera
beaucoup plus facile à mettre en place dans SPIP...
Amicalement
Salut,
Je ne peux pas donner d'URL, c'est sur un intranet.
J'ai épluché le code de spip et regardé comment vous faites dans ecrire/inc_sites.php3 (merci Fil pour m'avoir fait gagner du temps en me disant où trouver le code). En fait le problème vient des expressions régulières utilisées pour parcourir le RSS (enfin je crois). Par exemple pour ouvrir un champ titre on a :
ereg('<title[^>]*>(([^<]|<[^/]|</[^t]>|</t[^i]>)*)</title>', $channel, $r)
Pour spip tout ce qui commence par un crochet ouvrant est donc exclu de la récupération de données. D'où le fait qu'il me dise que le site ' ' (sans nom) a zéro articles syndiqués : l'URL du RSS existe mais pour spip il y a zéro données exploitables dedans.
Je suis assez d'accord avec André Vincent pour dire que c'est de la flemme, mais là on n'a pas le choix : les données sortent comme ça d'un outil sur lequel je n'ai ni la main ni le pouvoir de faire changer les choses.
J'ai créé un nettoyeur de RSS qui fait les opérations suivantes :
- aspire le fichier RSS
- supprime à la louche tous les '<![CDATA[' et ']]>' :
$str = preg_replace("/<!\[CDATA\[|\]\]>/","",$str);
- fait un echo du résultat
C'est le résultat de ce nettoyeur que je syndique avec spip.
Pour l'instant je ne sais pas si ça vaut le coup qu'on intègre ce genre de modif dans spip, je ne suis pas sûr de voir encore toutes les implications de la suppression des blocs cdata, en particulier en ce qui concerne l'intégrité et le format des données au final. Normalement ça ne devrait pas poser de problème puisque l'encodage du fil est (au moins) en iso-8859-1, mais je ne me suis pas posé plus largement la question (par exemple avec de l'UTF-8).
Hypothèse de travail pour spip : ligne 106 de ecrire/inc_sites.php3 on a la fonction analyser_site(), peut-être qu'une fois le fil récupéré on pourrait supprimer les indications de CDATA avant de parser le reste du fichier.
Mais encore une fois je crains des effets de bord imprévus. S'il y a des cadors en XML c'est le moment qu'ils l'ouvrent... 
Cordialement,
Stéphane