getDecodedBody()没有正确解析对象(原始图谱API响应)

时间:2016-03-15 07:54:26

标签: php facebook facebook-graph-api curl facebook-php-sdk

我与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中运行相同的代码,我会得到如下响应: enter image description here

这对我来说似乎很奇怪,我无法弄清楚为什么会这样。请帮助,我确实需要url形式的array

更新 我在Network Inspect工具的Graph API部分看了一下,这两个看起来似乎有所不同。在这里你可以看到:

enter image description here

似乎第一次调用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'时,却没有图片,也没有网址导致应用图片。

2 个答案:

答案 0 :(得分:0)

您正在错误地解释调试信息。 FacebookResponse是一个包含您从FB收到的响应的类,作为您的请求的答案,您的请求包含在FacebookRequest实例中。

所以FacebookRequest(可能)是你的第一个电话,而FacebookResponse只是对它的回应。

答案 1 :(得分:0)

我找到了一种方法来检索应用程序图标的网址,这很有趣。如果你仔细观察Inspect给我的图像,你会看到Decoded Body真的是一个空阵列,天知道为什么。但Headers对象的一部分确实有Location,即导致应用程序图标的网址。因此,我使用getDecodedBody()代替getHeaders()方法而获得了带有Locations键值的数组。