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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽