Доброго дня всем! :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
) писать свой обработчик, а потом сшивать объекты? Может быть подскажите функцию (алгоритм), как упростить эту задачу? :)