Вы можете использовать Content Publishing API, чтобы размещать публикации с одним изображением, с одним видео или с одним видео Reels (т. е. публикации с одним медиафайлом) либо публикации, содержащие несколько изображений или видео (кольцевые галереи), в профессиональных аккаунтах Instagram.
C 1 июля 2023 г. все публикации с одним видео, размещенные через Content Publishing API для Instagram, будут публиковаться как видео Reels.
В каждом запросе должен быть указан маркер доступа пользователя приложения.
Для публикации требуется сочетание перечисленных ниже разрешений, которое зависит от конечных точек, используемых вашим приложением. Разрешения для каждой конечной точки см. в справке по конечным точкам.
Если приложением будут пользоваться люди, не имеющие роли в нем или в компании, которой оно принадлежит, то все разрешения, используемые в этом приложении, должны быть одобрены в ходе проверки.
Мы создаем cURL медиаобъекта, используемого при попытках публикации, поэтому в момент публикации медиафайлы должны быть размещены на общедоступном сервере.
Если профессиональный аккаунт Instagram подключен к Странице, которая требует авторизации для публикаций на Странице, необходимо сначала пройти ее.
Возможна ситуация, когда для Страницы, на которой пользователь может выполнять задачи, авторизация изначально не требовалась, но затем стала необходима. В этом случае пользователь не сможет публиковать контент в своем профессиональном аккаунте Instagram, пока не пройдет авторизацию. Так как невозможно узнать заранее, требуется ли авторизация для публикации на Странице пользователя приложения, рекомендуется советовать всем пользователям пройти ее.
Дополнительные ограничения см. в справке по каждой конечной точке.
Для аккаунтов Instagram действует ограничение количества публикаций через API: не более 50 публикаций в течение 24 часов. Кольцевые галереи считаются одной публикацией. Это ограничение применяется при публикации контейнеров медиаобъектов через конечную точку POST /{ig-user-id}/media_publish
. Желательно, чтобы ваше приложение также ограничивало количество публикаций, особенно если оно позволяет пользователям планировать их размещение в будущем.
Чтобы проверить состояние ограничения в профессиональном аккаунте Instagram, выполните запрос к конечной точке GET /{ig-user-id}/content_publishing_limit
.
Этот API включает в себя перечисленные ниже конечные точки. Информацию о требованиях для использования каждой из них см. в соответствующей документации.
POST /{ig-user-id}/media
— загрузка медиаобъектов и создание их контейнеров.POST /{ig-user-id}/media_publish
— публикация загруженных медиаобъектов с помощью их контейнеров.GET /{ig-container-id}?fields=status_code
— проверка возможности и состояния публикации контейнера медиаобъекта.GET /{ig-user-id}/content_publishing_limit
— проверка текущего состояния ограничения числа обращений к публикации для пользователя приложения.Публикация с одним изображением, видео, историей или Reels происходит в два этапа:
POST /{ig-user-id}/media
для создания контейнера из изображения или видео, размещенного на вашем общедоступном сервере.POST /{ig-user-id}/media_publish
для публикации контейнера.Этап 1 из 2. Создание контейнера
Предположим, у вас есть изображение
https://www.example.com/images/bronz-fonz.jpg
...которое вы хотите опубликовать с хэштегом #BronzFonz в качестве подписи. Отправьте запрос к конечной точке POST /{ig-user-id}/media
.
POST https://graph.facebook.com/v21.0
/17841400008460056/media
?image_url=https://www.example.com/images/bronz-fonz.jpg
&caption=#BronzFonz
Он возвращает ID для изображения.
{ "id": "17889455560051444" // IG Container ID }
Этап 2 из 2. Публикация контейнера
Используйте конечную точку POST /{ig-user-id}/media_publish
для публикации ID контейнера, возвращенного в предыдущем шаге.
POST https://graph.facebook.com/v21.0
/17841400008460056/media_publish ?creation_id=17889455560051444
{ "id": "17920238422030506" // IG Media ID }
Вы можете публиковать до 10 изображений или видео либо сочетания этих двух типов файлов в одной публикации (публикации с кольцевыми галереями). Публикация кольцевых галерей происходит в три этапа:
POST /{ig-user-id}/media
для создания отдельных контейнеров объектов для каждого изображения или видео, которые появятся в кольцевой галерее.POST /{ig-user-id}/media
для создания отдельного контейнера кольцевой галереи для объектов.POST /{ig-user-id}/media_publish
для публикации контейнера кольцевой галереи.При учете ограничения числа обращений публикации кольцевых галерей считаются одной публикацией.
Ограничения
Этап 1 из 3. Создание контейнера объекта
Используйте конечную точку POST /{ig-user-id}/media
, чтобы создать контейнер объекта для изображения или видео, которое появится в кольцевой галерее. В кольцевых галереях может быть до 10 изображений и видео.
POST /{ig-user-id}/media
Следующие параметры являются обязательными. Информацию о дополнительных поддерживаемых параметрах см. в справке по конечной точке POST /{ig-user-id}/media
.
is_carousel_item
— задать значение true
. Задает изображение или видео, которое появится в кольцевой галерее.image_url
— (только изображения) путь к изображению. Мы создаем cURL изображения на основе переданного URL, поэтому он должен указывать на общедоступный сервер.media_type
— (только видео) задать значение VIDEO
. Указывает, что медиаобъект — это видео.video_url
— (только видео) путь к видео. Мы создаем cURL видео на основе переданного URL, поэтому он должен указывать на общедоступный сервер.Если операция выполнена успешно, API предоставит ID контейнера объекта, который может быть использован при создании контейнера кольцевой галереи.
Повторите этот процесс для каждого изображения или видео, которое должно появиться в кольцевой галерее.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media?image_url=https%3A%2F%2Fsol...&is_carousel_item=true&access_token=EAAOc..."
{ "id": "17899506308402767" }
Этап 2 из 3. Создание контейнера кольцевой галереи
Используйте конечную точку POST /{ig-user-id}/media
, чтобы создать контейнер кольцевой галереи.
POST /{ig-user-id}/media
Следующие параметры являются обязательными. Информацию о дополнительных поддерживаемых параметрах см. в справке по конечной точке POST /{ig-user-id}/media
.
media_type
— задать значение CAROUSEL
. Указывает контейнер для кольцевой галереи.children
— массив не более чем из 10 ID контейнеров каждого изображения и видео, которые должны появиться в публикуемой кольцевой галерее. В кольцевых галереях может быть до 10 изображений и видео.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media?caption=Fruit%20candies&media_type=CAROUSEL&children=17899506308402767%2C18193870522147812%2C17853844403701904&access_token=EAAOc..."
{ "id": "18000748627392977" }
Этап 3 из 3. Публикация контейнера кольцевой галереи
Используйте конечную точку POST /{ig-user-id}/media_publish
, чтобы опубликовать контейнер кольцевой галереи (публикация кольцевой галереи). В аккаунтах можно разместить не более 50 публикаций за каждые 24 часа. Публикация кольцевой галереи считается одной публикацией.
POST /{ig-user-id}/media_publish
Следующие параметры являются обязательными.
creation_id
— ID контейнера кольцевой галереи.Если операция выполнена успешно, API предоставит ID IG Media альбома кольцевой галереи.
curl -i -X POST \
"https://graph.facebook.com/v21.0
/90010177253934/media_publish?creation_id=18000748627392977&access_token=EAAOc..."
{ "id": "90010778390276" }
Reels — это короткие видео, которые могут появляться на вкладке Reels в приложении Instagram, если они соответствуют определенным спецификациям и выбраны нашим алгоритмом. Чтобы опубликовать видео Reels, выполните те же действия, что и для размещения публикации с одним медиаобъектом, и добавьте параметр media_type=REELS
вместе с указанием пути к видео, используя параметр video_url
.
Reels — это не новый тип медиафайлов, хотя при публикации видео Reels вы и указываете параметр media_type=REELS
. Если вы опубликуете видео Reels, а затем запросите его поле media_type
, будет возвращено значение VIDEO
. Чтобы определить, был ли опубликованный видеоролик обозначен как видео Reels, запросите его поле media_product_type
.
Чтобы узнать, как публиковать видео Reels в Instagram, воспользуйтесь примером кода на GitHub (insta_reels_publishing_api_sample).
Для удобства разработчиков мы опубликовали полный список вызовов Graph API для видео Reels в Instagram на платформе Postman API. Подробнее см. в статье Подборки Postman для видео Reels на Facebook и в Instagram.
Подробнее о Reels см. в документации по видео Reels для разработчиков.
В настоящий момент публиковать истории с помощью Content Publising API могут только бизнес-аккаунты.
Истории — это видео или изображения, которые публикуются как истории в Instagram. Чтобы опубликовать историю, выполните те же действия, что и для размещения публикации с одним медиаобъектом, добавьте параметр media_type=STORIES
и укажите путь к изображению или видео в параметре image_url
или video_url
.
Примечание. Истории — это не новый тип медиафайлов, хотя при публикации истории вы и указываете параметр media_type=STORIES
. Если вы опубликуете историю, а затем запросите ее поле media_type
, будет возвращено значение IMAGE/VIDEO
. Чтобы определить, было ли опубликованное видео или изображение обозначено как история, запросите его поле media_product_type
.
Протокол возобновляемой загрузки — это совершенно новый поток для публикации контента в Instagram, который поддерживает загрузку таких media_types
, как видео для Reels, видеоистории и элементы кольцевых галерей с видео.
Этот новый протокол поддерживает создание медиафайлов в Instagram как из локальных видео, так и из размещенных на серверах с общедоступными URL. Этот протокол позволяет возобновлять операцию загрузки локального файла после разрыва сетевого соединения и других ошибок передачи, что экономит время и пропускную способность в случае сбоев сети. В нем сохраняются те же самые спецификации медиафайла.
POST https://graph.facebook.com/{api-version}/{ig-user-id}/media
— инициализация контейнеров создания видео путем задания параметра upload_type=resumable.POST https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}
— более надежная загрузка локального видео или файла по URL благодаря использованию протокола возобновляемой загрузки. POST https://graph.facebook.com/{api-version}/{ig-user-id}/media_publish
— публикация загруженных медиафайлов с использованием их контейнеров.GET /{ig-container-id}?fields=status_code
— проверка доступности и статуса публикации медиаконтейнеров.user_tags=[{username:’ig_user_name’}]
кодируется так: user_tags=%5B%7Busername:ig_user_name%7D%5D
([
кодируется как %5B
, а {
— как %7B
). Другие преобразования см. в стандарте HTML-кодирования URL.curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=REELS" \ -d "upload_type=resumable" \ -d "caption={caption}"\ -d "collaborators={collaborators-username}" -d "cover_url={cover-url}" \ -d "audio_name={audio-name}" \ -d "user_tags={user-tags}" \ -d "location_id={location-id}" \ -d "thumb_offset={thumb-offset}" \ -H "Authorization: OAuth {access-token}"
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=STORIES" \ -d "upload_type=resumable" \ -H "Authorization: OAuth {access-token}"
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=VIDEO" \ -d "is_carousel_item=true" \ -d "upload_type=resumable" \ -H "Authorization: OAuth {access-token}"
{ "id": "{ig-container-id}", "uri": "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" }
В большинстве вызовов Graph API используется хост graph.facebook.com
, однако в вызовах для загрузки видео для Reels используется хост rupload.facebook.com
.
Поддерживаются следующие источники загружаемых видеофайлов:
Загрузите видео, используя ig-container-id
, возвращенный в запросе сеанса возобновляемой загрузки.
rupload.facebook.com
.media_type
используется один и тот же поток загрузки видео.ig-container-id
— это ID, возвращаемый запросами сеанса возобновляемой загрузки. access-token
— тот же, что использовался на предыдущих этапах.offset
задается первый загружаемый байт, обычно это 0
.file_size
задается размер файла в байтах.Your_file_local_path
указывается путь к локальному файлу, например при загрузке файла из папки Загрузки в macOS это будет следующий путь: @Downloads/example.mov.curl -X POST "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" \ -H "Authorization: OAuth {access-token}" \ -H "offset: 0" \ -H "file_size: Your_file_size_in_bytes" \ --data-binary "@my_video_file.mp4"
curl -X POST "https://rupload.facebook.com/ig-api-upload/{api-version}/{ig-container-id}" \ -H "Authorization: OAuth {access-token}" \ -H "file_url: https://example_hosted_video.com"
// Success Response Message { "success":true, "message":"Upload successful." } // Failure Response Message { "debug_info":{ "retriable":false, "type":"ProcessingFailedError", "message":"{\"success\":false,\"error\":{\"message\":\"unauthorized user request\"}}" } }
Чтобы создать несколько ig-container-ids
, повторите шаги 1 и 2, задав для параметра is_carousel_item
значение true
. Затем создайте контейнер кольцевой галереи, который будет содержать все элементы галереи. В кольцевой галерее можно использовать одновременно изображения и видео.
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media" \ -d "media_type=CAROUSEL" \ -d "caption={caption}"\ -d "collaborators={collaborator-usernames}" \ -d "location_id={location-id}" \ -d "product_tags={product-tags}" \ -d "children=[{ig-container-id},{ig-container-id}...]" \ -H "Authorization: OAuth {access-token}"
Для публикации видео Reels и видеоисторий используется {ig-container-id}
, созданный на шаге 1. Для публикации контейнера кольцевой галереи используется {ig-container-id}
, созданный на шаге 3.
curl -X POST "https://graph.facebook.com/{api-version}/{ig-user-id}/media_publish" \ -d "creation_id={ig-container-id}" \ -H "Authorization: OAuth {access-token}"
graph.facebook.com
предоставляет конечную точку GET
для получения статуса загрузки. В поле video_status
указываются сведения о процессе локальной загрузки.
uploading_phase
позволяет определить, был ли файл загружен и сколько байт передано. processing_phase
содержит сведения о статусе обработки видео после загрузки видеофайла.// GET status from graph.facebook.com curl -X GET "https://graph.facebook.com/v19.0/{ig-container-id}?fields=id,status,status_code,video_status" \ -H "Authorization: OAuth {access-token}"
graph.facebook.com
// A successfully created ig container { "id": "{ig-container-id}", "status": "Published: Media has been successfully published.", "status_code": "PUBLISHED", "video_status": { "uploading_phase": { "status": "complete", "bytes_transferred": 37006904 }, "processing_phase": { "status": "complete" } } } // An interrupted ig container creation, from here you can resume your upload in step 2 with offset=50002. { "id": "{ig-container-id}", "status": "Published: Media has been successfully published.", "status_code": "PUBLISHED", "video_status": { "uploading_phase": { "status": "in_progress", "bytes_transferred": 50002 }, "processing_phase": { "status": "not_started" } } }
Вы можете добавить пользователей Instagram с открытым профилем в качестве соавторов изображения, кольцевой галереи или видео Reels. Эти пользователи получат приглашения стать соавтором для этого конкретного медиаобъекта. Чтобы отметить пользователей на изображении, выполните действия, перечисленные выше в пункте "Публикации с одним медиаобъектом", но при создании контейнера медиаобъекта укажите в параметре collaborators массив строк с именами пользователей Instagram, которых вы хотите пригласить в качестве соавторов для этого медиаобъекта.
POST graph.facebook.com/17841400008460056/media ?image_url=https://www.example.com/images/bronzed-fonzes.jpg &caption=#BronzedFonzes! &collaborators= [‘username1’,’username2’]
Вы можете использовать Pages Search API . Обязательно добавьте в свой запрос поле 'location' для поиска Страниц, названия которых соответствуют строке поиска. Затем обработайте результаты и определите все Страницы, созданные для физического местоположения. Если при публикации изображения или видео указать ID такой Страницы, к этому медиаобъекту будет добавлена соответствующая геометка.
Чтобы Страницу можно было отметить, ее данные о местоположении должны содержать широту и долготу.
Убедитесь, что в ответе для Страницы, которую вы хотите использовать, указаны широта и долгота. Если при создании контейнера вы попытаетесь указать Страницу без геоданных, возникнет исключение INSTAGRAM_PLATFORM_API__INVALID_LOCATION_ID
.
Как только вы получите ID Страницы, назначьте его параметру location_id
при публикации контейнеров объектов с одним медиафайлом или кольцевой галереи.
Ставить метки товаров Instagram Shopping можно как в публикациях с одним медиафайлом, так и в кольцевых галереях. Подробнее см. в руководстве по работе с метками товаров.
Вы можете отметить на изображении пользователей с общедоступными аккаунтами Instagram, после чего они получат уведомление о том, что их отметили.
Чтобы отметить пользователей на изображении, выполните шаги, приведенные выше в пункте Публикации с одним медиаобъектом, но при создании контейнера медиаобъекта укажите параметр user_tags
и массив объектов с отмеченными пользователями Instagram и их координатами X/Y на изображении.
Примечание. Метки пользователей в видео в кольцевых галереях не поддерживаются.
POST graph.facebook.com/17841400008460056/media ?image_url=https://www.example.com/images/bronzed-fonzes.jpg &caption=#BronzedFonzes! &user_tags= [ { username:'kevinhart4real', x: 0.5, y: 0.8 }, { username:'therock', x: 0.3, y: 0.2 } ]
Будет получен ID контейнера, который затем можно опубликовать с использованием конечной точки Публикация медиаобъектов для IG User.
user_tags
должен быть массив объектов в формате JSON.username
, x
и y
) для каждого пользователя.x
и y
должны быть числами с плавающей запятой (float
) в диапазоне от 0.0
до 1.0
и отсчитываться от левого верхнего угла изображения.Если вы создали контейнер для видео, но конечная точка POST /{ig-user-id}/media_publish
не возвращает ID опубликованного медиафайла, выполните запрос к конечной точке GET /{ig-container-id}?fields=status_code
, чтобы узнать статус публикации. Вы можете получить следующие значения:
EXPIRED
— контейнер не был опубликован в течение 24 часов и больше не действителен;ERROR
— контейнер не удалось опубликовать из-за ошибки;FINISHED
— контейнер с медиаобъектом готов к публикации;IN_PROGRESS
— процесс публикации контейнера ещё идет;PUBLISHED
— медиаобъект опубликован.Мы рекомендуем запрашивать статус публикации раз в минуту в течение максимум пяти минут.