Авторизация для backend¶
Что принимает клиент¶
- Cookie
sessionidсуществующей сессии Instagram владельца Reel. - Готовый заголовок
Authorization: Bearer IGT:2:…мобильного клиента. - Сохранённые настройки instagrapi с
authorization_data,cookies,user_agentиuuids.
OAuth access token публичного Instagram Graph API не является такой сессией. SDK не реализует регистрацию OAuth-приложения, вход с паролем, обновление сессии, двухфакторную проверку или автоматическое извлечение cookie из браузера.
Через менеджер секретов¶
Предпочтительный способ для сервиса: получить секрет из своего хранилища и создать сессию непосредственно в памяти:
from edits_api import EditsClient, Session
# Функция вашего проекта, а не API этой библиотеки:
sessionid = secret_store.get("instagram/sessionid")
client = EditsClient(Session.from_sessionid(sessionid))
insights = client.reel_insights(reel_url)
Для окружения процесса поддерживается ровно одна переменная:
IG_SESSIONID или IG_AUTHORIZATION. Дополнительно можно передать IG_APP_ID
и IG_USER_AGENT. Файлы .env автоматически не читаются.
client = EditsClient.from_env()
Не передавайте sessionid аргументом CLI, в URL вашего публичного сервиса или в браузерный JavaScript. Подключение клиента должно происходить на сервере. Не логируйте объект со всеми переменными окружения.
Формат IGT:2¶
Для cookie SDK строит заголовок:
Authorization: Bearer IGT:2:<base64(JSON)>
Содержимое JSON:
{
"ds_user_id": "ACCOUNT_ID",
"sessionid": "SESSION_COOKIE",
"should_use_header_over_cookies": true
}
Если user_id не задан, он извлекается из числового префикса sessionid.
Можно задать явно: Session.from_sessionid(secret, user_id="ACCOUNT_ID").
Суффикс составного media ID в ответе сверяется с этим ID. Если владельца в ответе
нет, библиотека возвращает owner_verified=False, а не выдумывает подтверждение.
Профиль клиента¶
Для from_sessionid() и from_authorization() по умолчанию используются:
User-Agent: Instagram 1.0 Android
X-IG-App-ID: 954255173121948
Это fallback-профиль, найденный в исследованном Edits APK. Именно с ним исходный клиент получил реальный ответ. Это не User-Agent браузера и не гарантия приёма сессий любого аккаунта. Используйте фактические заголовки своего клиента, когда они доступны:
session = Session.from_sessionid(secret, user_agent=actual_user_agent, app_id=actual_app_id)
Устройства, идентификаторы и cookies не генерируются случайно. При загрузке
instagrapi settings сохраняются переданные идентификаторы. Если его settings не
содержат app_id, для распознанного формата используется default instagrapi
567067343352427; приём именно такого профиля этим методом отдельно не проверен.
Сессионный файл и stdin¶
from pathlib import Path
session = Session.from_settings(Path("private/settings.json"))
Минимальный формат файла:
{
"cookies": {"sessionid": "YOUR_SESSION_COOKIE"},
"user_agent": "Instagram 1.0 Android",
"app_id": "954255173121948"
}
Это шаблон, не рабочий секрет. Также поддерживается headers.Authorization.
Для CLI --session - читает такой JSON из stdin. Не отправляйте файл в Git.
Получение собственной сессии для локальной разработки¶
После входа в свой аккаунт значение sessionid можно прочитать в инструментах браузера. Chrome: Application → Storage → Cookies → Instagram. Safari: Хранилище → Файлы cookie → Instagram. Не публикуйте HAR или снимок этой таблицы. Для backend с несколькими клиентами нужны их явно предоставленные сессии; общий sessionid разработчика не даёт доступ к чужой статистике.
Источники: формат авторизации instagrapi, Chrome DevTools cookies.