Использование пакетного запроса в PHP SDK для получения обложек альбомов Facebook

Я использую PHP SDK через Batch Request (чтобы быстрее получить обложки всех альбомов). Работает нормально, но картинки, которые я получаю, - это не обложки альбомов, а отдельные картинки разных размеров.

$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');

Я знаю, что есть другой способ, используя URL /{albumID}/picture?type=small как указано здесь, но я все еще не могу получить те же размеры изображения, которые показывает Facebook в обложках (я пытался thumbnail, small, cover), и когда я использую этот подход в пакетном запросе для всех альбомов, у меня, кажется, нет никакого способа соотнести ответ с идентификатором альбома. В ответ я получаю статус перенаправления 302 с расположением изображения.

Я не хочу размещать ссылки на изображения напрямую /{albumID}/picture?type=small либо потому, что если имеется 25 альбомов, это означает 25 перенаправлений изображений, что делает страницу медленной.

1 ответ

Решение

В конце концов, я использовал cover_photo Идентификатор, чтобы получить полную информацию об изображении (которая включает в себя URL-адреса изображения разных размеров, а также сам идентификатор) и сопоставил его с идентификатором обложки альбома.

$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 Объект со всей информацией о фотографии на обложке.

Другие вопросы по тегам