Задать вопрос
@IrinaTravel

PHP Instagram API: как обойти лимит в кол-ве отдаваемых изображений?

Доброго дня всем! :D

Мучаюсь с Instagram API, чтобы обойти их лимит при выводе изображений из профиля своего пользователя. По-умолчанию, почему-то, это цифра 33. Почему так — в доках так и не нашла...

Вот простая функция для получения этих 33-х изображений (использую сохранение в JSON файл полученного ответа с последующим распарсингом, чтобы не нагружать трафик):

function get_instagram($user_id = <MY_USER_ID>, $scope = 'public_content', $count = 100, $width = 190, $height = 190)
{

  $url = 'https://api.instagram.com/v1/users/' . $user_id . '/media/recent/?access_token=<MY_ACCESS_TOKEN>&count=' . $count . '&scope=' . $scope;

  $cache = './cache/' . sha1($url) . '.json';
  if (file_exists($cache) && filemtime($cache) > time() - 60 * 60){
    $jsonData = json_decode(file_get_contents($cache));
  } 
  else {
    // Получаю JSON с ответом из API и сохраняю 
    $jsonData = json_decode(file_get_contents($url));
    file_put_contents($cache,json_encode($jsonData));
  }

  $result = '<div id="instagram">';
  foreach ($jsonData->data as $key => $value) {
    $result .= '<img src="' . $value->images->low_resolution->url . '" alt="' . $value->caption->text . '" width="' . $width . '" height="' . $height . '" /></a>';
  }
  $result .= '</div>';

  return $result;
}

print get_instagram();

Как и говорила ранее, все 33 фотки отлично выводятся, но сколько бы я не ставила параметр $count — больше никак не получается, только в меньшую сторону работает :(

Может быть кто-то сталкивался с этой проблемой и может помочь? Также, буду благодарна за живые кейсы (с кодом), чтобы разобраться... самой уже интересно!

ДОБАВЛЕНО

После мудрых мыслей из комментов, добавила в свой код (который выше) слияние двух объектов. Оказывается, в ответе API есть специальный раздел pagination, где есть элемент next_url:
...
  }
  else {
    // Получаю JSON-ы с ответами из API
    $first_url = json_decode(file_get_contents($url));
    $next_url = json_decode(file_get_contents($first_url->pagination->next_url));
    
    // Сшиваю два объекта в один
    $jsonData = (object) array_merge_recursive((array) $first_url, (array) $next_url);

    // Сохраняю
    file_put_contents($cache, json_encode($jsonData));
  }
...

Но тут возникает вопрос: хорошо, это сработает для 66 последних фотографий, но как быть, если их там >500? Для каждого шага пагинации (next_url) писать свой обработчик, а потом сшивать объекты? Может быть подскажите функцию (алгоритм), как упростить эту задачу? :)
  • Вопрос задан
  • 2692 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
fornit1917
@fornit1917
За один запрос более чем 34 фотографии не получите значит. Используйте параметры MAX_ID и MIN_ID для загрузки данных порционно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
tomnolane
@tomnolane
профессиональный разработчик
Vit - верно подметил, посмотрите это:
github /mgp25/Instagram-API
возможно вам поможет (п.с. сам пользуюсь для постинга)
Ответ написан
Ваш ответ на вопрос

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

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