Asosiy mazmunga o'tish
Socialift
Qo'llanma

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

Direct Post va Upload taqqoslanishi — Platformalar bo'yicha imkoniyatlar jadvali
JihatDirect PostUpload (inbox)
Scopevideo.publishvideo.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 belgilaydiIlovangiz, foydalanuvchining aniq tanlovi asosidaIjodkor, TikTok ichida
Creator info so'roviHar bir postdan oldin majburiyHujjatlashtirilgan oqimda yo'q
Hajm chekloviIjodkorga 24 soatda cheklov, odatda 15 post atrofidaIstalgan 24 soatda ko'pi bilan 5 ta kutilayotgan yuborish
Yakuniy holatPUBLISH_COMPLETESEND_TO_USER_INBOX, keyin ijodkor o'zi e'lon qiladi
Socialift SDKpublish_video, publish_photosupload_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.

  1. video.publish ruxsatini oling

    Ijodkor Login Kit orqali ilovangizga video.publish ruxsatini bergan bo'lishi kerak. Access token 24 soat yashaydi — uni yangilab turing.

  2. Creator info so'rang

    POST /v2/post/publish/creator_info/query/ ijodkor nickname va avatarini, privacy_level_options, comment_disabled, duet_disabled, stitch_disabled va max_video_post_duration_sec ni qaytaradi. spam_risk_too_many_posts yoki reached_active_user_cap xatosi kelsa, hozir e'lon qilishni taklif qilmang.

  3. 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.

  4. Postni ishga tushiring (init)

    post_info (title, privacy_level, disable_comment, disable_duet, disable_stitch, brend belgilari) va FILE_UPLOAD yoki PULL_FROM_URL manbali source_info yuboring. Javobda publish_id, fayl yuklashda esa upload_url ham keladi.

  5. Mediani uzating

    FILE_UPLOAD da bo'laklarni bir soat ichida upload_url ga PUT qilasiz. PULL_FROM_URL da TikTok faylni tasdiqlangan manzilingizdan o'zi yuklab oladi.

  6. Natijani kuzating

    publish_id bilan /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.

privacy_level qiymatlari — Platformalar bo'yicha imkoniyatlar jadvali
QiymatPostni kim ko'radi
PUBLIC_TO_EVERYONEHamma
MUTUAL_FOLLOW_FRIENDSDo'stlar — bir-biriga obuna bo'lgan akkauntlar
FOLLOWER_OF_CREATORIjodkor obunachilari
SELF_ONLYFaqat 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.

tiktok_direct_post.py
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.

PULL_FROM_URL va FILE_UPLOAD farqi — Platformalar bo'yicha imkoniyatlar jadvali
JihatPULL_FROM_URLFILE_UPLOAD
Qanday ishlaydiTikTok mediani sizning URL'ingizdan yuklab oladiBaytlarni qaytarilgan upload_url ga PUT qilasiz
Oldindan shartURL properties'da domen yoki URL prefiksi tasdiqlanganYo'q
Manzil qoidalariHTTPS, redirect'siz, IP emas domen; yuklab olish boshlangandan bir soat ichida tugaydi, shu vaqt davomida ochiq bo'lsinupload_url bir soat amal qiladi
Bo'laklashKerak emasBo'lak 5–64 MB, oxirgisi 128 MB gacha; 5 MB dan kichik fayl bir butun yuboriladi; 1000 tagacha bo'lak, ketma-ket
Bo'laklar soniKerak emastotal_chunk_count = video_size ÷ chunk_size, pastga yuvarlanadi
SarlavhaKerak emasHar bir bo'lak Content-Range: bytes birinchi-oxirgi/jami bilan
Tipik xatourl_ownership_unverifiedupload_url muddati o'tsa HTTP 403
Socialift SDKvideo_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 talablari — Platformalar bo'yicha imkoniyatlar jadvali
MediaTalab
Video formatiMP4 (tavsiya), WebM, MOV
Video kodekiH.264 (tavsiya), H.265, VP8, VP9
Kadr chastotasi23–60 FPS
O'lchamHar bir tomoni 360–4096 px
Fayl hajmi4 GB gacha
DavomiylikCreator info'dagi max_video_post_duration_sec gacha
Video sarlavhasi2200 UTF-16 belgigacha
RasmlarWebP yoki JPEG, 1080p gacha, har biri 20 MB gacha, bitta postda 35 tagacha
Rasm posti sarlavhasi / tavsifi90 / 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.

tiktok_photos_and_drafts.py
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_INBOX

publish_photos(..., draft=True) rasmlarni MEDIA_UPLOAD rejimida ijodkor inbox'iga yuboradi; buning uchun video.upload scope'i kerak.

E'lon holatlari

E'lon holatlari — Platformalar bo'yicha imkoniyatlar jadvali
HolatMa'nosi
PROCESSING_UPLOADFayl bo'laklari yuklanmoqda (faqat FILE_UPLOAD)
PROCESSING_DOWNLOADTikTok URL'dan yuklab olmoqda (faqat PULL_FROM_URL)
SEND_TO_USER_INBOXUpload rejimi: bildirishnoma ijodkor inbox'iga yetdi
PUBLISH_COMPLETEKontent e'lon qilindi
FAILEDQayta 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_options dan 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_posts va spam_risk_too_many_pending_share ni 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_id ni TikTok qo'llab-quvvatlashi uchun logga yozing.

← Blogga qaytish

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

  1. TikTok for Developers — Get started: Direct Post
  2. TikTok for Developers — Direct Post reference
  3. TikTok for Developers — Media transfer guide
  4. TikTok for Developers — Content sharing guidelines
  5. TikTok for Developers — Photo post reference
  6. TikTok for Developers — Get post status

Bog'liq sahifalar