TikTok Content Posting API: video va rasm e'lon qilish
TikTok Content Posting API ikki rejimda ishlaydi. Direct Post (video.publish scope) kontentni to'g'ridan-to'g'ri ijodkor profiliga joylaydi; Upload (video.upload) esa videoni ijodkorning TikTok inbox'iga yuboradi va u postni ilovada yakunlaydi. Har bir Direct Post'dan oldin creator_info so'raladi. TikTok ilovangizni audit qilmaguncha har bir post faqat shaxsiy (SELF_ONLY) bo'ladi.
Yangilangan:
Direct Post yoki Upload: qaysi biri kerak?
Agar foydalanuvchi postni aynan sizning ilovangizda yakunlasa, Direct Post ishlating: ilova sarlavha, maxfiylik va interaktiv sozlamalarni yig'adi, TikTok esa qayta ishlashdan so'ng darhol e'lon qiladi. Agar ijodkor TikTok ichida tahrirlashi kerak bo'lsa, Upload ishlating: ilova mediani uzatadi, ijodkor inbox'da bildirishnoma oladi va postni TikTok ilovasida yakunlaydi.
Ikkala rejim mexanikasi bir xil: init so'rovi publish_id (fayl yuklashda upload_url ham) qaytaradi, media uzatiladi, natija esa holat endpoint'i yoki Content Posting webhook'lari orqali kuzatiladi.
Direct Post qoidalari qattiqroq — majburiy creator info so'rovi, belgilangan e'lon interfeysi va ochiq ko'rinish uchun audit — chunki kontent ijodkor TikTok'ni ochmasdan efirga chiqadi.
Direct Post va Upload taqqoslanishi
| Jihat | Direct Post | Upload (inbox) |
|---|---|---|
| Scope | video.publish | video.upload |
| Video endpoint'i | /v2/post/publish/video/init/ | /v2/post/publish/inbox/video/init/ |
| Rasm endpoint'i | /v2/post/publish/content/init/, post_mode = DIRECT_POST | /v2/post/publish/content/init/, post_mode = MEDIA_UPLOAD |
| Sarlavha va maxfiylikni kim belgilaydi | Ilovangiz, foydalanuvchining aniq tanlovi asosida | Ijodkor, TikTok ichida |
| Creator info so'rovi | Har bir postdan oldin majburiy | Hujjatlashtirilgan oqimda yo'q |
| Hajm cheklovi | Ijodkorga 24 soatda cheklov, odatda 15 post atrofida | Istalgan 24 soatda ko'pi bilan 5 ta kutilayotgan yuborish |
| Yakuniy holat | PUBLISH_COMPLETE | SEND_TO_USER_INBOX, keyin ijodkor o'zi e'lon qiladi |
| Socialift SDK | publish_video, publish_photos | upload_video, publish_photos(draft=True) |
Direct Post bilan video qanday e'lon qilinadi
Tartib muhim: TikTok qoidalari init so'rovidan oldin creator info va maxsus e'lon oynasini talab qiladi.
video.publishruxsatini olingIjodkor Login Kit orqali ilovangizga
video.publishruxsatini bergan bo'lishi kerak. Access token 24 soat yashaydi — uni yangilab turing.Creator info so'rang
POST
/v2/post/publish/creator_info/query/ijodkor nickname va avatarini,privacy_level_options,comment_disabled,duet_disabled,stitch_disabledvamax_video_post_duration_secni qaytaradi.spam_risk_too_many_postsyokireached_active_user_capxatosi kelsa, hozir e'lon qilishni taklif qilmang.Qoidalarga mos e'lon oynasini ko'rsating
Ijodkor nickname'i, standart qiymatsiz maxfiylik ro'yxati, standart holatda o'chiq interaktiv tugmalar (ijodkor o'chirgan bo'lsa — nofaol), tijoriy kontentni belgilash tugmasi, oldindan ko'rish va Music Usage Confirmation roziligi bo'lsin. Qayta ishlash bir necha daqiqa olishi mumkinligini ayting.
Postni ishga tushiring (init)
post_info(title, privacy_level, disable_comment, disable_duet, disable_stitch, brend belgilari) vaFILE_UPLOADyokiPULL_FROM_URLmanbalisource_infoyuboring. Javobdapublish_id, fayl yuklashda esaupload_urlham keladi.Mediani uzating
FILE_UPLOADda bo'laklarni bir soat ichidaupload_urlga PUT qilasiz.PULL_FROM_URLda TikTok faylni tasdiqlangan manzilingizdan o'zi yuklab oladi.Natijani kuzating
publish_idbilan/v2/post/publish/status/fetch/ni so'rang yoki Content Posting webhook'lariga obuna bo'ling va yakuniy natijani foydalanuvchiga ko'rsating.
privacy_level qiymatlari
Faqat creator info shu ijodkor uchun qaytargan qiymatni yuboring — boshqasi privacy_level_option_mismatch bilan rad etiladi.
| Qiymat | Postni kim ko'radi |
|---|---|
PUBLIC_TO_EVERYONE | Hamma |
MUTUAL_FOLLOW_FRIENDS | Do'stlar — bir-biriga obuna bo'lgan akkauntlar |
FOLLOWER_OF_CREATOR | Ijodkor obunachilari |
SELF_ONLY | Faqat ijodkor; audit qilinmagan klient ishlata oladigan yagona qiymat |
Ro'yxat ijodkor akkauntining sozlamalariga bog'liq, shuning uchun uni kodda qattiq yozmang.
Python'da Direct Post
SDK init so'rovini yuboradi, fayl bo'laklarini yuklaydi va wait=True bo'lsa post e'lon qilinguncha yoki xato bo'lguncha holatni tekshiradi.
from socialift import TikTok
async def post_video(token: str, privacy: str, caption: str) -> dict:
async with TikTok.from_env() as tt:
info = await tt.creator_info(token)
if privacy not in info["privacy_level_options"]:
raise ValueError(f"{privacy} is not allowed for this creator")
return await tt.publish_video(
token,
video="renders/launch.mp4", # FILE_UPLOAD, SDK bo'laklab yuklaydi
title=caption,
privacy_level=privacy, # auditgacha faqat SELF_ONLY
disable_comment=info.get("comment_disabled", False),
disable_duet=info.get("duet_disabled", False),
disable_stitch=info.get("stitch_disabled", False),
wait=True,
)publish_video standart holatda SELF_ONLY yuboradi — audit qilinmagan klient uchun yagona ruxsat etilgan daraja. wait=True holatni har 3 soniyada 2 daqiqagacha so'raydi; post muvaffaqiyatsiz bo'lsa, TikTok'ning fail_reason qiymati bilan ApiError ko'tariladi.
video= o'rniga video_url= bersangiz, PULL_FROM_URL rejimi ishlaydi. Domen tasdiqlanmagan bo'lsa, SDK url_ownership_unverified uchun PermissionError ko'taradi.
Audit qilinmagan ilova nimani qila oladi va nimani yo'q
TikTok auditdan o'tmagan har bir Content Posting API klientini cheklaydi. U e'lon qilgan barcha kontent faqat shaxsiy ko'rinishda (SELF_ONLY) bo'ladi, post paytida ijodkor akkaunti shaxsiy (private) bo'lishi shart va 24 soatlik oynada u orqali ko'pi bilan 5 foydalanuvchi e'lon qila oladi. Ochiq e'lon qilishga urinish unaudited_client_can_only_post_to_private_accounts xatosini qaytaradi.
Bu integratsiyani qurish va namoyish qilish uchun yetarli, lekin ishga tushirish uchun emas. Sinovdan keyin auditga ariza berasiz: u TikTok shartlari va content sharing guidelines'ga muvofiqlikni tekshiradi. Sandbox bu yerda yordam bermaydi — unda ochiq video uchun Content Posting API berilmaydi.
Auditgacha yaratilgan postlar shaxsiyligicha qoladi. Ulardan birini ochiq qilish uchun akkaunt egasi avval akkauntini ochiq qiladi, keyin TikTok'da o'sha postning maxfiyligini «Everyone» ga o'zgartiradi.
PULL_FROM_URL va FILE_UPLOAD farqi
Ikkala manba Direct Post va Upload videolari uchun ishlaydi. Rasm postlari faqat PULL_FROM_URL ni qo'llab-quvvatlaydi.
| Jihat | PULL_FROM_URL | FILE_UPLOAD |
|---|---|---|
| Qanday ishlaydi | TikTok mediani sizning URL'ingizdan yuklab oladi | Baytlarni qaytarilgan upload_url ga PUT qilasiz |
| Oldindan shart | URL properties'da domen yoki URL prefiksi tasdiqlangan | Yo'q |
| Manzil qoidalari | HTTPS, redirect'siz, IP emas domen; yuklab olish boshlangandan bir soat ichida tugaydi, shu vaqt davomida ochiq bo'lsin | upload_url bir soat amal qiladi |
| Bo'laklash | Kerak emas | Bo'lak 5–64 MB, oxirgisi 128 MB gacha; 5 MB dan kichik fayl bir butun yuboriladi; 1000 tagacha bo'lak, ketma-ket |
| Bo'laklar soni | Kerak emas | total_chunk_count = video_size ÷ chunk_size, pastga yuvarlanadi |
| Sarlavha | Kerak emas | Har bir bo'lak Content-Range: bytes birinchi-oxirgi/jami bilan |
| Tipik xato | url_ownership_unverified | upload_url muddati o'tsa HTTP 403 |
| Socialift SDK | video_url=, photo_urls= | video= (bayt yoki fayl yo'li), ixtiyoriy chunk_size= |
Izohlar va cheklovlar
URL prefiksi so'zma-so'z tekshiriladi: https://example.com/videos/user/ tasdiqlansa, https://example.com/videos/user/123/a.mp4 tasdiqlangan hisoblanadi, https://example.com/videos/2023/user/123/a.mp4 esa yo'q.
Media talablari
| Media | Talab |
|---|---|
| Video formati | MP4 (tavsiya), WebM, MOV |
| Video kodeki | H.264 (tavsiya), H.265, VP8, VP9 |
| Kadr chastotasi | 23–60 FPS |
| O'lcham | Har bir tomoni 360–4096 px |
| Fayl hajmi | 4 GB gacha |
| Davomiylik | Creator info'dagi max_video_post_duration_sec gacha |
| Video sarlavhasi | 2200 UTF-16 belgigacha |
| Rasmlar | WebP yoki JPEG, 1080p gacha, har biri 20 MB gacha, bitta postda 35 tagacha |
| Rasm posti sarlavhasi / tavsifi | 90 / 4000 UTF-16 belgigacha |
Rasm posti, qoralamalar va holatni tekshirish
Rasmlar har doim tasdiqlangan URL'dan olinadi. Inbox'ga yuklash SEND_TO_USER_INBOX bilan tugaydi, shuning uchun e'lonni kutmasdan publish_status bilan tekshiring.
from socialift import TikTok
async def carousel_and_draft(token: str) -> None:
async with TikTok.from_env() as tt:
# Direct Post'dan oldin creator_info() — video misolidagi kabi
carousel = await tt.publish_photos(
token,
photo_urls=[
"https://media.example.com/tiktok/look-1.jpg",
"https://media.example.com/tiktok/look-2.jpg",
],
title="Kuzgi lookbook",
description="Yangi kolleksiyadan ikki obraz",
privacy_level="SELF_ONLY",
cover_index=0,
wait=True,
)
print(carousel["status"]["status"]) # PUBLISH_COMPLETE
draft = await tt.upload_video(token, video="renders/raw-cut.mp4")
state = await tt.publish_status(draft["publish_id"], token)
print(state["status"]) # PROCESSING_UPLOAD yoki SEND_TO_USER_INBOXpublish_photos(..., draft=True) rasmlarni MEDIA_UPLOAD rejimida ijodkor inbox'iga yuboradi; buning uchun video.upload scope'i kerak.
E'lon holatlari
| Holat | Ma'nosi |
|---|---|
PROCESSING_UPLOAD | Fayl bo'laklari yuklanmoqda (faqat FILE_UPLOAD) |
PROCESSING_DOWNLOAD | TikTok URL'dan yuklab olmoqda (faqat PULL_FROM_URL) |
SEND_TO_USER_INBOX | Upload rejimi: bildirishnoma ijodkor inbox'iga yetdi |
PUBLISH_COMPLETE | Kontent e'lon qilindi |
FAILED | Qayta ishlash to'xtadi; sabab fail_reason da, masalan file_format_check_failed, duration_check_failed, frame_rate_check_failed, video_pull_failed, spam_risk_too_many_posts |
publicaly_available_post_id (API'da aynan shunday yoziladi) faqat post ochiq bo'lib, tasdiqlangandan keyin qaytadi; shaxsiy postlarda ochiq ID bo'lmaydi.
TikTok'ga e'lon qilish: production tekshiruv ro'yxati
- Har bir Direct Post'dan oldin creator info so'rang va maxfiylik ro'yxatini
privacy_level_optionsdan quring. - Maxfiylik va interaktiv sozlamalarga standart qiymat qo'ymang; ijodkor o'chirganlarini nofaol qiling.
- Bitta user token uchun daqiqasiga 6 ta init va 30 ta holat so'rovidan oshmang.
spam_risk_too_many_postsvaspam_risk_too_many_pending_shareni qayta urinish sikli emas, pauza sifatida qabul qiling.- TikTok'ga yuboriladigan kontent ustiga logo, watermark, havola yoki reklama matni qo'shmang.
- Media URL'larini redirect'siz, tasdiqlangan HTTPS prefiksida saqlang.
- Har bir xato javobidagi
log_idni TikTok qo'llab-quvvatlashi uchun logga yozing.
Ko'p so'raladigan savollar
Auditsiz TikTok API orqali ochiq video joylash mumkinmi?
Yo'q. Audit qilinmagan klient faqat SELF_ONLY ko'rinishda e'lon qila oladi, post paytida akkaunt shaxsiy bo'lishi kerak va 24 soatda 5 tagacha foydalanuvchi ishlatishi mumkin. Ochiq e'lon qilish uchun ilova TikTok auditidan o'tishi shart.
Nega TikTok url_ownership_unverified qaytaradi?
PULL_FROM_URL rejimida media manzili TikTok developer panelidagi URL properties'da tasdiqlangan domen yoki URL prefiksiga tegishli bo'lishi kerak. Domenni tasdiqlang yoki faylni FILE_UPLOAD bilan yuklang — u tasdiqlashni talab qilmaydi.
Content Posting API orqali kuniga nechta post joylash mumkin?
Direct Post uchun har bir ijodkorga 24 soatlik cheklov bor, odatda 15 post atrofida va ijodkorga qarab farq qiladi. Chegaraga yetilganda spam_risk_too_many_posts keladi. Upload rejimida istalgan 24 soatda ko'pi bilan 5 ta kutilayotgan yuborish bo'lishi mumkin.
Har bir postdan oldin creator_info chaqirish shartmi?
Ha. TikTok qoidalari Direct Post'dan oldin ijodkorning eng so'nggi ma'lumotini olishni talab qiladi: ruxsat etilgan maxfiylik darajalari, o'chirilgan interaktiv imkoniyatlar va maksimal video davomiyligi o'zgarib turadi.
Rasmlarni fayl sifatida yuklasa bo'ladimi?
Yo'q. Rasm posti uchun manba faqat PULL_FROM_URL bo'lishi mumkin, ya'ni rasmlar tasdiqlangan domendagi HTTPS havolalardan olinadi. Bitta postda 35 tagacha rasm bo'lishi mumkin.
Videoga o'z logotipimni yoki watermark qo'shsam bo'ladimi?
Yo'q. TikTok qoidalari ilova va integratsiyalarga TikTok'ga yuborilayotgan kontent ustiga brend nomi, logo, watermark, havola yoki reklama matni qo'shishni taqiqlaydi.
Manbalar
Shu mavzudagi maqolalar
Bog'liq sahifalar
video.publish ruxsatini olish→TikTok API integratsiyasiSocialift'dagi imkoniyatlar→TikTok SDK referencepublish_video va boshqa metodlar→TikTok ilovasini sozlashURL tasdiqlash va kalitlar→Webhook integratsiyasiE'lon natijasini hodisa orqali olish→