Выводим фото / видео из Инстаграм через PHP, без использования классов, с поддержкой Fancybox/Lightbox

Вообще конечно, такие просмотрщики, как Fancybox, можно спокойно прикрутить и в том случае, если вы выводите фото из Instagram через JavaScript.

Для меня же метод вывода через JavaScript имеет два существенных преимущества:

  • Асинхронные запросы в JavaScript не мешают быстрой загрузке страниц вашего сайта, в то же время наоборот, подкючение к API через cURL (PHP метод) может увеличить время ответа сервера.
  • Если вы поставите кэширование (например плагин WP Super Cache для WP), то в PHP-способе новые фото не будут выводиться сразу же.

В то же время есть такие случаи, когда подходит только PHP-метод подключения к API, иначе зачем бы я вообще стал его рассматривать.

Подготовка. Функция подключения к API Инстаграм через cURL.

В первую очередь создадим функцию, которая будет подключаться к API Инстаграм и возвращать результат. Она вполне подойдёт для любых GET-запросов к Instagram API.

function instagram_api_podkluchenie( $link ){
	$c_podkl = curl_init(); // инициализируем соединение
	curl_setopt($c_podkl, CURLOPT_URL, $link); // к этому URL будем подключаться
	curl_setopt($c_podkl, CURLOPT_RETURNTRANSFER, 1); // возвращать, а не распечатываь результат
	curl_setopt($c_podkl, CURLOPT_TIMEOUT, 20); // таймаут
	$json_result = curl_exec($c_podkl); // подключаемся, получаем данные
	curl_close($c_podkl); // закрываем соединение
	return json_decode( $json_result ); // декодируем из json и возвращаем результат
}

Добавьте её куда-нибудь в код своего сайта. Если это WordPress, то в файл functions.php текущей темы. Она понадобится нам во всех примерах, как средство подключения к API через cURL

А теперь перейдем к самим примерам.

Готовые к использованию примеры

И ещё одно, в каждом примере вам понадобится Access Token, о том, где его взять, я уже писал здесь.

Кроме того, если созданное вами приложение находится в песочнице (Sandbox Mode), то будут действовать ещё некоторые ограничения, вы сможете только:

  1. выводить информацию о пользователе, которому принадлежит Access Token (в этой статье мы как раз получали данные о количестве подписчиков, подписок и т.д.)
  2. Выводить не более 20 последних фото/видео пользователя, которому принадлежит токен.
  3. Вы можете использовать запросы и для вывода по тегу, но имейте ввиду, что результаты будут ограничены пунктом 2.

Если такие ограничения вас никак не устраивают, то статью дальше можете не читать, однако рекомендую взглянуть на плагин, у которого эти ограничения отсутствуют. Вот он.

По ID пользователя

Я не стал усложнять код и сделал вывод результатов в виде: ссылка (тег <a>) +картинка (тег <img>).

Так как согласно заголовку поста, мы хотим использовать последующие примеры в связке с лайтбоксом (например Fancybox), то я сделал для этого следующее:

  • В атрибуте href указана не ссылка на сам пост в Инстаграм $post->link, а ссылка на самое большое разрешение изображения, в Инстаграм это 612х612, $post->images->standard_resolution->url
  • В качестве же изображения, которое находится внутри ссылки используется наименьшее разрешение 150х150 $post->images->thumbnail->url.
  • Каждой ссылке присвоен класс fancybox, но вы конечно можете использовать и другой селектор для инициализации лайтбокса.
$access = 'ваш токен';
$user_id = '1362124742'; // если приложение в песочнице, то проще тут указать "self"
$result = instagram_api_podkluchenie("https://api.instagram.com/v1/users/" . $user_id . "/media/recent?access_token=" . $access);
 
foreach ($result->data as $post) {
	echo '<a id="insta-' . $post->id . '" href="' . $post->images->standard_resolution->url . '" class="fancybox ' . $post->filter . '"><img src="' . $post->images->thumbnail->url . '" /></a>';
}
// полностью весь возвращаемый результат можно просмотреть при помощи print_r( $result ); или на сайте API Инстаграм

Вывод постов фото / видео по хэштегу

$access = 'укажите ваш токен';
$metka = 'wordpress'; // ваш хэштег
$result = instagram_api_podkluchenie("https://api.instagram.com/v1/tags/" . $metka . "/media/recent?access_token=" . $access);
 
//print_r( $result );
foreach ($result->data as $post) {
	echo '<a id="insta-' . $post->id . '" href="' . $post->images->standard_resolution->url . '" class="fancybox ' . $post->filter . '"><img src="' . $post->images->thumbnail->url . '" /></a>';
}
Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.

  • Артем: Ага, понял. Вот только почему $args? Она же нигде не определена, по логике должна быть переменная $true_field_params или...