Оглавление
Процесс работы с API социальной сети Instagram имеет некоторые ограничения. Они заключаются в том, что пользователь, у которого есть токен, может сделать только 5000 запросов к API в час, из них только 65 (если использовать практику подписания запросов, то это число можно увеличить до 220) запросов отведены на взаимодействие с контентом — лайки, подписки, комментирование, добавление и удаление контента).
Основные задачи
Основными нашими задачами являются:
- отслеживание динамики развития аккаунта;
- отчеты об эффективности взаимодействия с фанами этого аккаунта (определение процента активности пользователей, полученного в ответ на взаимодействие с их аккаунтами);
- аналитика похожих/конкуретных аккаунтов для выявления методов эффективного развития собственной страницы (за счет практик применяемых конкурентами — аналитика хештегов, взаимодействие с фанами конкурентов, определение наиболее высокооцененного контетна).
Проблемы и решения
Сбор данных о пользователях Instagram упирается в ограниченность численности запросов. Для небольших аккаунтов 5 тысяч — приемлемое количество, позволяющее обработать всю информацию на аккаунте за один проход. Но для страниц у которых более 12 тыс. лайков, 800 комментариев и 3,5 тыс. фолловеров этого количества определенно не хватит.
Прыгнуть выше предела запросов нам позволила техника использования так называемых “наблюдателей”. Речь идет об аккаунтах администраторов приложения, которые осуществляют синхронизацию данных из Instagram. Наблюдатель — администратор приложения, прошедший аутентификацию через Instagram. После этого он получил токен, предоставляющий возможность работать с API и позволяющий получать информацию об аккаунтах, которые находятся в свободном доступе.
В зависимости от объема собираемой информации, количество необходимых запросов может варьироваться. Из этого следует, что нужно рассчитать их максимально возможное количество в единицу времени (за час) и разделить полученное значение на 5000 (количество доступных запросов от одного токена). Исходя из полученного значения, мы поймем, сколько пользователей/администраторов понадобится для поддержки системы.
P — количетсво медиа-контента на одной странице ответа;
M/P — количество запросов, необходимых для получения списка всего медиа-контента;
M — количество запросов для обработки всего медиа-контента аккаунта;
F — количество запросов для обработки всех фолловеров аккаунта;
i — запрос для получения общей информации о своем аккаунте;
L — количество запросов, необходимых для получения информации обо всех лайках отдельного медиа элемента;
С — количество запросов, необходимых для получения информации обо всех комментариях отдельного медиа элемента;
R — количество запросов необходимых для получения следующей информации;
- Общей информации о медиа
- Списка лайков
- Списка комментариев
5000 — Количество запросов в час.
Процесс синхронизации
Алгоритм выбора наблюдателя
- Засекаем время старта поиска доступного наблюдателя;
- Находим в БД администратора, доступного для использования в данный момент (если в течение 15 минут доступный наблюдатель не обнаруживается, переключаемся на пользователя);
- Инициализируем клиента, применяя токен администратора или пользователя для общения с API;
- Отдаем полученные данные на обработку.
Алгоритм освобождения используемого наблюдателя
- Если у наблюдателя закончились доступные запросы (это происходит, как часть алгоритма переключения), ему устанавливаются флаги used: false и empty: true
- Если наблюдатель выполнил все необходимые операции, устанавливается флаг used: false.
Принцип переключения наблюдателя
Алгоритм переключения наблюдателя применяется, когда процесс сбора данных еще не закончен, а доступные запросы для токена уже на исходе. В этом случае происходит освобождение используемого и поиск доступного наблюдателя (см. выше).
Процесс сбора медиа
Основная задача наблюдателей — сбор данных о медиа-элементах пользователей. Обработка полученной информации производится следующим образом:
- Выбирается пользователь для обработки (аккаунт должен быть публичным);
- Выбирается наблюдатель;
- Происходит сбор всех медиа пользователя;
- Выполняются запросы на получение статистики по каждому медиа-элементу (лайки/комментарии);
- Список медиа-элементов пользователя сверяется с имеющимся в базе и происходит удаление/добавление лишних/добавленных медиа;
- Обновляются данные по статистике для каждого медиа-элемента
- Создается реплика записи с общей статистикой пользователя (количество комментариев, лайков, подписчиков, медиа).
Реплика необходима для построения тенденций изменения статистики в каждом отдельном аккаунте. Соответственно хранение записей за последний месяц позволит предоставить пользователю отчет о том, как изменилась активность на его странице за каждый отдельный временной промежуток. Процесс не включает в себя обработку данных подписчиков и фанов (пользователей поставивших лайк, но не подписавшихся на целевой аккаунт).
Instagram API очень проста в освоении, но как и многие другие имеет множество ограничений, которым необходимо следовать. Благодаря алгоритмам, мы можем практически беспрерывно собирать информацию о статистике и активности пользователей.
На сегодня в Instagram имеется масса ограничений. Для полноценной работы с их API, приложение должно пройти Permissions Review. Прием заявок на Permissions Review для новых приложений стартует после 3 декабря 2016.