Меню

SLIDER.WEB studio

СоцСсылки

БЛОГ


Вывод ленты Instagram на сайте через API (PHP)

Как вывести ленту Instagram на сайте? Именно такой вопрос поселился в моей голове в процессе реализации одного FUN-проекта.

Путем недолгих поисков по просторам интернета родилась функция на PHP, реализующая вывод последних 20 фотографий из аккаунта.

Для работы с API Instagram нам понадобится создать приложение-клиент в инстаграмм и получить Сlient ID и Access Token.

Как получить токен.

  1. Авторизуемся на сайте Instagram.com/developer
  2. Регаем нового клиента. Для этого жмем на кнопку Manage Clients вверху экрана, а затем жмем на кнопку Register a New Client.
  3. Заполняем форму.
  4. Далее переходим на вкладку Security и снимаем галку с Disable implicit OAuth - это важно!

После отправки формы нам дадут Client ID. Сохрани его!

  1. В адресную строку браузера вставляем
https://instagram.com/oauth/authorize/?client_id=[ТВОЙ_ID]&redirect_uri=[ТО, ЧТО ВПИСАЛ В Valid redirect URIs]&response_type=token

Должно получиться что-то вроде этого, только с твоим ID и Valid redirect URIs

https://instagram.com/oauth/authorize/?client_id=9794df922c0b480e948a77d3d87d865&redirect_uri=http://sliderweb.ru&response_type=token
  1. Если все сделано верно, то переход, по сформированной таким образом ссылке в строке браузера, перенаправит тебя на твой же сайт (или что ты указал в Valid redirect URIs), а в конце будет красоваться токен:
https://sliderweb.ru/#access_token=188494716.9794df9.4f23c55f2e9414193de4efb23d747

В данном случае то, что идет до первой точки - UseID, а все вместе и есть токен.

UserID: 188494716

Token: 188494716.9794df9.4f23c55f2e9414193de4efb23d747

Как вывести ленту на сайте

Подключаемся к API и получаем JSON

<?php 
function instagram_api( $link ){
    $instagram = curl_init(); // инициализируем соединение
    curl_setopt($instagram, CURLOPT_URL, $link); // к этому URL будем подключаться
    curl_setopt($instagram, CURLOPT_RETURNTRANSFER, 1); // возвращать, а не распечатываь результат
    curl_setopt($instagram, CURLOPT_TIMEOUT, 20); // таймаут
    $json_result = curl_exec($instagram); // подключаемся, получаем данные
    curl_close($instagram); // закрываем соединение
    return json_decode( $jфson_result ); // декодируем из json и возвращаем результат
}
$access = '188494716.9794df9.4f23c55f2e9414193de4efb23d747';
$user_id = '188494716'; // если приложение в песочнице, то проще тут указать "self"
$result = instagram_api("https://api.instagram.com/v1/users/" . $user_id . "/media/recent?access_token=" . $access. "&count=20");
?>

Далее, там, где необходимо вывести ленту, используем данные из JSON.

Пример выводит фотографии в максимальном разрешении ($post->images->standard_resolution->url), описание ($post->caption->text) и дату поста ($post->created_time):

<?php 
foreach ($result->data as $post) {
    $post_date = date('d/m/Y', $post->created_time);    

    echo 
    '<article class="thumb">
    <a id="insta-' . $post->id . '
    " href="' . $post->images->standard_resolution->url . '
    " class="image ' . $post->filter . '
    "><img src="' . $post->images->standard_resolution->url . '
    " /></a>
    <h2>' . $post->caption->text . '</h2>
    <p>' . $post_date . '</p>
    </article>';
}
?>

Готово!

PS: Есть одно ограничение - неутвержденные приложения имеют ограничение на 20 последних записей. Хотите больше - отправляйте приложение на прверку и ждите утверждения. Мне это показалось "мутным" и я не заморачивался.

Posted in #япочинил, Полезности on июл 25, 2019.