我正在完成一个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。其中一个是无效的。猜猜哪个?
由于某些原因,相册中的某些图片FQL会返回异常长的object_id。那些长的object_id是无效的。
正如你所看到的那样,有效和无效的ID都以类似的顺序结束--148。即使我将结果作为字符串处理并且没有从结果中删除任何字符,因此facebook可能会向我发送10150_102643214148而不是滑落。
目前我只是扔掉了无效的ID。我希望这足以防止空白照片和facebook不会使用任何更多虚假数据中毒我的查询结果。
Edit2:出于某种原因,上述方法不起作用。有些图片仍然会导致错误。幸运的是,FQL表具有“src_small”和“src_large”等属性,这些属性返回了照片的直接链接。尽管图表应该允许使用它的API检索任何图像,但我必须回退到查询的src结果 - 我想这对于像这样的情况来说是一种补丁。
简而言之,Facebook的GRAPH API已被破坏。我希望很快得到修复。
答案 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;
}