使用PHP SDK中的批处理请求获取Facebook专辑封面

时间:2013-02-23 15:33:35

标签: facebook facebook-php-sdk facebook-batch-request

我正在通过批量请求使用PHP SDK(以便更快地获得所有专辑的封面)。它的工作正常,但我得到的图片不是专辑封面,而是各种裁剪尺寸的单张图片。

$albums_resp = $facebook->api('/'.$fbid.'/albums','GET');
$albums = $albums_resp['data'];

//prepare batch query for album covers
$queries = array ();    
foreach ($albums as $album)
{
    if ($album['cover_photo'] != null)
    {
        $query = array('method' => 'GET', 'relative_url' => $album['cover_photo']);
        array_push($queries, $query);
    }
}

$queries_str = json_encode($queries);
$batchResponse = $facebook->api('?batch='.$queries_str, 'POST');

我知道有另一种方法可以使用/{albumID}/picture?type=small所示的网址thumbnail但我仍然无法获得与封面中显示的相同的图片尺寸(我试过smallcover/{albumID}/picture?type=small),当我在所有相册的批量请求中使用此方法时,我似乎无法将响应与相册ID相关联。我得到的回应是具有图像位置的重定向状态302。

我不想直接放置图片链接{{1}},因为如果有25张相册,则意味着25张图片重定向,使页面变慢。

1 个答案:

答案 0 :(得分:1)

我最后做的是使用cover_photo ID获取完整的图片信息(包括不同尺寸的图片的网址以及ID本身),并将其与相册的封面照片ID相关联

$cover_photos = array();
foreach ($batchResponse as $cover_photo_resp)
{   
    if ($cover_photo_resp['code'] == 200)
    {
        $cover_photo = json_decode($cover_photo_resp['body'], true);    
        $cover_photos[$cover_photo['id']] = $cover_photo;
    }
}

//correlate the cover photos with the respective albums, according to the cover photo ID
for ($i = 0; $i < count($albums); $i++)
{
    $albums[$i]['cover_photo_obj'] = $cover_photos[$albums[$i]['cover_photo']]; 
}

最终结果是$albums[]关联数组数组,每个关联数组在每个相册中都有一个额外的字段,引用cover_photo_obj对象以及有关封面照片的所有信息。