当我通过浏览器访问此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内容,说不支持浏览器。
答案 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;
}