Shlyahten
@Shlyahten

Как лучше вытащить из VK API фото максимального размера?

Вот результат кода var_dump($result -> response -> items[0] -> attachments[0] -> photo);:
object(stdClass)[5]
  public 'id' => int 456239017
  public 'album_id' => int -7
  public 'owner_id' => int -119862681
  public 'user_id' => int 100
  public 'photo_75' => string 'https://pp.userapi.com/c638522/v638522457/47abd/T0LAROT98EI.jpg' (length=63)
  public 'photo_130' => string 'https://pp.userapi.com/c638522/v638522457/47abe/GwUvwaKff_I.jpg' (length=63)
  public 'photo_604' => string 'https://pp.userapi.com/c638522/v638522457/47abf/jVm1hsXC7Nc.jpg' (length=63)
  public 'photo_807' => string 'https://pp.userapi.com/c638522/v638522457/47ac0/75K-RSy1kQc.jpg' (length=63)
  public 'width' => int 800
  public 'height' => int 800
  public 'text' => string 'Original: http://cs639119.userapi.com/v639119880/12bab/3czHoHZnZGs.jpg' (length=70)
  public 'date' => int 1491404363
  public 'post_id' => int 126
  public 'access_key' => string 'b7132ccfd6d6e03c98' (length=18)


Как выбрать фотографию с максимальным разрешением? Не именно в данном случае, а чтобы и с другими размерами/фотографиями работало. Спасибо)
  • Вопрос задан
  • 2402 просмотра
Пригласить эксперта
Ответы на вопрос 4
@Gromadchuk
Мой вариант происходящего.

$photo = (object) array(
    'id' => 456239017,
    'album_id' => -7,
    'owner_id' => -119862681,
    'user_id' => 100,
    'photo_75' => 'https://pp.userapi.com/c638522/v638522457/47abd/T0LAROT98EI.jpg',
    'photo_130' => 'https://pp.userapi.com/c638522/v638522457/47abe/GwUvwaKff_I.jpg',
    'photo_604' => 'https://pp.userapi.com/c638522/v638522457/47abf/jVm1hsXC7Nc.jpg',
    'photo_807' => 'https://pp.userapi.com/c638522/v638522457/47ac0/75K-RSy1kQc.jpg',
    'width' => 800,
    'height' => 800,
    'text' => 'Original: http://cs639119.userapi.com/v639119880/12bab/3czHoHZnZGs.jpg',
    'date' => 1491404363,
    'post_id' => 126,
    'access_key' => 'b7132ccfd6d6e03c98'
);
         
$max_photo = array(
    'size' => 0,
    'url' => null
);

foreach($photo as $key => $value) {
    preg_match('/photo_([0-9]+)/', $key, $matches);
    
    if ($matches && $matches[1] > $max_photo['size']) {
        $max_photo = array(
            'size' => intval($matches[1]),
            'url' => $value
        );
    }
}

var_dump($max_photo);
Ответ написан
Shlyahten
@Shlyahten Автор вопроса
Это конечно костыль, но вот как я сделал:
$array=json_decode(json_encode($array),true);

foreach ($array as $param => $value) {
    if (strstr($param, 'photo_')) {
    $photo = $value;
    }
}
echo $photo;
Ответ написан
Комментировать
MasterRO
@MasterRO
Middle Laravel Developer
ОМГ, зачем $array=json_decode(json_encode($array),true); ??

У вас же уже готовый объект есть.
$photo = $result -> response -> items[0] -> attachments[0] -> photo);

$url = $photo->photo_1024 ?? $photo->photo_807 ?? $photo->photo_604 ?? ...
Ответ написан
UksusoFF
@UksusoFF
Для тех кто пришел сюда из поиска:
Для photos.get можно указать photo_sizes=1, тогда хотя бы не нужно будет парсить название ключей и отсортировать вложенные объекты по размеру.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы