Instagram Content Publishing API: rasm, Reels va karusel joylash
Instagram API orqali post joylash ikki chaqiruvdan iborat: POST /<IG_ID>/media bilan media konteyner yaratiladi, so'ng POST /<IG_ID>/media_publish bilan e'lon qilinadi. Meta faylni o'sha paytda ochiq URL'dan yuklab oladi, rasmlar esa faqat JPEG bo'lishi kerak. Har bir akkaunt surilib boruvchi 24 soatda API orqali 100 ta post joylay oladi; karusel bitta post hisoblanadi.
Nashr etilgan: Yangilangan:
Instagram API orqali post joylash qanday ishlaydi?
Standart oqimda fayl so'rov ichida yuborilmaydi. Avval ochiq URL'dagi mediaga ishora qiluvchi konteyner yaratasiz — Meta faylni o'zi yuklab olib qayta ishlaydi. Konteynerning status_code qiymati FINISHED bo'lgach, media_publish bilan e'lon qilasiz va Instagram media ID ni olasiz. Videoni qayta ishlash vaqt oladi, shuning uchun uning holatini so'rab turish kerak. Katta videolar uchun resumable upload sessiyasi ham bor.
Oqim ikkala ulanish usulida bir xil. Instagram Login graph.instagram.com ga Instagram User token bilan, Facebook Login esa graph.facebook.com ga Page access token va sahifadan olingan Instagram akkaunt ID bilan murojaat qiladi.
Post joylash faqat professional akkauntlarda ishlaydi. API orqali shopping teglari va filtrlar qo'llab-quvvatlanmaydi.
Post joylash uchun ruxsatlar va token
| Instagram Login | Facebook Login | |
|---|---|---|
| Host | graph.instagram.com | graph.facebook.com |
| Token | Instagram User access token | Page access token |
| Ruxsatlar | instagram_business_basic, instagram_business_content_publish | instagram_basic, instagram_content_publish, pages_read_engagement |
| Sahifa roli Business Manager orqali berilgan bo'lsa | yo'q | Qo'shimcha ads_management, ads_read |
| Kirish darajasi | O'z akkauntlaringiz uchun Standard; begona akkauntlar uchun Advanced (App Review) | O'z akkauntlaringiz uchun Standard; begona akkauntlar uchun Advanced (App Review) |
boryo'q
Qo'llab-quvvatlanadigan media turlari va talablar
| Tur | Konteyner qanday yaratiladi | Asosiy talablar |
|---|---|---|
| Rasm | image_url | Faqat JPEG (MPO va JPS yo'q), 8 MB gacha, tomonlar nisbati 4:5 dan 1.91:1 gacha |
| Reels | media_type=REELS + video_url | 3 soniyadan 15 daqiqagacha, 300 MB gacha, H.264 yoki HEVC, 23–60 fps; share_to_feed lentada ko'rinishini boshqaradi |
| Karusel | is_carousel_item=true bilan bola-konteynerlar, keyin media_type=CAROUSEL + children | 10 tagacha rasm, video yoki aralash; limitda bitta post hisoblanadi |
| Story | media_type=STORIES + rasm yoki video URL | 24 soatdan keyin yo'qoladi; havola, so'rovnoma va joylashuv stikerlari yo'q; Meta'ning Facebook Login hujjatida faqat business akkauntlar uchun |
Izohlar va cheklovlar
Izoh (caption): 2200 belgigacha, 30 ta heshteg va 20 ta @eslatma. Rasmli postlar alt_text qabul qiladi (2025-yil 24-martdan; Reels va story uchun emas), 2026-yil 22-iyundan esa is_ai_generated=true AI info yorlig'ini qo'shadi. media_type=VIDEO 2023-yil 9-noyabrdan beri qo'llab-quvvatlanmaydi — bitta video REELS sifatida joylanadi.
Instagram API orqali post joylash: qadamma-qadam
Mediani ochiq joylang
Faylni autentifikatsiyasiz ochiq HTTPS URL'ga qo'ying. Meta mediani e'lon urinishi paytida cURL bilan yuklab oladi, shuning uchun havola aynan shu paytda ishlashi kerak.
Konteyner yarating
POST /<IG_ID>/media — image_url (yoki media_type=REELS va video_url) va ixtiyoriy caption bilan. Javobda konteyner ID keladi.
Qayta ishlashni kuting
Video va karusel uchun GET /<CONTAINER_ID>?fields=status_code qiymati FINISHED bo'lguncha so'rang. Meta holatni daqiqasiga bir martadan ko'p bo'lmagan holda, 5 daqiqagacha tekshirishni tavsiya qiladi.
E'lon qiling
POST /<IG_ID>/media_publish — creation_id=<CONTAINER_ID> bilan. Javobdagi ID — e'lon qilingan Instagram media ID.
Natijani o'qing
Yangi ID bo'yicha media maydonlarini (masalan permalink) so'rab, postga havolani saqlang.
Xom so'rovlar qanday ko'rinadi
Instagram Login hosti bilan platforma darajasidagi chaqiruvlar. Facebook Login'da host graph.facebook.com, token esa Page token bo'ladi.
# 1. JPEG rasm uchun konteyner
curl -X POST "https://graph.instagram.com/v23.0/$IG_ID/media" \
-H "Authorization: Bearer $IG_TOKEN" \
-d "image_url=https://cdn.example.com/photo.jpg" \
--data-urlencode "caption=Yangi kolleksiya"
# -> {"id": "<CONTAINER_ID>"}
# 2. Holatni tekshirish (video va karusel uchun)
curl -G "https://graph.instagram.com/v23.0/$CONTAINER_ID" \
-H "Authorization: Bearer $IG_TOKEN" -d "fields=status_code"
# 3. E'lon qilish
curl -X POST "https://graph.instagram.com/v23.0/$IG_ID/media_publish" \
-H "Authorization: Bearer $IG_TOKEN" -d "creation_id=$CONTAINER_ID"Socialift SDK bilan post joylash
import asyncio, os
from socialift import Instagram
CDN = "https://cdn.example.com"
async def main():
token = os.environ["IG_USER_TOKEN"]
async with Instagram.from_env() as ig:
photo = await ig.publish(token, image_url=f"{CDN}/photo.jpg", caption="Yangi kolleksiya")
reel = await ig.publish(token, video_url=f"{CDN}/teaser.mp4", is_reel=True, caption="Sahna ortidan")
album = await ig.publish_carousel(
token, image_urls=[f"{CDN}/1.jpg", f"{CDN}/2.jpg", f"{CDN}/3.jpg"], caption="Lookbook"
)
post = await ig.media_details(photo["media_id"], token)
print(post.get("permalink"), reel["media_id"], len(album["children"]))
asyncio.run(main())publish konteyner yaratadi va e'lon qiladi, container_id va media_id qaytaradi. Video uchun status_code'ni har 2 soniyada, 60 soniyagacha tekshiradi; ERROR yoki vaqt tugasa ApiError ko'taradi — uzun Reels uchun o'z fon vazifangizda qayta urinish kerak bo'lishi mumkin.
Video uchun doim is_reel=True bering: Meta media_type=VIDEO ni endi qabul qilmaydi.
publish_carousel bola-konteynerlarni parallel yaratadi, ota-konteyner tayyor bo'lishini kutadi va e'lon qiladi. U faqat rasm URL'larini oladi, birinchi 10 tasini qoldiradi va 2 tadan kam bo'lsa ConfigurationError ko'taradi.
Facebook Login uchun Instagram.via_facebook(app_secret=...), Page token va ig_user_id= ishlating. Story, alt_text, share_to_feed va videoli karusel elementlari bu metodlarning parametrlari emas — ular uchun Graph API'ni to'g'ridan-to'g'ri chaqiring.
API orqali sutkasiga nechta post joylash mumkin?
Instagram akkauntlari surilib boruvchi 24 soatlik davrda API orqali 100 ta post bilan cheklangan, karusel bitta post hisoblanadi. Yarim tunda nollanish yo'q: oyna uzluksiz siljiydi.
Joriy sarfni GET /<IG_ID>/content_publishing_limit bilan tekshiring. Javobda quota_usage (oynadagi postlar soni) va quota_total hamda quota_duration bor config obyekti keladi; ixtiyoriy since parametri 24 soatdan eski bo'lmagan Unix vaqtini qabul qiladi. Raqamni kodga qattiq yozmang — quota_total ni javobdan o'qing.
Konteynerlarning o'z chegarasi bor: akkaunt surilib boruvchi 24 soatda 400 ta konteyner yarata oladi. E'lon qilinmagan konteyner 24 soatdan keyin eskiradi, shuning uchun ularni oldindan ko'p yaratmang.
Konteyner holat kodlari
| status_code | Ma'nosi | Nima qilish kerak |
|---|---|---|
| IN_PROGRESS | Konteyner hali qayta ishlanmoqda | Keyinroq yana tekshiring |
| FINISHED | Konteyner e'lon qilishga tayyor | media_publish ni chaqiring |
| PUBLISHED | Konteyner mediasi allaqachon e'lon qilingan | Qayta e'lon qilmang |
| ERROR | Qayta ishlash muvaffaqiyatsiz | Mediani talablarga solishtiring va yangi konteyner yarating |
| EXPIRED | 24 soat ichida e'lon qilinmagan | Yangi konteyner yarating |
Tipik xatolar va ulardan qochish
- URL avtorizatsiya talab qiladi, login sahifasiga yo'naltiradi yoki muddati tugagan (imzolangan havolalar) — Meta faylni yuklab ololmaydi.
- Rasm PNG, WebP yoki boshqa formatda — avval JPEG'ga o'tkazing.
- Rasm nisbati 4:5–1.91:1 oralig'idan tashqarida — yuklashdan oldin qirqing.
- Video yoki karusel konteyneri FINISHED bo'lmasdan media_publish chaqirilgan.
- media_type=VIDEO yuborilgan — bitta video uchun REELS ishlating.
- Karuselda 10 tadan ko'p element yoki caption 2200 belgi, 30 heshteg yoki 20 eslatmadan oshgan.
- Ommaviy importda 100 postlik oynaga urilish — avval content_publishing_limit ni tekshiring.
- Shopping teglari, filtrlar yoki story stikerlarini kutish — API ularni qo'llab-quvvatlamaydi.
Ko'p so'raladigan savollar
Instagram API orqali sutkasiga nechta post joylash mumkin?
Bitta akkaunt surilib boruvchi 24 soatda API orqali 100 ta post joylay oladi, karusel bitta post hisoblanadi. Joriy sarf va limit qiymatini GET /<IG_ID>/content_publishing_limit qaytaradi.
API orqali Instagram story joylash mumkinmi?
Ha, media_type=STORIES bilan konteyner yaratiladi. Havola, so'rovnoma va joylashuv stikerlari qo'llab-quvvatlanmaydi, Meta'ning Facebook Login hujjatida story joylash faqat business akkauntlar uchun. Socialift SDK'da buning uchun alohida metod bor: publish_story() (1.3.0 dan). publish() esa faqat lentaga joylaydi.
Karuselda rasm va videoni aralashtirish mumkinmi?
Ha, karusel 10 tagacha rasm, video yoki ularning aralashmasini qabul qiladi; har bir element is_carousel_item=true bilan alohida konteyner bo'ladi. SDK'dagi publish_carousel esa faqat rasmlar bilan ishlaydi.
Nega Instagram rasmimni rad etadi?
Ko'pincha sabab format: faqat JPEG qabul qilinadi, 8 MB gacha va 4:5 dan 1.91:1 gacha nisbatda. Yana bir sabab — URL ochiq emas yoki e'lon paytida ishlamagan, chunki Meta faylni aynan shu paytda yuklab oladi.
Instagram API orqali postni rejalashtirish mumkinmi?
Hujjatlashtirilgan oqim media_publish chaqirilgan paytda e'lon qiladi, shuning uchun rejalashtirish odatda o'z backend'ingizda navbat yoki cron bilan qilinadi. Konteyner 24 soatda eskiradi — uni e'lon vaqtiga yaqin yarating.