【发布时间】:2016-03-15 07:54:26
【问题描述】:
Graph API response 有一个奇怪的问题。我有以下电话给Graph API:
try{
$appName=$fb->get('/'.$apid, $apid.'|'.$apsec);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
//echo 'Graph returned an error: ' . $e->getMessage();
//echo 'Graph returned an error: ' . $e->getHttpStatusCode();
if($e->getHttpStatusCode()=='400'){
echo json_encode('2');
}
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$appName=$appName->getDecodedBody();//app data returned as array
这很好用,我从object 得到array,我可以随意使用它。现在问题来了。我运行与上面几乎相同的代码,只是想检索url 的app's icon:
try{
$appPic=$fb->get('/'.$apid.'/picture', $apid.'|'.$apsec);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
// When Graph returns an error
echo 'Graph returned an error: ' . $e->getMessage();
echo 'Graph returned an error: ' . $e->getHttpStatusCode();
if($e->getHttpStatusCode()=='400'){
echo json_encode('2');
}
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
// When validation fails or other local issues
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$appPic=$appPic->getDecodedBody();
print_r($appPic);
这将返回一个空数组。但如果在 Graph API Explorer 中运行相同的代码,我会得到如下响应:
这对我来说似乎很奇怪,我无法弄清楚为什么会发生这种情况。请帮忙,我真的需要array 形式的url。
更新:
我在Inspect 工具的Network 部分看了更多,这两个调用似乎有所不同。在这里你可以看到如何:
似乎第一次调用Graph API 使用Facebook/FacebookResponse 类,第二次调用Facebook/FacebookRequest。我一发现这个就点击了文档,发现Facebook/FacebookRequest 内部没有getDecodedBody() 这样的方法。但是当我从上面的代码中var_dump($appPic) 时,我确实得到了一个array 但为空(当然,在执行getDecodedBody() 之后)。
更新 我也试过这个:
$url="https://graph.facebook.com/$apid/picture";
$app_icon = file_get_contents($url);
var_dump($app_icon);
返回bool(false)。当我在浏览器中输入相同的 url 时(当然,我输入的是真实的应用程序 ID,而不是变量),它会显示应用程序图标。似乎Facebook 不允许file_get_contents 从他们的服务器获取数据的方式。我也试过用cURL做同样的事情,像这样:
$url="https://graph.facebook.com/$apid/picture";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, false);
$result=curl_exec($ch);
if(!$result){
echo ('cURL ERROR: '.curl_error($ch));
}
var_dump($result);
curl_close($ch);
但是当我var_dump($result);它返回bool(true),但是没有图片,也没有通往应用图片的url。
【问题讨论】:
标签: php facebook facebook-graph-api curl facebook-php-sdk