2016-03-15 79 views
0

我有Graph API response奇怪的问题。我有以下调用Graph APIgetDecodedBody()不解析对象(原始图形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 iconurl

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

UPDATE: 我看着有点多在Inspect工具Network部分,这两个调用似乎不同。在这里,您可以看到:

enter image description here

似乎到Graph API第一呼叫使用Facebook/FacebookResponse类和第二Facebook/FacebookRequest。我一找到这个文件,就立刻打开了文档,看到Facebook/FacebookRequest里面没有getDecodedBody()这样的方法。但是,当我从上面的代码我得到一个array但空(当然,在做getDecodedBody()后)。

UPDATE 我也试过这样:

$url="https://graph.facebook.com/$apid/picture"; 
$app_icon = file_get_contents($url); 
var_dump($app_icon); 

返回bool(false)。当我在浏览器中输入相同的网址时(当然,我输入了真实的应用程序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),但没有图片,也没有链接导致应用程序的图片。

回答

0

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

0

您正在错误地解释调试信息。 FacebookResponse是一个包装你从FB收到的回复作为你的请求的答案的类,并且你的请求被包装在FacebookRequest实例中。

因此,FacebookRequest(可能)是您的第一个电话,而FacebookResponse只是它的回应。

+0

第一个对象,当我做'var_dump($ appName)'时,第二次当我做'var_dump($ appPic)'。纠正我,如果我错了,但我不同意你的答案。这甚至不是那么重要,除了这个解释之外,我想获得关于如何解析血腥对象的帮助,这样我就可以将url带到app的图标上。 –