2009-10-04 5 views
3

http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20Je vais avoir du mal à l'analyse d'un flux facebook en utilisant simplexml

Le lien ci-dessus est l'URL à mes messages partagés sur Facebook. Lorsque je charge cette URL dans simplexml_load_file(), elle fournit une page entière d'erreurs. En regardant les erreurs, il semble que Facebook crache HTML au lieu du flux. Je pensais que c'était un problème d'authentification, mais je me suis déconnecté de Facebook et chargé l'URL de flux dans mon navigateur et j'ai pu voir le flux. Voici les erreurs que je reçois. Des idées? Merci!

A PHP Error was encountered 

Severity: Warning 

Message: simplexml_load_file() [function.simplexml-load-file]: http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20:12: parser error : AttValue: " or ' expected 

Filename: models/Stream.php 

Line Number: 55 

A PHP Error was encountered 

Severity: Warning 

Message: simplexml_load_file() [function.simplexml-load-file]: </script><noscript> <meta http-equiv=refresh content="0; URL=?_fb_noscript=1" /> 

... 

Répondre

12

Façon de redéfinir "feed" Facebook. Donnez à ce essayer, et jeter un oeil à la page téléchargée

echo file_get_contents('http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20'); 

On dirait que Facebook est en train de faire renifler User-Agent, et rejeter tout « navigateur » (dans ce cas PHP est le navigateur), il ne pense pouvoir gérer ses pages. Ce qu'ils font sur les feeds est un peu bizarre, mais Zuckerberg travaille de manière mystérieuse. (le faire pour empêcher le raclage de l'écran est une chose, mais les flux sont implicitement destinés à être lus par les machines)

Vous devez définir votre chaîne d'agent utilisateur pour correspondre à un navigateur pris en charge par Facebook. Lorsque j'ai besoin de faire cela, je l'utilisateur curl pour télécharger le fichier (curl a une tonne d'options pour la configuration des en-têtes http).

Si boucle n'est pas votre truc, vous pouvez remplacer l'agent utilisateur par défaut de PHP avec un ini réglage

ini_set('user_agent', 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3'); 
+0

fonctionne comme un charme! Je ne peux pas croire que c'est un problème rare o.O – yoshi

Questions connexes