Instagram API, интеграция приложений с Instagram

Instagram предоставляет разработчикам богатый API, который позволяет получить доступ к любой сгенерированной пользователями информации. К сожалению, API умеет только читать, нет никакого способа загружать снимки в обход официального Android или IOS приложения. Но несмотря на read-only статус API, вы можете сделать действительно полезные и интересные приложения с помощью него. Например, вы можете получить список публикаций, привязанных к определенному географическому положению, список популярных снимков или информацию и фотоленту того или иного пользователя.

Instagram API работает по модели REST и использует OAuth 2.0 protocol, а это значит, что к нему можно обращаться с помощью любого языка, понимающего JSON. Обращение к API может происходить только используя SSL.

На момент написания статьи Instagram предоставлял библиотеки для взаимодействия API на Ruby и Python.

Некоторые функции доступны без регистрации приложения. Например, получение информации о снимке и авторе в JSON, имея ссылку на него и др.

Начало работы. Создание приложения
Чтобы обращаться к API, для начала следует создать приложение на странице разработчиков, указать название и web-адрес приложения и получить CLIENT ID.

Большинство запросов требует только указания CLIENT ID. Client_id просто связывает свой сервер, скрипт или программу с конкретным приложением. Тем не менее, некоторые запросы требуют проверки подлинности — авторизацию пользователя в вашем приложении и последующее получение access_token для совершения запроса.

 Endpoints

Endpoints это сущности, информацию о которых можно получить с помощью API. На данный момент это:

  • users — Информация о пользователе, лента пользователя
  • relationships — Отношения между пользователями
  • media -Получение ленты по id пользователя, по поисковому запросу, по геотегу
  • comments — Получение/отправка/удаление комментариев
  • Likes -Получение, отправка, удаление лайков
  • Tags — Поиск по тегам
  • Location — Поиск изображений по геолокации (указываются координаты местоположения и радиус поиска)
  • Geography — Поиск изображений по id местоположения

ПРИМЕР. Получение популярных изображений в Instagram при помощи API

<html>
  <head></head>
  <body>  
    <h1>Popular on Instagram</h1>  
    <?php
    // загрузка классов Zend
    require_once 'Zend/Loader.php';
    Zend_Loader::loadClass('Zend_Http_Client');

    // определение ключа и секретного ключа пользователя
    // доступно с консоли API Instagram
    $CLIENT_ID = 'YOUR-CLIENT-ID';
    $CLIENT_SECRET = 'YOUR-CLIENT-SECRET';

    try {
      // инициализация клиента
      $client = new Zend_Http_Client('https://api.instagram.com/v1/media/popular');
      $client->setParameterGet('client_id', $CLIENT_ID);

      // получение списка популярных изображений
      // передача запроса и декодирование ответа
      $response = $client->request();
      $result = json_decode($response->getBody());

      // отображение фотографий
      $data = $result->data;  
      if (count($data) > 0) {
        echo '<ul>';
        foreach ($data as $item) {
          echo '<li style="display: inline-block; padding: 25px"><a href="' . 
            $item->link . '"><img src="' . $item->images->thumbnail->url . 
            '" /></a> <br/>';
          echo 'By: <em>' . $item->user->username . '</em> <br/>';
          echo 'Date: ' . date ('d M Y h:i:s', $item->created_time) . '<br/>';
          echo $item->comments->count . ' comment(s). ' . $item->likes->count . 
            ' likes. </li>';
        }
        echo '</ul>';
      }

    } catch (Exception $e) {
      echo 'ERROR: ' . $e->getMessage() . print_r($client);
      exit;
    }
    ?>
  </body>
</html>

ПРИМЕР. Получение изображений по тегам

html>
  <head></head>
  <body>
    <h1>Instagram Tag Search</h1>
    <?php
    if (!isset($_POST['submit'])) {
    ?>
    <form method="post" 
      action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
      Search for:
      <input type="text" name="q" /> 
      <input type="submit" name="submit" value="Search" />      
    </form>
    <?php
    } else {
    ?>
    <h2>Search results for '<?php echo $_POST['q']; ?>'</h2>
    <?php
      require_once 'Zend/Loader.php';
      Zend_Loader::loadClass('Zend_Http_Client');

      // определение ключа и секретного ключа пользователя
      // доступно с консоли API Instagram
      $CLIENT_ID = 'YOUR-CLIENT-ID';
      $CLIENT_SECRET = 'YOUR-CLIENT-SECRET';

      try {
        // инициализация клиента
        $client = new Zend_Http_Client('https://api.instagram.com/v1/tags/search');
        $client->setParameterGet('client_id', $CLIENT_ID);
        $client->setParameterGet('q', $_POST['q']);

        // получение и отображение аналогичных меток
        $response = $client->request();
        $result = json_decode($response->getBody());
        $data = $result->data;  
        if (count($data) > 0) {
          echo '<ul>';
          foreach ($data as $item) {
            echo '<li>' . $item->name . ' (' . $item->media_count . 
              ') </li>';
          }
          echo '</ul>';
        }
      } catch (Exception $e) {
        echo 'ERROR: ' . $e->getMessage() . print_r($client);
        exit;
      }
    }  
    ?>
  </body>
</html>

ПРИМЕР. Поиск изображений по местоположению

<html>
  <head></head>
  <body>
    <h1>Instagram Photo Search by Location</h1>
    <?php
    if (!isset($_POST['submit'])) {
    ?>
    <form method="post" 
      action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
      Latitude: <input type="text" name="lat" />  
      Longitude: <input type="text" name="long" /> 
      <input type="submit" name="submit" value="Search!" />      
    </form>
    <?php
    } else {
    ?>
    <h1>Search results for 'lat:<?php echo $_POST['lat']; ?>, 
      long:<?php echo $_POST['long']; ?>'</h1>
    <?php
      require_once 'Zend/Loader.php';
      Zend_Loader::loadClass('Zend_Http_Client');

      // определение ключа и секретного ключа пользователя
      // доступно с консоли API Instagram
      $CLIENT_ID = 'YOUR-CLIENT-ID';
      $CLIENT_SECRET = 'YOUR-CLIENT-SECRET';

      try {
        // инициализация клиента
        $client = new Zend_Http_Client('https://api.instagram.com/v1/media/search');
        $client->setParameterGet('client_id', $CLIENT_ID);
        $client->setParameterGet('lat', $_POST['lat']);
        $client->setParameterGet('lng', $_POST['long']);

        // получение изображений, соответствующих указанному местоположению
        $response = $client->request();
        $result = json_decode($response->getBody());

        // отображение фотографий
        $data = $result->data;  
        if (count($data) > 0) {
          echo '<ul>';
          foreach ($data as $item) {
            echo '<li style="display: inline-block; padding: 25px"><a href="' . 
              $item->link . '"><img src="' . $item->images->thumbnail->url . 
              '" /></a> <br/>';
            echo 'By: <em>' . $item->user->username . '</em> <br/>';
            echo 'Date: ' . date ('d M Y h:i:s', $item->created_time) . '<br/>';
            echo $item->comments->count . ' comment(s). ' . $item->likes->count . 
              ' likes. </li>';
          }
          echo '</ul>';
        }

      } catch (Exception $e) {
        echo 'ERROR: ' . $e->getMessage() . print_r($client);
        exit;
      }
    }  
    ?>
  </body>
</html>
  • http://Triti.net/ Swede Platonov

    Инстаграм теперь не дает возможность зарегестрировать API?

  • Khimich Ivan

    А Вы тестировали этот код? Ведь сейчас api instagram требует указания только access_token при любых запросах к endpoints.

  • Юрий Медведев

    Добрый день. Возьму в аренду новый Client ID instagram, на время пока проходим регистрацию. для инстапринтера