2009-10-04 335 views
3

http://www.facebook.com/feeds/share_posts.php?id=207302593&viewer=207302593&key=d95b2de790&format=rss20我在使用simplexml解析Facebook feed時遇到了問題

上面的鏈接是我在Facebook上共享帖子的URL。當我將該URL加載到simplexml_load_file()時,它提供了一整頁錯誤。看看這些錯誤,它看起來像Facebook正在吐出HTML而不是feed。我認爲這是一個身份驗證問題,但我註銷了Facebook並將供稿網址加載到我的瀏覽器中,我能夠看到供稿。這是我得到的錯誤。有任何想法嗎?謝謝!

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" /> 

... 

回答

12

重新定義「feed」Facebook的方式。試試這個,看一看在下載頁面

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

它看起來像Facebook正在做的用戶代理嗅探,和拒絕任何「瀏覽器」(在這種情況下PHP的瀏覽器),它不認爲可以處理它的頁面。他們在Feed上做這件事有點奇怪,但扎克伯格以神祕的方式工作。 (這樣做是爲了防止屏幕抓取是一回事,但Feed卻含蓄地指向機器讀取)

您將要設置您的用戶代理字符串以匹配Facebook支持的瀏覽器。當我需要這樣做時,我用curl下載文件(curl有很多選項可以設置http頭文件)。

如果捲曲是不是你的東西,你可以重寫PHP的默認用戶代理與一個ini設置

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

的作品就像一個魅力!不能相信這是一個不常見的問題o.O – yoshi 2012-01-19 15:20:08