Instagram закрыл API без предупреждения: с чем это связано и чем это может обернуться? Что делать, если Instagram не дал доступ к API? Дополнение Инстаграм закрывает api от сторонних приложений

Сегодня Instagram опубликовал заявление , которое касается масштабных изменений в политике компании. Социальная сеть закрывает свой API от новых сторонних разработчиков и проведет ревизию всех существующих. Изменения ударят по всем приложениям, которые позволяли просматривать ленту Instagram через сторонние ресурсы, а также автоматически расставлять лайки и делать инста-репосты.

Instagram был запущен в 2011 году и сами создатели признаются, что на тот момент не имели достаточного количества ресурсов, чтобы проработать все возможности созданной ими платформы. Открытый API позволил сторонним разработчикам создать сотни приложений, которые базировались на функциональности социальной сети. Спустя 4 года, Instagram решил закрыть эту возможность.

В первую очередь, это связано с тем, что Instagram вплотную занялся наращиванием прибыли, утверждают журналисты TechCrunch . По крайней мере, все последние действия компании указывают именно на это. В начале сентября в ленте пользователей , также расширились возможности публикации контента, а еще чуть позже соцсеть Boomerang, в котором можно делать зацикленные видео.

Приложения, созданные самим Instagram являются еще одной причиной такого шага. До Boomerang социальная сеть выпустила еще два аппа: Layouts — для фото-коллажей, и Hyperlapse — для таймлапсов. В контексте этого, сторонние приложения, которые повторяют или дополняют основную функциональность соцсети, становятся обузой.

С сегодняшнего дня Instagram отключил доступ к API своей ленты для новых приложений. С 3 декабря начнется ревизия всех существующих приложений, а также обзор новых, согласно обновленной политике. 1 июня 2016 года все старые приложения должны будут согласиться с новыми условиями по API.

Под сокращение подпадут, в первую очередь, приложения, которые позволяли просматривать ленту Instagram на устройствах, на которых Instagram не представлен. Таким образом, к 1 июня изменения коснутся таких приложений, как Retro, Flow, Padgram, Pictacular для iPad, Webbygram, Webstagram, Instagreat, Itsdagram для десктопа и т.д.

В этих переменах есть и положительная сторона. Пользователи соцсетей отмечают, что отключение возможности получать/ставить автоматические лайки и подписки через сторонние приложения отсеет множество сервисов, которые позволяют «накручивать» статистику профилей. Грубо говоря, инстаграм-магазины перестанут подписываться на нецелевую аудиторию.

Instagram был куплен Facebook в 2012 году за $1 млрд. На данный момент пользовательская база ресурса насчитывает более 400 млн человек.

Аудитория Instagram в Украине составляет приблизительно 800 000 человек. Помимо этого, около 66% аудитории составляют девушки. Подробнее об украинской аудитории соцсети можно прочесть в , которую мы публиковали в прошлом месяце.

Заметили ошибку? Выделите ее и нажмите Ctrl+Enter , чтобы сообщить нам.

Новость о том, что Instagram закрыл свое API не в декабре, как планировалось ранее, а прямо сейчас, стала для всех самой настоящей неожиданностью, ведь никаких предупреждений о грядущих изменениях нигде и в помине не было. Впрочем, предпосылки к закрытию API некоторые пользователи обнаружили еще 31 марта, когда Instagram возмутил их ограничением количества запросов к API в целых двадцать пять раз (с 5000 до 200)!
2-го апреля доступ уже был частично заблокирован, а 5-го апреля с существенными ограничениями столкнулись практически все не являющиеся партнерами Facebook сторонние ресурсы. На что же это повлияло?

Аналитические сервисы, занимающиеся анализом аккаунтов пользователей, в частности, LiveDune , отныне больше не смогут получать сведения из Instagram привычным для них способом, то есть полноценный анализ аккаунтов больше не представляется возможным (исключением являются лишь бизнес-аккаунты). Глубокий анализ аудитории и типов подписчиков, а также поиск и анализ хэштегов отныне тоже невозможны.
Недоступен мониторинг комментариев, нереальной задачей стала выгрузка подписчиков – мобильные приложения, показывавшие ранее, кто и когда подписался на аккаунт, дружно замерли. Есть предположения, что в недалеком будущем не получится увидеть подписчиков и через приватное API, соответственно, все работающие через него сервисы (включая сервисы проверки блоггеров) в ближайшее время тоже безвозвратно канут в Лету. В свете подобных изменений многие уже начинают всерьез задумываться о переходе на бизнес-аккаунты, так как теперь это единственный вариант получать глубокий анализ собственных аккаунтов и более широкие возможности использования сервиса в целом.

Головную компанию, то есть Facebook, сейчас сотрясает грандиозная паника из-за недавнего скандала с компанией Cambridge Analytica – последняя отважилась использовать аккаунты пользователей для достижения собственных целей, действуя в обход правил соцсети. Изначально сообщалось, что из недр Facebook утекло около пятидесяти миллионов аккаунтов, однако, согласно последним данным, объемы утечки оказались куда внушительнее – как выяснилось, они уже перевалили за восемьдесят семь миллионов аккаунтов! Так что паника со стороны Facebook вполне понятна, ведь все это не может не сказаться на репутации компании, причем далеко не самым лучшим образом (даже капитализация Facebook за последние пару недель упала на целых шестьдесят миллиардов долларов). Неожиданное и шокировавшее многих закрытие API является не чем иным, как попыткой компании усилить защиту ценных пользовательских данных.

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

Чего же ждать дальше? А это уже вопрос времени, так как в данный момент представители Instagram никаких официальных ответов и комментариев не дают, да и сайт компании Facebook тоже пока что не приоткрывает завесу тайны!

И мне показалось, что её можно продолжить.

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

  1. Самые полезные функции (постинг и удаление постов) доступны только из мобильного приложения Instagram, эмуляция запросов сложна, так как надо вытащить из приложения ключ, который с каждой новой версией обновляется.
  2. Web-версия обрезана, но радует, что в ней есть возможность лайкать, комментировать и удалять комментарии
  3. Есть API, но процедура его получения удручающе долгая и спамерам и ботам такой путь точно не светит. Плюс было много моментов, когда соглашения в API менялись, что не всегда удобно.
Хоть я и связался с Instagram не для того, чтобы сделать очередного спам-бота, который может подписываться и лайкать, но возиться с получением Instagram API мне ну очень не хотелось, поэтому пришлось написать собственную библиотеку для взаимодействия с Instagram.

Хочется сказать, что работать с Web-версией Instagram очень даже приятно по двум причинам:

1. О любой страничке можно получить краткую информацию, если отправить GET запрос вида:

Https://instagram.com/zuck/?__a=1
И ответом является JSON с доступной информацией, первыми 10 постами странички и прочим. Очень приятно.

2. Если же краткой информации не хватает, то тут есть ещё одна приятная новость. Дозагрузить фоточки, подписки, комментарии можно со помощью определённого запроса вида

Https://www.instagram.com/graphql/query/?query_id=17888483320059182&variables=...
, где в variables передаются переменные для обработки в формате JSON. Ответом также является JSON. Да и вообще, очевидно, что работает это всё на GraphQL, так что чтобы понять, как обрабатываются запросы, можно даже погуглить.

На основе данных знаний и построена вся библиотека. Я вкратце опишу, как её можно использовать, может, кому-то пригодится. Кстати, я там в репозитории указал лицензию BSD 3. Подскажите, может, мне стоит её поменять, чтобы не было никаких трудностей?

Установка

Устанавливать её не надо. Точнее, мне было лень прописывать всякие setup.py или упаковывать, когда библиотека состоит всего из одного файла. Поэтому там просто файл instagram.py, который подключается так:

Import instaparser

Как ей пользоваться?

Взаимодействие с Instagram возможно либо с авторизацией, либо без. Без авторизации отсутствуют функции просмотра подписок и подписчиков, и, очевидно, невозможно что-то лайкнуть, что-то откомментировать и так далее. Единственные ограничения с авторизацией: это невозможно выкладывать посты и удалять их.

From instaparser.agents import Agent from instaparser.entities import Account agent=Agent() account=Account("zuck") agent.update(account) media=agent.get_media(account, count=100) for m in media: print(m)
Как вы поняли, данный скрипт прогружает информацию о странице Марка Цукерберга, загружает последние 100 постов с его странице и выводит их на экран.

Хочу сказать, что если бы я не написал

Agent.update(account)
то выполнить загрузку постов не получилось бы, так как никакой информации о странице Цукерберга известно не было.

From instaparser.agents import AgentAccount from instaparser.entities import Account agent=AgentAccount("oleg_yurchik", "imasuperpassword") agent.update() account=Account("zuck") agent.update(account) # and etc.
Это, так называемый Hello, world! . Или быстрый старт.

А теперь расскажу подробнее:

Instagram, на самом деле, имеет всего 6 сущностей:

  1. Аккаунт
  2. Геолокация
  3. Комментарий
  4. Хэштег
  5. Сторис
Всё остальное - это просто списки этих сущностей, такие как лайки, подписки, подписчики и прочее. И для каждой сущности есть свой класс. Для аккаунтов - Account, постов - Media, геолокаций - Location, комментариев - Comment, хэштегов - Tag, историй - Story. И каждый из них (кроме комментариев) нужно обновить, прежде чем работать с ним. То есть если хочется загрузить все свои посты, пролайкать их и получить список геолокаций, то нужно выполнить следующее:

From instaparser.agents import AgentAccoun agent=AgentAccount("oleg.yurchik", "anothersuperpassword") agent.update() media=agent.get_media(count=agent.media_count) locations= for m in media: agent.like(m) agent.update(m) if m.location: locations.append(m.location)
А если позже надо получить последние 10 постов по определённой геолокации, то надо будет сделать следующее:

Agent.update(location) media=agent.get_media(location, count=10)
Пришлось вынести функцию обновления аккаунта из инициализации, так как при необходимости получить всех подписчиков, например, программа бы обновляла каждый из аккаунтов, а это нехорошо.

Библиотека основана на библиотеке requests, и одной из фишек я считаю то, что в методы также можно передать дополнительные параметры для requests. Такая идея пришла ко мне, когда я первый раз получил 429 ошибку от Instagram. Нужно было использовать прокси.

Например, можно сделать так:

Media=agent.get_media(count=agent.media_count, settings={"proxies": {"https": "127.0.0.1:80"}})
где 127.0.0.1:80 - можно указать свой прокси

Также ещё одной фишкой, я думаю, может являться перехват ошибок.

В классах Agent и AgentAccount (те, что и производят общение с Instagram) есть словарь, организованный как дерево, он называется exception_actions . В нём в виде ключей хранятся классы исключений, а в виде значений - функции. Если вдруг произошла какая-то ошибка, она перехватывается и выполняется функция из словаря. Этой функции передаётся объект исключения и параметры, с которыми выполнялся запрос. Она может выполнить какое-то действие и вернуть изменённые (или нет) параметры запроса. Выполнение запроса повторится снова. И будет повторятся столько раз, сколько указано в параметре Agent.repeats. По умолчанию стоит 1.

А ещё можно не беспокоиться о переполнении памяти.

У класса каждой сущности есть словарь, в котором хранятся все объекты данного класса (или объекты подкласса даже). Таким образом, если Вы случайно создадите, например, аккаунт, который уже был создан, конструктор вернёт вам ссылку на ранее созданный аккаунт.

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

  1. Например, проблема при повторном создании объекта. Если вдруг вы захотите использовать аккаунт как рабочий и взаимодействовать через него, а он уже ранее был создан как обычный аккаунт, то создать его снова не получиться. Пока я не знаю, как это решить.
  2. Перехват ошибок иногда ведёт себя очень странно и не до конца протестирован.
Я очень надеюсь, что, может быть, данное решение кому-нибудь пригодится, надеюсь на любые полезные комментарии и на помощь в допиливании этой штуки. В указанной мною статье был приведён пример такого скрипта на PHP, но он занимался только сбором информации и, по-моему, он работал только со старой версией веб-нитерфейса Instagram.

Спасибо за внимание.

В продолжение темы:
Windows

Вероятнее всего вы находитесь в поисках нового, более свежего вида для вашего сайта. Если это так, то у меня для вас есть замечательная новость. В этой подборке вы найдете...

Новые статьи
/
Популярные