某些用户的相册图片返回不支持的获取请求,其他工作正常

时间:2011-11-28 17:02:35

标签: flash facebook-graph-api facebook-fql

我正在完成一个Flash应用程序。你可以在这里看到这个应用程序:

https://apps.facebook.com/wacky-winter-woolies/

应用程序发送FQL查询以获取用户的相册,根据cover_object_id生成缩略图。这部分工作正常。点击相册后,应用程序会以相同的方式加载照片缩略图。我们刚刚发现虽然它通常有效,但对于某些人和一些照片而不是缩略图,facebook会返回以下错误:

  

{“error”:{“message”:“不支持的获取请求。”,“类型”:   “GraphMethodException”}}图片

照片缩略图请求网址:

  

https://graph.facebook.com/(object_id)/picture?type=thumbnail&access_token=(valid_token

用于生成相册中照片列表的查询:

  

var fql:String =“SELECT object_id,help FROM photo WHERE aid = \”“+ aid +”\“”;

该应用的权限:

  

'permissions'=> 'publish_stream,user_photos,friends_photos'

基本上有些照片会返回错误。照片的object_id是有效的,因为它是从FQL结果中直接拉出的 - 这是一个返回错误的实际请求的示例,带有令牌

https://开头 graph.facebook.com/10150102643214148/picture?type=thumbnail&access_token=AAACJlS1owXcBAAh9KIBAYDobeWAvcuHdr96DHYpJJafhHjianz07jWZBYj6klqqZC4cYA2ZCOxTt2fOXCNAH4GBZCPK75nlLdZCZA8xfW2xgZDZD

(注意:添加空格是因为作为新用户我不能发布超过2个链接)

造成这种情况的原因是什么?如何解决这个问题?


Edit1:

这很有趣。

以下是一组图片的原始object_id。其中一个是无效的。猜猜哪个?

  • 387476299148
  • 387476299148
  • 10150102643214148
  • 492300644148
  • 492300644148

由于某些原因,相册中的某些图片FQL会返回异常长的object_id。那些长的object_id是无效的。

正如你所看到的那样,有效和无效的ID都以类似的顺序结束--148。即使我将结果作为字符串处理并且没有从结果中删除任何字符,因此facebook可能会向我发送10150_102643214148而不是滑落。

目前我只是扔掉了无效的ID。我希望这足以防止空白照片和facebook不会使用任何更多虚假数据中毒我的查询结果。


Edit2:出于某种原因,上述方法不起作用。有些图片仍然会导致错误。幸运的是,FQL表具有“src_small”和“src_large”等属性,这些属性返回了照片的直接链接。尽管图表应该允许使用它的API检索任何图像,但我必须回退到查询的src结果 - 我想这对于像这样的情况来说是一种补丁。

简而言之,Facebook的GRAPH API已被破坏。我希望很快得到修复。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。经过2个小时的忙碌之后,我发现有些专辑有时会没有身份证的封面照片(或者没有封面照片)。

在我的循环中放入if语句,以便在调用api()函数之前查看是否确实存在ID,它处理了这个问题。

以下是我的一个课程中的4个相关功能。 (我会尝试大胆下面的具体行,但我是张贴到这个网站的新人:

public function callAPI($path){
    $params = array('access_token' => $this->access_token);
    $results = $this->_facebookObj->api($path, 'GET', $params );
    return $results;
}

public function listAlbums(){
    $data = $this->_getAlbumsData();
    echo '<ul>';
    try{
    foreach($data as $key => $value){
        if(isset($value['coverPhotoID'])) { $coverImage = $this->getImageInfo($value['coverPhotoID']);}
        echo '<li><img src="' . $coverImage['thumb'] . '"></li>';
        echo '<li>' . $value['albumTitle'] . '</li>';
        if(isset($value['albumDescription'])){echo '<ul><li>Description: ' . $value['albumDescription'] . '</li></ul>';}
    }
    } catch (FacebookApiException $e){
        echo $e->getMessage();
    }
    echo '<ul>';
}



public function getImageInfo($imageID){
    $path = '/' . $imageID;
    $res = $this->callAPI($path);
    $feedArray = array();
        $feedArray['id'] = $res['id'];
        $feedArray['thumb'] = $res['picture'];
        $feedArray['fullImage'] = $res['source'];
        $feedArray['imgHeight'] = $res['height'];
        $feedArray['imgWidth'] = $res['width'];

    return $feedArray;
}

protected function _getAlbumsData()
{
    $feedArray = array();
    $path = '/' . $this->_pageID . '/albums';
$res = $this->callAPI($path);

foreach ($res['data'] as $key => $album) {
        // assign data to $feedArray
        $feedArray[$key]['albumID'] = $album['id'];
        $feedArray[$key]['albumTitle'] = $album['name'];
        $feedArray[$key]['coverPhotoID'] = $album['cover_photo'];
        if(isset($album['description'])){$feedArray[$key]['albumDescription'] = $album['description'];}
        if(isset($album['count'])){$feedArray[$key]['countOfPhotos'] = $album['count'];}

        //create a new Album object with id
        //$albumObj = new Album($album['cover_photo']);
}
    return $feedArray;


}