我与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
这很好用,我得array
形式object
我可以随意使用它。现在问题就在这里。我运行的代码几乎与上面相同,只是想要检索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中运行相同的代码,我会得到如下响应:
这对我来说似乎很奇怪,我无法弄清楚为什么会这样。请帮助,我确实需要url
形式的array
。
更新
我在Network
Inspect
工具的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)
返回Facebook
。当我在浏览器中输入相同的URL时(当然,我输入真正的应用ID,而不是变量),它会显示应用程序图标。似乎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)
它返回'Data'
时,却没有图片,也没有网址导致应用图片。
答案 0 :(得分:0)
您正在错误地解释调试信息。 FacebookResponse是一个包含您从FB收到的响应的类,作为您的请求的答案,您的请求包含在FacebookRequest实例中。
所以FacebookRequest(可能)是你的第一个电话,而FacebookResponse只是对它的回应。
答案 1 :(得分:0)
我找到了一种方法来检索应用程序图标的网址,这很有趣。如果你仔细观察Inspect
给我的图像,你会看到Decoded Body
真的是一个空阵列,天知道为什么。但Headers
对象的一部分确实有Location
,即导致应用程序图标的网址。因此,我使用getDecodedBody()
代替getHeaders()
方法而获得了带有Locations
键值的数组。