Facebook页面提要不适用于php file_get_contents()

时间:2012-11-03 20:10:27

标签: php json facebook-page

当我通过浏览器访问此URL时,它会显示我期望的json提要:

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内容,说不支持浏览器。

5 个答案:

答案 0 :(得分: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;
  

正如@Michael Mior指出的那样,它违反了facebook的条款。但这是   对你的问题的答案,facebook有一个简单的检查,以确保   该页面应该由浏览器打开,因此我们正在模仿它   设置useragent标题。

答案 1 :(得分:2)

您应该使用Facebook API。 Graph API Explorer应该可以帮助您入门,以及Pages API上的文档。

Feed旨在供RSS阅读器使用,而不是脚本使用。理论上你可以通过更改User-Agent标题解决这个问题,但这是针对Facebook的terms of service

  

您不会收集用户的内容或信息,也不会收集其他信息   访问Facebook,使用自动化手段(如收获机器人,   未经我们事先许可,机器人,蜘蛛或刮刀。

答案 2 :(得分:2)

要获取网页的公开信息,您应该使用与任何有效feed access_token连接的相应连接。

因此,要获取您提到的页面的公共供稿,请使用/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"
    }
  }
}

详细了解Page end-point here

答案 3 :(得分: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;
 }
}

答案 4 :(得分:0)

 function get_facebook_id($facebookUrl)
 {
 $ch = curl_init($facebookUrl);
 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 );
 $fbResponse = curl_exec( $ch );
if($fbResponse)
{
    $matches = array();
    if (preg_match('/"entity_id":"([0-9])+"/', $fbResponse, $matches))
    {
        $jsonObj = json_decode("{" . $matches[0] . "}");
        if($jsonObj)
        {
            $facebookId = $jsonObj->entity_id;
        }
    }
}
return $facebookId;
}