【问题标题】:getDecodedBody() not parsing object(raw Graph API response) rightgetDecodedBody() 不解析对象(原始图形 API 响应)对
【发布时间】:2016-03-15 07:54:26
【问题描述】:

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

这很好用,我从object 得到array,我可以随意使用它。现在问题来了。我运行与上面几乎相同的代码,只是想检索urlapp'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 中运行相同的代码,我会得到如下响应:

这对我来说似乎很奇怪,我无法弄清楚为什么会发生这种情况。请帮忙,我真的需要array 形式的url

更新: 我在Inspect 工具的Network 部分看了更多,这两个调用似乎有所不同。在这里你可以看到如何:

似乎第一次调用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)。当我在浏览器中输入相同的 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);它返回bool(true),但是没有图片,也没有通往应用图片的url。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 第一个对象是我做var_dump($appName) 时得到的,第二个是我做var_dump($appPic) 时得到的。如果我错了,请纠正我,但我不同意你的回答。这甚至不是那么重要,除了这个解释之外,我想获得有关如何解析血腥对象的帮助,以便我可以将 url 带到应用程序的图标。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 2011-08-09
      • 2021-08-10
      • 1970-01-01
      • 2020-10-04
      • 2017-09-05
      • 1970-01-01
      • 2019-12-05
      • 2013-09-19
      相关资源
      最近更新 更多