2010-11-09 9 views
2

Je travaille actuellement sur une application qui utilise simplexml de php pour interpréter les flux rss à partir de plusieurs sites. J'ai réussi à faire en sorte que cela fonctionne avec les flux Atom et RSS, mais un flux ne fonctionne que parfois, ce qui n'a pas vraiment de sens. Le flux est situé http://www.popsci.com/rss.xml. Je me demande si le flux lui-même est mal formé, ou s'il y a quelque chose qu'il fait qui est valide, mais inhabituel. Je l'ai regardé de haut en bas, mais je ne trouve rien de mal. Mon code interprète parfaitement d'autres flux, donc je me demande pourquoi celui-ci lui pose problème. Et seulement parfois. Ce que je veux dire par là, c'est que parfois il va réussir à interpréter le flux, mais d'autres fois, l'appel à simplexml_load_file() échoue et renvoie false.Flux RSS malformé/fichier XML?

J'ai un journal d'erreurs et c'est ce qui a été rapporté (la même chose à chaque fois qu'il échoue):

[08-Nov-2010 03:30:17] PHP Warning: simplexml_load_file() [ function.simplexml-charge-file]: http://www.popsci.com/rss.xml:1: erreur d'analyse: tag Lancer attendu, '<' ne trouve pas dans /Applications/MAMP/cmb/cron.php en ligne 15

[08-nov-2010 03:30 : 17] PHP Avertissement: simplexml_load_file() [function.simplexml-load-file]: dans /Applications/MAMP/cmb/cron.php à la ligne 15

[08-Nov-2010 03:30:17] Avertissement PHP: simplexml_load_file() [function.simplexml-load-file]:^dans /Applications/MAMP/cmb/cron.php à la ligne 15

Mais je ne suis pas sûr de savoir quoi faire de ces erreurs, et j'apprécierais si quelqu'un pouvait me diriger dans la bonne direction. Merci! (Ligne PS 15 cron.php est l'appel à simplexml_load_file())

+0

L'alimentation est bonne. Si je tire le fichier avec curl et j'essaie 'php -r 'echo simplexml_load_file (" rss.xml ") -> channel-> title;' 'il imprime le titre. Si j'utilise l'URL, en double citation, elle donne vos erreurs. Avec l'URL entre guillemets simples, cela fonctionne. Je ne suis pas un expert PHP: je ne sais pas pourquoi cela fait une différence. Peut-être que quelqu'un peut expliquer. –

+0

Nevermind: les citations ne font pas de différence. Cela varie avec le temps. Cela semble avoir quelque chose à voir avec la compression: parfois c'est gzippé et parfois non. –

Répondre

1

Les chances sont qu'il ya des personnages unescaped dans l'alimentation, les suspects habituels sont le caractère &, le "caractère et la < et>, tous Malheureusement, la seule chose que vous pouvez réellement faire est de vous plaindre à l'éditeur de flux de données douteuses dans leur flux, car les analyseurs syntaxiques XML sont explicitement concernés. Il est interdit de tenter d'analyser du XML malformé, ils sont censés se terminer et générer une erreur

+0

Ce que celui-ci fait. Je ne comprends toujours pas pourquoi ça marche PARFOIS ... mais ok. En ce moment, c'est juste une erreur, c'est comme ça que je devrais le deviner. – williamg

+0

L'exécution du flux via le validateur de flux de W3 produit des résultats intéressants ... http://validator.w3.org/feed/check.cgi?url=http%3A%2F%2Fwww.popsci.com%2Frss.xml – GordonM

1

pour les faire passer à travers le brûleur d'alimentation.

C'est un outil google qui va standardiser la sortie pour vous et a corrigé des erreurs pour moi dans le passé.

  1. Coller dans l'alimentation ici: http://feedburner.google.com/fb/a/myfeeds * vous devrez vous connecter à votre compte Google
  2. Cliquez sur suivant, suivez les instructions et il vous donnera une url
  3. remplacer cette url dans votre script

espoir qui fonctionne pour vous :)

Jase