2011-03-13 23 views
1

我想解析來自公共Facebook粉絲頁面牆的消息,但它返回一個空白頁。解析Facebook牆的DOM

$source = "http://www.facebook.com/?sk=wall&filter=2"; 
libxml_use_internal_errors(TRUE); 
$dom = new DOMDocument(); 
$dom->loadHTML($source); 
$xml = simplexml_import_dom($dom); 
libxml_use_internal_errors(FALSE); 
$message = $xml->xpath("//span[@class='messageBody']"); 

return (string)$message[0] . PHP_EOL; 

回答

1

另一種方法是從圖形API

$posts = json_decode(
    file_get_contents('https://graph.facebook.com/swagbucks/posts') 
); 
foreach($posts->data as $post) { 
    echo $post->message, PHP_EOL; 
} 
+0

我也喜歡這種方法。我感謝你的貢獻。 – jennifer 2011-03-13 12:41:43

+0

@jennier:請注意,用這種方法你需要處理分頁。 – ifaour 2011-03-13 12:53:33

+0

@ifaour只有當你想要比第一頁上的東西更多時。鑑於她試圖通過DOM獲取帖子,假設@jennifer並不在乎比頁面上的更多。 – Gordon 2011-03-13 12:55:29

2

DOMDocument::loadHTML()方法,它使用的是,預計HTML內容作爲一個參數 - 而不是URL。

這裏,您試圖將您的URL解釋爲一些HTML內容 - 而不是它鏈接到的內容。


使用此方法時,您可能想嘗試使用一個適用於文件或remonte內容的文件,如DOMDocument::loadHTMLFile()

+0

+1我完全看過去是使用JSON! – alex 2011-03-13 11:54:55

2

這是而不是從Facebook獲取數據的正確方法,顯然您希望避免創建Facebook應用程序。

但好消息是,你仍然可以使用FQL,請嘗試在Graph API Explorer下面的查詢。

在下面的查詢,我們質疑stream表得到Facebook Developers頁的公共提要:

SELECT message 
FROM stream 
WHERE source_id=19292868552 
AND is_hidden = 0 
AND filter_key='owner' 

這將返回所有「公共」頁面的飼料。很明顯,您可能需要檢索更多字段才能創建有意義的結果。


您需要提供一個有效的access_token甚至訪問公共職位。閱讀更多here

+0

哇!謝謝。 – jennifer 2011-03-13 12:26:15