TikTok Python SDK ma'lumotnomasi
Socialift Python SDK'dagi TikTok klienti TikTok Open API v2 (Login Kit, profil, videolar, Content Posting API) va TikTok API for Business (akkaunt metrikalari, izohlar) bilan ishlaydi. Barcha metodlar asinxron va foydalanuvchi token'ini argument sifatida oladi, shuning uchun bitta klient ko'p ijodkorga xizmat qiladi. Quyida har bir metod vazifasi bo'yicha guruhlangan, cheklovlar TikTok hujjatidan olingan.
from socialift import TikTok26 ta metodsocialift 1.3.0 bo'yichaYangilangan:
TikTok klientini qanday yaratish kerak?
developers.tiktok.com'da app yarating va uning Client key hamda Client secret qiymatlarini oling. Ularni client_key va client_secret sifatida bering yoki TikTok.from_env() ni chaqiring — u TIKTOK_CLIENT_KEY va TIKTOK_CLIENT_SECRET muhit o'zgaruvchilarini o'qiydi. Socialift litsenziya kaliti SOCIALIFT_LICENSE_KEY dan (yoki license_key= argumentidan) olinadi.
Klient token saqlamaydi: har bir metod token ni argument sifatida oladi. Access token 24 soat, refresh token 365 kun amal qiladi va TikTok yangilashda boshqa refresh token qaytarishi mumkin — bazadagi qiymatni har safar yangilang.
login_url() standart holatda DEFAULT_SCOPES dagi scope'larni so'raydi (user.info.basic, user.info.profile, user.info.stats, video.list, video.upload, video.publish); kamroq kerak bo'lsa scopes= bering. Business API metodlari (business_account, comments va boshqalar) business_id ni ham talab qiladi — uni bir marta TikTok(..., business_id=open_id) bilan yoki har chaqiruvda bering.
Klientni async with bilan ishlating — HTTP sessiya to'g'ri yopiladi. TikTok xatoni HTTP 200 javob ichida qaytarsa ham, SDK uni AuthError, PermissionError, RateLimitError kabi xatoga aylantiradi.
import asyncio
import os
import secrets
from socialift import TikTok
# SOCIALIFT_LICENSE_KEY ham o'rnatilgan bo'lishi kerak
tt = TikTok(
client_key=os.environ["TIKTOK_CLIENT_KEY"],
client_secret=os.environ["TIKTOK_CLIENT_SECRET"],
)
# Xuddi shu: tt = TikTok.from_env()
async def main():
async with tt:
state = secrets.token_urlsafe(16) # saqlang va callback'da solishtiring
url = tt.login_url(redirect_uri="https://example.com/tiktok/callback", state=state)
print(url)
# callback'da: bundle = await tt.exchange_code(code, redirect_uri=...)
# profil: me = await tt.me(bundle.access_token)
asyncio.run(main())Login va tokenlar
Login Kit orqali OAuth: avtorizatsiya manzili, code almashtirish, yangilash va bekor qilish.
exchange_codefrom_envlogin_urlrefresh_tokenrevoke
exchange_code
asyncLogin Kit callback'idan kelgan code ni access va refresh token'li TokenBundle ga almashtiradi. Redirect handler'da bir marta chaqiriladi.
await tt.exchange_code(
code: str,
*,
redirect_uri: str,
code_verifier: Optional[str] = None,
) -> socialift.models.TokenBundle- Access token 24 soat, refresh token 365 kun amal qiladi.
login_url()da ishlatilganredirect_urini aynan shu ko'rinishda bering; PKCE bilan boshlangan bo'lsacode_verifierni ham qo'shing.- So'rov TikTok token endpoint'i talab qilganidek form-urlencoded yuboriladi; javobda
access_tokenbo'lmasaApiError.
from_env
classmethodKalitlarni TIKTOK_CLIENT_KEY va TIKTOK_CLIENT_SECRET muhit o'zgaruvchilaridan o'qib klient yaratadi. Qo'shimcha argumentlar (scopes, business_id, timeout, license_key ...) konstruktorga uzatiladi.
TikTok.from_env(**kwargs) -> TikTok- O'zgaruvchi yo'q bo'lsa bo'sh satr olinadi va shu yerda xato bo'lmaydi: masalan
login_url()chaqirilgandaConfigurationErrorchiqadi.
Foydalanuvchini yo'naltirish uchun TikTok Login Kit avtorizatsiya manzilini yasaydi. Sinxron metod, tarmoqqa so'rov yubormaydi.
tt.login_url(
*,
redirect_uri: str,
state: Optional[str] = None,
scopes: Optional[list[str]] = None,
code_challenge: Optional[str] = None,
code_challenge_method: Optional[str] = None,
disable_auto_auth: bool = False,
) -> strredirect_uriapp'da ro'yxatdan o'tgan manzillardan biri bo'lishi kerak: to'liqhttps, statik (query va fragmentsiz), 512 belgigacha; bitta app'da 10 tagacha manzil.scopes=berilmasa klient scope'lari ishlatiladi (konstruktorga berilmagan bo'lsaDEFAULT_SCOPES); TikTok ularni vergul bilan kutadi, SDK o'zi birlashtiradi.- Desktop ilovalar uchun PKCE majburiy: TikTok
code_challengeni verifier'ning SHA-256 hex ko'rinishida vacode_challenge_method="S256"bilan kutadi. SDK ularni o'zi qo'shmaydi — ikkalasini bering, keyincode_verifierniexchange_code()ga uzating. client_keybo'sh bo'lsaConfigurationErrorko'tariladi.
url = tt.login_url(redirect_uri="https://siz.uz/cb", state=state)refresh_token
asyncSaqlangan refresh token bilan yangi access token oladi. Access token atigi 24 soat yashagani uchun buni jadval bo'yicha ishga tushiring.
await tt.refresh_token(refresh_token: str) -> socialift.models.TokenBundle- TikTok siz yuborgandan boshqa
refresh_tokenqaytarishi mumkin — qaytgan bundle'dagi yangi qiymatni doim saqlang. - Refresh token 365 kun amal qiladi.
bundle = await tt.refresh_token(refresh_token)revoke
asyncAccess token'ni bekor qiladi va app foydalanuvchi akkauntiga kirish huquqini yo'qotadi. Foydalanuvchi "uzish" tugmasini bosganda ishlatiladi.
await tt.revoke(token: str) -> bool- TikTok so'rovni qabul qilsa
Trueqaytaradi; o'z bazangizdagi token'larni ham o'chiring.
await tt.revoke(token)Profil va videolar
Ijodkor profili va uning o'z videolari (Open API v2).
iter_videos
asyncvideos() orqali sahifalarni kezib, max_items tagacha videoni bitta ro'yxatga yig'adi. Ijodkor videolarini bazangizga sinxronlash uchun qulay.
await tt.iter_videos(
token: str,
*,
max_items: int = 100,
fields: Optional[str] = None,
) -> list[dict]max_items(standart 100) — himoya chegarasi: katta akkauntda videolar minglab bo'ladi va cheksiz sikl rate limit'ga uriladi.- Har bir sahifa — ko'pi bilan 20 videoli alohida so'rov.
Kerakli ruxsatlar:video.list
page = await tt.videos(token, limit=20)
all_videos = await tt.iter_videos(token, max_items=100)me
asyncIjodkor profilini Profile sifatida qaytaradi: id (open_id), ism, avatar, bio, obunachi, obuna va videolar soni. Login'dan keyin kim ulanganini ko'rsatish uchun qulay.
await tt.me(token: str, *, fields: Optional[str] = None) -> socialift.models.Profile- Scope'lar:
open_id, avatar vadisplay_name—user.info.basic;bio_description,profile_deep_link,is_verified—user.info.profile;follower_count,following_count,likes_count,video_count—user.info.stats. - Standart holatda shu maydonlarning hammasi so'raladi; faqat ruxsat berilgan scope'lar maydonlari kerak bo'lsa
fieldsga qisqaroq satr bering. Profile.usernamevafull_nameikkalasida hamdisplay_nameturadi; TikTok'ning xom obyektirawda.
Kerakli ruxsatlar:user.info.basicuser.info.profileuser.info.stats
me = await tt.me(token)video
asyncAniq ID'lar bo'yicha videolar ma'lumotini oladi — masalan, allaqachon ma'lum videolarning hisoblagichlari yoki muddati o'tadigan muqova havolalarini yangilash uchun.
await tt.video(
video_ids: Iterable[str],
token: str,
*,
fields: Optional[str] = None,
) -> list[dict]- TikTok bir so'rovda 20 tagacha ID qabul qiladi; SDK faqat birinchi 20 tasini jimgina oladi.
- Natija tartibi siz bergan ID'lar tartibiga mos kelishiga tayanmang —
idbo'yicha moslang. video.listscope kerak.
Kerakli ruxsatlar:video.list
videos = await tt.video(["7300000000000000000"], token)videos
asyncIjodkorning o'z videolaridan bitta sahifani {"data", "cursor", "has_more"} ko'rinishida qaytaradi. Interfeysda sahifalab ko'rsatish uchun.
await tt.videos(
token: str,
*,
limit: int = 20,
cursor: Optional[int] = None,
fields: Optional[str] = None,
) -> dict- TikTok bir so'rovda ko'pi bilan 20 ta video beradi;
limit1–20 oralig'iga keltiriladi. cursor— millisekunddagi UTC Unix vaqti: eskiroq videolar uchun oldingi sahifadagicursorni uzating.video.listscope kerak.
Kerakli ruxsatlar:video.list
page = await tt.videos(token, limit=20)
all_videos = await tt.iter_videos(token, max_items=100)E'lon qilish
Content Posting API: to'g'ridan-to'g'ri post, inbox qoralamasi, rasm posti va holatni kuzatish.
creator_infopublish_photospublish_statuspublish_videoupload_videowait_publish
creator_info
asyncIjodkorning joriy e'lon sozlamalarini qaytaradi: ruxsat etilgan privacy_level_options, max_video_post_duration_sec, izoh, duet va stitch o'chirilganmi. Har post oldidan chaqiring va post formasini shu javob asosida quring.
await tt.creator_info(token: str) -> dict- TikTok'ning Direct Post oqimi post boshlashdan oldin creator info so'ralishini kutadi.
- Yuboriladigan
privacy_levelprivacy_level_optionsro'yxatidan biri bo'lishi kerak. - Javobda kunlik kvota maydoni yo'q; ijodkor API orqali kunlik post chegarasiga yetsa TikTok
spam_risk_too_many_postsqaytaradi, SDK uniRateLimitErrorqiladi. video.publishscope kerak.
Kerakli ruxsatlar:video.publish
info = await tt.creator_info(token)
print(info["privacy_level_options"])publish_photos
asyncRasm havolalaridan foto (karusel) post yaratadi — to'g'ridan-to'g'ri joylaydi yoki draft=True bilan ijodkor inbox'iga qoralama qilib yuboradi.
await tt.publish_photos(
token: str,
*,
photo_urls: list[str],
title: Optional[str] = None,
description: Optional[str] = None,
privacy_level: str = 'SELF_ONLY',
cover_index: int = 0,
disable_comment: bool = False,
auto_add_music: bool = True,
draft: bool = False,
wait: bool = False,
brand_content: bool = False,
brand_organic: bool = False,
) -> dict- 35 tagacha rasm, JPEG yoki WebP, har biri 20 MB gacha; faqat tasdiqlangan domendagi havolalar (PULL_FROM_URL) qabul qilinadi.
title90,description4000 UTF-16 belgigacha;cover_indexnoldan sanaladi.- To'g'ridan-to'g'ri post uchun
video.publish,draft=True(MEDIA_UPLOAD) uchunvideo.uploadscope kerak.auto_add_musicfaqat to'g'ridan-to'g'ri postda ishlaydi. draft=Truebilanwait=Trueishlatmang: holat ijodkor joylagunchaSEND_TO_USER_INBOXbo'lib qoladi.
Kerakli ruxsatlar:video.publish
result = await tt.publish_photos(token, photo_urls=["https://cdn.siz.uz/1.jpg"], title="Karusel")publish_status
asyncpublish_id bo'yicha postning joriy qayta ishlash holatini qaytaradi. O'zingiz so'rab turing yoki wait_publish() dan foydalaning.
await tt.publish_status(publish_id: str, token: str) -> dictstatusqiymatlari:PROCESSING_UPLOAD(fayl yuklash),PROCESSING_DOWNLOAD(URL'dan olish),SEND_TO_USER_INBOX(qoralamalar),PUBLISH_COMPLETE,FAILED(sababfail_reasonda).- Har access token uchun daqiqasiga 30 ta so'rov.
publicaly_available_post_id(TikTok yozuvi shunday) faqat post ommaviy bo'lib, moderatsiyadan o'tgach keladi.
status = await tt.publish_status(publish_id, token)publish_video
asyncVideoni ochiq havoladan yoki baytlar/fayl yo'lidan to'g'ridan-to'g'ri ijodkor profiliga joylaydi (Direct Post). {"publish_id"} qaytaradi, wait=True bo'lsa yakuniy status ham qo'shiladi.
await tt.publish_video(
token: str,
*,
video_url: Optional[str] = None,
video: Union[bytes, str, os.PathLike, NoneType] = None,
title: Optional[str] = None,
privacy_level: str = 'SELF_ONLY',
disable_comment: bool = False,
disable_duet: bool = False,
disable_stitch: bool = False,
cover_timestamp_ms: Optional[int] = None,
brand_content: bool = False,
brand_organic: bool = False,
chunk_size: Optional[int] = None,
wait: bool = False,
) -> dict- App TikTok audit'idan o'tmaguncha u joylagan hamma narsa maxfiy ko'rinish bilan cheklanadi — shu sababli
privacy_levelstandartiSELF_ONLY. video_url(PULL_FROM_URL) uchun domen yoki URL prefiksi tasdiqlangan, manzilhttpsva redirect'siz bo'lishi kerak, aks holdaurl_ownership_unverified(PermissionError). TikTok yuklab olishni bir soatdan keyin to'xtatadi.video=berilsa SDK faylni bo'laklab yuklaydi: 5 MB gacha — bir bo'lak, kattasi 5–64 MB li bo'laklar (chunk_size).- Post boshlash so'rovi har access token uchun daqiqasiga 6 ta bilan cheklangan.
video.publishscope kerak.
Kerakli ruxsatlar:video.publishvideo.upload
result = await tt.publish_video(token, video_url="https://cdn.siz.uz/reel.mp4", title="Salom TikTok!",
privacy_level="SELF_ONLY", wait=True)with open("reel.mp4", "rb") as f:
result = await tt.publish_video(token, video=f.read(), title="Salom!")upload_video
asyncVideoni e'lon qilmasdan ijodkorning TikTok inbox'iga qoralama sifatida yuboradi; ijodkor ilovada tahrirlab, o'zi joylaydi. Tavsif va maxfiylikni ijodkor tanlashi kerak bo'lganda ishlating.
await tt.upload_video(
token: str,
*,
video_url: Optional[str] = None,
video: Union[bytes, str, os.PathLike, NoneType] = None,
chunk_size: Optional[int] = None,
wait: bool = False,
) -> dictvideo.uploadscope kerak; bu yerda tavsif yoki maxfiylik parametri yo'q.- TikTok istalgan 24 soat ichida ko'pi bilan 5 ta kutilayotgan ulashishga ruxsat beradi.
- Holat
SEND_TO_USER_INBOXda to'xtaydi va faqat ijodkor joylagachPUBLISH_COMPLETEbo'ladi.wait=TrueaynanPUBLISH_COMPLETEni kutadi, shuning uchun ijodkor ~2 daqiqada joylamasaApiErrorbilan tugaydi. - Manba qoidalari
publish_video()bilan bir xil:video_urluchun tasdiqlangan domen,video=bo'laklab yuklanadi.
wait_publish
asyncPost PUBLISH_COMPLETE holatiga yetguncha publish_status() ni so'rab turadi va o'sha holatni qaytaradi. publish_video(wait=True) ichida aynan shu ishlatiladi.
await tt.wait_publish(
publish_id: str,
token: str,
*,
attempts: int = 40,
delay: float = 3.0,
) -> dict- Standart: 40 urinish × 3 soniya, taxminan 2 daqiqa;
attemptsvadelaybilan o'zgartiriladi. FAILEDbo'lsafail_reasonbilanApiError; urinishlar tugasa hamApiError.SEND_TO_USER_INBOXni yakun deb hisoblamaydi — inbox qoralamalari uchun ishlatmang.
Business akkaunt va izohlar
TikTok API for Business: akkaunt metrikalari va izohlarni boshqarish. business_id kerak.
business_accountbusiness_videoscommentsdelete_commenthide_commentlike_commentpin_commentreply_comment
business_account
asyncTikTok API for Business orqali business akkaunt profili va kunlik kesimdagi metrikalarini qaytaradi. Akkaunt darajasidagi analitika paneli uchun.
await tt.business_account(
token: str,
*,
business_id: Optional[str] = None,
fields: Optional[list[str]] = None,
) -> dict- So'rov
business-api.tiktok.comgaAccess-Tokensarlavhasi bilan ketadi — bume()ishlatadigan Open API'dan alohida API oilasi; app'ingizda TikTok API for Business'ga kirish bo'lishi kerak. business_idkerak (odatda ijodkorningopen_idsi): argument sifatida yoki klientdabusiness_id=bilan bering, aks holdaConfigurationError.fields— Python ro'yxati; SDK uni JSON massiv satri qilib yuboradi.
account = await tt.business_account(token)business_videos
asyncTikTok API for Business orqali business akkaunt videolarini har biri bo'yicha ko'rsatkichlar bilan, sahifama-sahifa qaytaradi.
await tt.business_videos(
token: str,
*,
business_id: Optional[str] = None,
cursor: Optional[int] = None,
max_count: int = 20,
fields: Optional[list[str]] = None,
) -> dict- Keyingi sahifa uchun oldingi javobdagi
cursorni bering;max_countstandarti 20. business_id(argument yoki klient standarti) va TikTok API for Business'ga kirish kerak.
stats = await tt.business_videos(token, max_count=20)delete_comment
asyncTikTok API for Business orqali izohni o'chiradi. Izohni o'chirmasdan ko'rinishdan olib tashlash kerak bo'lsa hide_comment() ni ishlating.
await tt.delete_comment(
comment_id: str,
token: str,
*,
business_id: Optional[str] = None,
) -> dictbusiness_idva TikTok API for Business'ga kirish kerak.
await tt.delete_comment(comment_id, token)hide_comment
asyncBusiness akkaunt videosidagi izohni yashiradi yoki hidden=False bilan qayta ko'rsatadi — qaytariladigan moderatsiya usuli.
await tt.hide_comment(
comment_id: str,
token: str,
*,
hidden: bool = True,
business_id: Optional[str] = None,
) -> dictactionsifatidaHIDEyokiUNHIDEyuboriladi;business_idkerak.
await tt.hide_comment(comment_id, token, hidden=True)like_comment
asyncBusiness akkaunt nomidan izohga layk bosadi yoki liked=False bilan laykni olib tashlaydi.
await tt.like_comment(
comment_id: str,
token: str,
*,
liked: bool = True,
business_id: Optional[str] = None,
) -> dictactionsifatidaLIKEyokiUNLIKEyuboriladi;business_idkerak.
await tt.like_comment(comment_id, token, liked=True)pin_comment
asyncIzohni video tepasiga qadaydi yoki pinned=False bilan qadashni olib tashlaydi.
await tt.pin_comment(
comment_id: str,
token: str,
*,
pinned: bool = True,
business_id: Optional[str] = None,
) -> dictbusiness/comment/top/gaactionsifatidaTOPyokiUNTOPyuboriladi;business_idkerak.
await tt.pin_comment(comment_id, token, pinned=True)reply_comment
asyncBusiness akkaunt nomidan uning videosidagi izohga javob yozadi.
await tt.reply_comment(
comment_id: str,
token: str,
text: str,
*,
video_id: Optional[str] = None,
business_id: Optional[str] = None,
) -> dict- Argumentlar tartibi:
comment_id, token, text;video_idSDK'da ixtiyoriy, lekin ma'lum bo'lsa bering. business_idva TikTok API for Business'ga kirish kerak.
await tt.reply_comment(comment_id, token, "Rahmat!", video_id=video_id)Past darajadagi chaqiruvlar
SDK o'ramagan endpoint'larga to'g'ridan-to'g'ri murojaat.
business
asyncTikTok API for Business'ning istalgan endpoint'ini Access-Token sarlavhasi bilan chaqiradi. SDK o'ramagan Business API imkoniyatlari uchun.
await tt.business(
path: str,
token: str,
*,
method: str = 'POST',
json: Optional[dict] = None,
params: Optional[dict] = None,
) -> dictpathhttps://business-api.tiktok.com/open_api/v1.3/ga nisbatan; oxirgi/avtomatik qo'shiladi.- Standart metod
POST; javob tanasidagicodenoldan farq qilsa xato ko'tariladi. business_idavtomatik qo'shilmaydi — uniparamsyokijsonga o'zingiz qo'ying.
data = await tt.business("business/get/", token, method="GET", params={"business_id": open_id})call
asyncSDK'da o'rami hali yo'q istalgan Open API v2 endpoint'ini Authorization: Bearer sarlavhasi va TikTok xato tekshiruvi bilan chaqiradi. Xom JSON javobni qaytaradi.
await tt.call(
path: str,
token: str,
*,
method: str = 'POST',
json: Optional[dict] = None,
params: Optional[dict] = None,
) -> dictpathhttps://open.tiktokapis.com/v2/ga nisbatan beriladi; TikTok talab qiladigan oxirgi/avtomatik qo'shiladi.- Standart metod
POST;fieldskabi query parametrlarparamsda, so'rov tanasijsonda. - Argumentlar tartibi
path, token(Ads.callda esa token birinchi).
request
asyncEng past darajadagi HTTP chaqiruv: to'liq URL'ga qayta urinishlar bilan so'rov yuboradi va TikTok HTTP 200 ichida qaytargan xatoni ham ko'taradi. Odatda avtorizatsiya sarlavhasini o'zi qo'shadigan call() yoki business() afzal.
await tt.request(method: str, url: str, **kwargs) -> Any- Avtorizatsiya sarlavhasi qo'shilmaydi —
headersni o'zingiz bering. error.code"ok"dan farq qilsa (Open API) yokicodenoldan farq qilsa (Business API)ApiErrorvorisi ko'tariladi.- Qayta urinishlar
RetryPolicybo'yicha (429 va 5xx javoblar).
Barcha klientlarda umumiy metodlar
Har bir HTTP klient (Telegram, Facebook, Instagram, LinkedIn, TikTok, Ads) shu past darajadagi metodlarga ega: SDK'da hali o'rab olinmagan endpoint'ni chaqirish yoki sahifalab o'qish uchun. async with bloki tugaganda ulanish o'zi yopiladi.
request
asyncIstalgan HTTP so'rovni yuboradi va JSON javobni qaytaradi — SDK'da hali alohida metodi yo'q endpoint uchun. Token va imzo parametrlarini (access_token, Meta uchun appsecret_proof — socialift.crypto.appsecret_proof) o'zingiz params yoki headers ga qo'shasiz.
await tt.request(
method: str,
url: str,
*,
params: Optional[Mapping[str, Any]] = None,
data: Optional[Any] = None,
json: Optional[Any] = None,
headers: Optional[Mapping[str, str]] = None,
) -> AnyparamsdagiNoneqiymatlar yuborilmaydi.- Limit (
RateLimitError) va vaqtinchalik server xatolarida (HTTP 429, 500, 502, 503, 504)RetryPolicybo'yicha qayta uriniladi;Retry-Aftersarlavhasi bo'lsa, shuncha kutiladi. Tarmoq uzilishiTransportErrorbo'lib chiqadi.
get
asyncrequest("GET", ...) ning qisqa shakli.
await tt.get(url: str, **kw) -> Anypost
asyncrequest("POST", ...) ning qisqa shakli.
await tt.post(url: str, **kw) -> Anydelete
asyncrequest("DELETE", ...) ning qisqa shakli.
await tt.delete(url: str, **kw) -> Anypaginate
asyncMeta'ning kursorli sahifalashi (paging.next) bo'yicha yurib, barcha data elementlarini bitta ro'yxatga yig'ib qaytaradi.
await tt.paginate(
url: str,
*,
params: Optional[Mapping[str, Any]] = None,
max_items: int = 500,
page_size: int = 100,
) -> list[dict]max_items(standart 500) — himoya chegarasi: yirik akkauntda ro'yxat o'n minglab yozuv bo'lishi mumkin.page_size— bitta so'rovdagilimit.
close
asyncSDK o'zi yaratgan HTTP sessiyasini yopadi (tashqaridan berilgan sessiyaga tegmaydi). async with Client(...) ishlatilsa, o'zi chaqiriladi.
await tt.close() -> NoneKo'p so'raladigan savollar
TikTok access token qancha amal qiladi?
Access token 24 soat, refresh token 365 kun amal qiladi. Token'ni kamida kuniga bir marta refresh_token() bilan yangilang. TikTok yangilashda boshqa refresh token qaytarishi mumkin — qaytgan qiymatni saqlang va keyingi safar aynan o'shani ishlating.
Nega API orqali TikTok'ga joylangan video faqat menga ko'rinadi?
TikTok audit'idan o'tmagan app joylagan barcha kontent maxfiy ko'rinish rejimi bilan cheklanadi. Shu sababli SDK'da privacy_level ning standart qiymati SELF_ONLY. Audit'dan keyin qiymatni creator_info() qaytargan privacy_level_options ro'yxatidan tanlang.
TikTok'ga videoni URL o'rniga fayldan yuklash mumkinmi?
Ha: publish_video(token, video=...) ga baytlar yoki fayl yo'lini bering. SDK FILE_UPLOAD usulini ishlatadi va 5 MB dan katta faylni 5–64 MB li bo'laklarga bo'lib yuklaydi. video_url (PULL_FROM_URL) uchun esa domen yoki URL prefiksi TikTok'da tasdiqlangan, manzil https va redirect'siz bo'lishi kerak.
publish_video va upload_video ning farqi nima?
publish_video videoni to'g'ridan-to'g'ri profilga joylaydi (Direct Post, video.publish scope). upload_video esa videoni ijodkorning TikTok inbox'iga qoralama sifatida yuboradi (video.upload scope): ijodkor ilovada tahrirlab, o'zi e'lon qiladi. TikTok 24 soat ichida ko'pi bilan 5 ta kutilayotgan ulashishga ruxsat beradi.
TikTok izohlarini API orqali o'qib, javob yozsa bo'ladimi?
Ha, SDK'da buning uchun comments, reply_comment, hide_comment va boshqa metodlar bor. Ular TikTok API for Business (business-api.tiktok.com) orqali Access-Token sarlavhasi bilan ishlaydi. Buning uchun business_id (odatda ijodkorning open_id si) va app'ingizda shu API'ga kirish huquqi kerak.
comments
asyncBusiness akkauntning bitta videosidagi izohlarni qaytaradi;
include_replies=Truebirinchi darajali izohlarga javoblarni ham qo'shadi.dataobyekti qaytadi; keyingi sahifacursorbilan,max_countstandarti 30.business_idva TikTok API for Business'ga kirish kerak.