2012-11-03 67 views
4

當我去的網址,通過瀏覽器,它讓我看到JSON提要我想到:Facebook頁面飼料不與PHP的file_get_contents()工作

https://www.facebook.com/feeds/page.php?format=json&id=237173582992285

當PHP我做了

<?php 
print_r(file_get_contents('https://www.facebook.com/feeds/page.php?format=json&id=237173582992285')); 
?> 

我得到一個HTML頁面,說我的瀏覽器是不是Facebook的支持,我應該升級。我如何讓file_get_contents返回我期待的json feed?

附加說明我也嘗試從bash wget https://www.facebook.com/feeds/page.php?format=json&id=237173582992285和我下載的文件也有HTML內容說瀏覽器不支持。

+0

用戶捲曲...... – Eugen

+0

使用捲曲併爲瀏覽器設置標題。 Facebook已檢查該頁面是否只能在瀏覽器中打開 – Jashwant

+0

這是'httpS'鏈接,請注意SSL的S,您需要在cacert.pem中使用curl,或在'file_get_contents'中使用SSL。 – adeneo

回答

7

試試這個,它爲我工作

$ch = curl_init("https://www.facebook.com/feeds/page.php?format=json&id=237173582992285"); 
    curl_setopt($ch, CURLOPT_POST, false); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    $data = curl_exec($ch); 
    echo $data; 

正如指出由@邁克爾Mior,它違反了Facebook的條款。但是,這是 您的問題的答案,Facebook有一個簡單的檢查,以確保 頁面應該由瀏覽器打開,因此我們模仿 設置useragent標題。

+0

請注意,這違反了Facebook的服務條款。 –

+0

嗯,好的複製粘貼技巧.....:/ – Eugen

+0

我發佈了這個代碼10分鐘前..... – Eugen

0
function load_url($url) { 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_POST, false); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'); 
    $received_data = curl_exec($ch); 
    if($received_data){ 
    return $received_data; 
    } else { 
    return false; 
} 
} 
+1

如果您嘗試過此操作,則會看到它對於相關網址無效。 –

+0

如果您使用更新後的版本,您違反了Facebook的服務條款。但它應該工作:) –

+0

是的,它的工作原理!嘗試,投票前! – Eugen

2

您應該改用Facebook API。 Graph API Explorer應該幫助您開始以及Pages API上的文檔。

這些提要旨在供RSS閱讀器使用,不能用於腳本。理論上你可以解決這個問題,通過改變User-Agent頭,但是這是對Facebook的terms of service

你不會收集用戶的內容或信息,或以其他方式 訪問Facebook,使用自動方式(如收割機器人, 機器人,蜘蛛或刮板)未經我們事先許可。

2

要得到你應使用其相應的連接,也就是任何有效access_tokenfeed連接一個網頁的公開信息。

因此,要獲得您提到的網頁的公共提要,請使用/237173582992285/feed。更進一步,你可以選擇只得到你所需要的數據,例如/237173582992285?fields=feed.fields(message,type,status_type)會導致類似:

{ 
    "id": "237173582992285", 
    "feed": { 
    "data": [ 
     { 
     "message": "???? ???? ???? :) - ??? <3", 
     "type": "photo", 
     "status_type": "added_photos", 
     "id": "237173582992285_461226513920323", 
     "created_time": "2012-11-03T12:46:20+0000" 
     }, 
     { 
     "message": "?????? ????? ? ???? ???? ????? ?? ??????? ? ????? ???? ??????? ????? ???? ???????? ????????? :D :D :D - ??? <3", 
     "type": "photo", 
     "status_type": "added_photos", 
     "id": "237173582992285_457876184255356", 
     "created_time": "2012-10-26T09:43:01+0000" 
     }, 
     ....etc 
    ], 
    "paging": { 
     "previous": "https://graph.facebook.com/237173582992285/feed?fields=message,type,status_type&limit=25&since=1351946780", 
     "next": "https://graph.facebook.com/237173582992285/feed?fields=message,type,status_type&limit=25&until=1348763989" 
    } 
    } 
} 

瞭解更多關於頁面終點here