вторник, 30 июня 2015 г.

Битрикс и Инстаграм. Собираем фотки по хештегу для конкурса.

Устраивать конкурсы в инстаграме сейчас модно. И удобно. Инстаграм предоставляет достаточно обширный API, который позволяет делать практически всё, что может сделать обычный пользователь ручками.

Составляем в мозгу логику действий
1. Создание ИБ Конкурсов и ИБ Фоток для конкурсов.
2. Конкурсы создаются ручками операторов. Свойствами конкурсов являются Название, Активность, Время начала действия, Время окончания действия, Хештег, Описание, Результат, Разрешение работы скрипта.
3. Фотки получаются скриптом для конкурса методом обращения к Инстаграм API и сохраняются в базе (ссылки на фотки).


И если с первым и вторым пунктом справятся контент-менеджеры, то с третьим пунктом у них возникнут сложности. И тут на сцену выходит разработчик.




Первым делом лезем искать библиотеку и выбираем самую популярную - от cosenary; документации и примеров предостаточно, поэтому сразу можно приступать к делу.
Конечно же, у нас уже есть ключ и секрет приложения, которые нам предоставил заказчик.
Быстренько пишем скриптик для проверки функциональности.

//подключаем либу
require 'instagram/Instagram.php';
use MetzWeb\Instagram\Instagram;
//так как нам нужны только публичные данные, то достаточно одного ключа
//подставьте свой =)
$instagram = new Instagram(APP_KEY);

//больше этого числа страниц получать не будем
//так, на всякий случай
$counter_pages = 500;
//количество элементов на странице
$counter_elements = 20;

//получаем первую пачку котят
$arImages = array();
//я думаю, понятно откуда берётся хэштег - из свойств конкурса
//кстати, тестить на котятах не советую, их слишком много =)
$photos = $instagram->getTagMedia($arContest['PROPERTY_HASHTAG_VALUE'], $counter_elements);
//эта функция записывает фотки в общий массив, который потом можно использовать
write_kitten($photos);

//инициализируем для первой пагинации
$res = $photos;

//и он сказал: поехали!
for ($i=0; $i<$counter_pages; $i++)
{
 //получаем порцию котят, основываясь на данных пагинации, 
 // полученных на предыдущем шаге
 $res = $instagram->pagination($res, $counter_elements);
 if (!$res->data || !count($res->data))
  break;

//эта функция записывает фотки в общий массив, который потом можно использовать
 write_kitten($res);
}


Наибольшую проблемы обычно вызывает вопрос пагинации, так как получить одним запросом все фотки хештега не предоставляется возможным =)
Всё становится понятно, если посмотреть на первый результат, который возвращает API. Там содержится вся необходимая информация для следующего запроса. На основе этой информации и осуществляется пагинация запросов.


Потом мы получаем намёк в виде задачи от технического, что у нас все скрипты должны быть на агентах и что потом агенты надо перевести в крон. Переписываем немного код, для красоты добавляя его в один класс, и запихиваем его в инит (ссылка на скачивание класса в конце статьи).
Используя вот эту инструкцию переводим агенты на крон.

Пишем инструкцию по использованию функционала конкурсов для операторов и радуемся (выдержки из инструкции найдёте внутри файла). Код класса предоставляется для примера, сначала настройте, а потом используйте =)



Библиотека от cosenary для работы с Instagram
Запуск агентов из cron
Инит с классом агентов (скачать файл для примера)

Комментариев нет:

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