2016-03-15 77 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的圖標上。 –