getDecodedBody() 不解析对象(原始图形 API 响应)正确
getDecodedBody() not parsing object(raw Graph API response) right
我遇到了 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
并且我可以随意使用它。现在问题来了。我 运行 几乎与上面相同的代码,只是想检索 app's icon
:
的 url
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);
这个returns一个空数组。但是如果 运行 Graph API Explorer 中的相同代码,我会得到这样的响应:
我觉得这很奇怪,我不明白为什么会这样。请帮忙,我真的需要 array
形式的 url
。
更新:
我仔细查看了 Inspect
工具的 Network
部分,这两个调用似乎有所不同。在这里你可以看到如何:
似乎第一次调用 Graph API
使用 Facebook/FacebookResponse
class 和第二个 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);
Returnsbool(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);
的时候returnsbool(true)
但是没有图片,也没有url导致app图片。
您对调试信息的解释不正确。 FacebookResponse 是一个 class 包装你从 FB 收到的响应作为你的请求的答案,你的请求被打包在 FacebookRequest 实例中。
所以 FacebookRequest(可能)是您的第一个调用,而 FacebookResponse 只是对它的响应。
我找到了一种方法来检索 url 到应用程序图标,这很有趣。如果你仔细观察 Inspect
给我的图像,你会发现 Decoded Body
真的是一个空数组,天知道为什么。但是对象的 Headers
部分确实有 Location
即通向应用程序图标的 url。因此,我没有使用 getDecodedBody()
方法,而是使用了 getHeaders()
并获得了具有 Locations
键值的数组。
我遇到了 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
并且我可以随意使用它。现在问题来了。我 运行 几乎与上面相同的代码,只是想检索 app's icon
:
url
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);
这个returns一个空数组。但是如果 运行 Graph API Explorer 中的相同代码,我会得到这样的响应:
我觉得这很奇怪,我不明白为什么会这样。请帮忙,我真的需要 array
形式的 url
。
更新:
我仔细查看了 Inspect
工具的 Network
部分,这两个调用似乎有所不同。在这里你可以看到如何:
似乎第一次调用 Graph API
使用 Facebook/FacebookResponse
class 和第二个 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);
Returnsbool(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);
的时候returnsbool(true)
但是没有图片,也没有url导致app图片。
您对调试信息的解释不正确。 FacebookResponse 是一个 class 包装你从 FB 收到的响应作为你的请求的答案,你的请求被打包在 FacebookRequest 实例中。
所以 FacebookRequest(可能)是您的第一个调用,而 FacebookResponse 只是对它的响应。
我找到了一种方法来检索 url 到应用程序图标,这很有趣。如果你仔细观察 Inspect
给我的图像,你会发现 Decoded Body
真的是一个空数组,天知道为什么。但是对象的 Headers
部分确实有 Location
即通向应用程序图标的 url。因此,我没有使用 getDecodedBody()
方法,而是使用了 getHeaders()
并获得了具有 Locations
键值的数组。