在PHP中抓取facebook粉丝页面


Scrape facebook fan page in PHP

我试图在php中使用curl抓取facebook粉丝页,但它只是给我一个空白页。这是我的代码。

function curlFunction($source_url){
  $ch = curl_init();
  $userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1';
  curl_setopt($ch, CURLOPT_USERAGENT,       $userAgent);
  curl_setopt($ch, CURLOPT_URL,             $source_url);
  curl_setopt($ch, CURLOPT_HEADER,      false);
  curl_setopt($ch, CURLOPT_FAILONERROR,     true);
  curl_setopt($ch, CURLOPT_ENCODING,        "UTF-8" );
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION,  true);
  curl_setopt($ch, CURLOPT_AUTOREFERER,         true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,  true);
  curl_setopt($ch, CURLOPT_TIMEOUT,             60);
  $html= curl_exec($ch);
  curl_close($ch);
  return $html;
}   
$token = "CAACEdEose0cBADMEK5uLLfSTj1nZCG8eogAZBi6Dfkr4gJN9o6fFuyfEHkPtO94br9i9YP9gmiYPunHxRxr1PqU3YNy34PziACwEaMXl4NT9zZBMgdWD6WFh6mAL2dlqsjnYs9sKQ5sz7ZCVBn7ZA8lVrZCJRq8O0ZD";
$url = "https://graph.facebook.com/StarHub/feed?accesstoken=" . $token;
$html = curlFunction($url, $info);
echo $html;

我已经使用这个功能到其他网站刮页,它工作得很好。然后我遇到了这个问题,当我使用HTTPS时,它会给我空白页面,但当我只使用HTTP时,它工作得很好,但facebook graph API要求我使用HTTPS来获取内容。

页面是公开的,即使使用App Access令牌也可以读取提要。尝试像这样更改访问令牌:

$token = "APP-ID|APP-SECRET";

(App ID和App Secret,中间有一个Pipe)

这是唯一的令牌永远不会过期,只有当你改变ID或你的应用程序的秘密。

PHP SDK的另一个解决方案:
$result = $facebook->api('/PAGE-ID/feed', array('access_token' => 'APP-ID|APP-SECRET'));
var_dump($result['data']);

你甚至可以在没有访问令牌的情况下做到这一点,如果没有用户被授权,它应该使用应用程序访问令牌。

问题似乎是由于无效的访问令牌,服务器返回400错误请求错误。这反过来导致curl返回一个空字符串,因为

CURLOPT_FAILONERROR

选项。关于这个和其他curl选项,请参阅此处的描述。

下面的代码返回与对相同URL的常规浏览器请求相同的结果:

function curlFunction($source_url){
  $ch = curl_init();
  $userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1';
  curl_setopt($ch, CURLOPT_USERAGENT,       $userAgent);
  curl_setopt($ch, CURLOPT_URL,             $source_url);
  curl_setopt($ch, CURLOPT_HEADER,      false);
  curl_setopt($ch, CURLOPT_FAILONERROR,     true);
  curl_setopt($ch, CURLOPT_ENCODING,        "UTF-8" );
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION,  true);
  curl_setopt($ch, CURLOPT_AUTOREFERER,         true);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,  true);
  curl_setopt($ch, CURLOPT_TIMEOUT,             60);
  $html= curl_exec($ch);
  curl_close($ch);
  return $html;
}   
$token = "CAACEdEose0cBADMEK5uLLfSTj1nZCG8eogAZBi6Dfkr4gJN9o6fFuyfEHkPtO94br9i9YP9gmiYPunHxRxr1PqU3YNy34PziACwEaMXl4NT9zZBMgdWD6WFh6mAL2dlqsjnYs9sKQ5sz7ZCVBn7ZA8lVrZCJRq8O0ZD";
$url = "https://graph.facebook.com/StarHub/feed?accesstoken=" . $token;
$html = curlFunction($url, $info);
echo $html;