Импорт материалов из Instagram

У instagram есть API, который устареет до конца 2018 года. Всех пересаживают на новую платформу —  Instagram Graph API.

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

Потому мы пойдем другим путем.

Что требуется получить?

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

Снимать ролики, и выполнять прочие идиотские требования — на это тратить время не хочется.

Возможно ли получить данные без создания приложения и использования API?

Теоретически — да. Инстаграм не требует авторизации для просмотра данных.

Вся необходимая информация, при том даже в формате json присутствует в html коде каждой страницы instagram. Без каких либо трудностей можно получить 12 последних записей.

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

Шепотка кода и никакой магии

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

Я закодировал парсинг в виде класса, который собираюсь потом расширять другим функционалом.

Начнем с примера использования:

Выведет массив из 12 элементов (покажу только пару):

Для каждой картинки импортировано 4 поля:

  • id — идентификатор поста;
  • title — описание картинки в instagram;
  • src — url изображения, не факт, что постоянный, но точно подходит для скачивания;
  • shortcode — то же что и id, но может быть использован для embed запроса данных.

Для запроса данных по shortcode я также сделал функцию, но каких либо новых интересных данных, которые и так можно дернуть из json на странице, она не поставляет.

FeedReaper, класс для импорта данных из Instagram

После инициализации класса, передав url страницы intagram:

Вы получаете доступ к следующим функциям:

fetch — то, что уже было показано в примере, извлекаем список фоток с текстом и идентификаторами;

embed — дополнительная функция, позволяющая выдернуть данные через embed instagram api по шот-коду публикации. Здесь я возвращаю полностью всё, что предоставляется instagram.

Что еще можно сделать?

Так мы получили только первую страницу с картинками (всего 12 штук). Теоретически возможно получить и следующие страницы.

Они догружаются через запросы вида /graphql/query/,

где используются следующие параметры:

  • query_hash: неких ключ запроса
  • variables: {
    • «id»: айди страницы пользователя,
    • «first»: количество догружаемых картинок,
    • «after»: длинный индентификатор материала (end_cursor) }

Значения Айди, что используется для variables можно получить из кода страницы. А вот источник, время жизни и назначение query_hash — не ясно. Он одинаков для разных страниц.

В ответе на /graphql/query/ приходит аналогичный по структуре json, что мы извлекали из html кода.

Написать комментарий

 

Комментарии к «Импорт материалов из Instagram»

Понравилась статья? Есть вопросы? - пишите в комментариях.



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