jsonscraper
Trhy

Jak hodnotit tematickou konzistenci tvůrce na TikToku podle veřejných příspěvků

Praktický Python pipeline pro sběr feedu tvůrce, porovnávání témat a uvážlivé využití AI

Redakční zásady Nahlásit chybu

Tvůrce může podle profilu a několika povedených videí vypadat jako vhodná volba pro kampaň, ale důležitější obraz nabízí jeho aktuální feed: věnuje se požadovanému tématu pravidelně? Ruční kontrola rychle zastarává a jednorázové procházení snadno sklouzne k výběru nejvýraznějších příspěvků. Agentura nebo značka proto lépe využije opakovatelný vzorek veřejných videí, uloží stav k datu kontroly a bude tematickou relevanci hodnotit podle stejných pravidel.

Článek: Jak hodnotit tematickou konzistenci tvůrce na TikToku podle veřejných příspěvků
Shrnutí: Ukážeme, jak může značka nebo agentura posoudit, zda tvůrce na TikToku pravidelně publikuje obsah k požadovanému tématu: načíst feed přes API, ukládat snímky, počítat transparentní ukazatele a předávat popisy videí k tematické klasifikaci.
Role obrázku: titulní ilustrace – hlavní myšlenka
Sekce: 
Vizuální motiv: Vytištěná analytická zpráva s kartami videí tvůrce na TikToku znázorněnými neutrálními ikonami,
© jsonscraper · ilustrace vytvořená pomocí AI

Níže najdete praktický postup pro hodnocení veřejného feedu tvůrce na TikToku. Využívá TikTok Scraper API od jsonscraper a Python: získá příspěvky přes dokumentovanou cestu, uloží původní JSON, převede ověřená pole do tabulky a vypočítá podíl videí odpovídajících zadanému tématu. Popisy lze případně předat textovému klasifikátoru jako další, samostatně kontrolovaný krok.

Nejprve určete, co znamená „relevantní“

Představme si, že tým vybírá tvůrce pro kampaň o domácí přípravě kávy. Počet sledujících a popularita jednotlivých videí mohou pomoci popsat dosah, samy o sobě ale neodpoví na otázku, nakolik feed souvisí s kávou. Pro první filtr jsou potřeba obsahové signály: zmiňuje popis videa přípravu kávy, vybavení, recepty nebo recenze; kolik příspěvků na toto téma spadá do zvoleného období; jaký podíl tematických videí tvoří mezi těmi, která se podařilo získat?

Před sběrem dat si zapište kritéria do krátkého slovníku, například „espresso“, „mlýnek na kávu“, „latte“ a „příprava kávy“. Doplňte výjimky a nejednoznačné výrazy. „Káva“ se může objevit ve vtipu, reklamním sdělení nebo náhodné souvislosti, takže automatická textová shoda je jen předběžné označení, nikoli konečné hodnocení tvůrce. Rozlišujte alespoň tři stavy: jasná shoda, možná shoda a nerelevantní video.

Vzorek je také třeba definovat předem. Při každém týdenním spuštění lze například analyzovat posledních 20 získaných příspěvků. Jde o podmínku vašeho monitorování, nikoli o příslib, že API vrátí přesně takový počet: dostupnost a složení výsledků určuje odpověď na konkrétní požadavek. Zaznamenávejte čas sběru, počet získaných položek a parametry požadavku, aby bylo možné porovnávat snímky bez směšování různých pravidel.

Požadavek na feed tvůrce

V dokumentaci jsonscraperu přijímá cesta GET /getUserFeed povinný parametr query — uživatelské jméno nebo URL profilu. Mezi volitelné parametry patří count, region, sort_type, with_pinned_posts a max_cursor. Klíč API se předává jako license_key v query stringu; uchovávejte jej v proměnné prostředí, nikoli ve zdrojovém kódu. Podrobnosti o cestách a parametrech uvádí oficiální dokumentace TikTok API.

V odpovědi nejprve zkontrolujte vnější status a teprve potom pracujte s objektem tiktok. Seznam příspěvků uživatele se nachází v tiktok.aweme_list. Pozorované schéma obsahuje identifikátor videa, text popisu, čas zveřejnění, autora, URL a objekt statistik. Jednotlivá pole mohou chybět, takže zpracování má zachovat prázdné hodnoty jako prázdné, nikoli je nahrazovat vymyšlenými čísly.

Následující minimální příklad je určen pro Python 3.8+ a knihovnu requests. Uložte klíč do JSONSCRAPER_TIKTOK_LICENSE_KEY. Kód provede jeden požadavek, zkontroluje HTTP odpověď i vnější stav API, uloží původní JSON a vypíše normalizované řádky.

import json
import os
from datetime import datetime, timezone
from pathlib import Path

import requests

API_KEY = os.environ["JSONSCRAPER_TIKTOK_LICENSE_KEY"]
PROFILE = "creator_username"

params = {
    "license_key": API_KEY,
    "query": PROFILE,
    "count": 20,
    "region": "US",
    "sort_type": 0,
    "with_pinned_posts": 0,
}

response = requests.get(
    "https://tiktok.evelode.com/getUserFeed",
    params=params,
    timeout=30,
)
response.raise_for_status()
payload = response.json()

if payload.get("status") != "ok":
    raise RuntimeError("TikTok API returned a non-ok status")

tiktok = payload.get("tiktok") or {}
items = tiktok.get("aweme_list") or []

stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
Path("snapshots").mkdir(exist_ok=True)
Path(f"snapshots/{PROFILE}_{stamp}.json").write_text(
    json.dumps(payload, ensure_ascii=False, indent=2),
    encoding="utf-8",
)

rows = []
for item in items:
    stats = item.get("statistics") or {}
    author = item.get("author") or {}
    rows.append({
        "aweme_id": item.get("aweme_id"),
        "created_at": item.get("create_time"),
        "description": item.get("desc") or "",
        "share_url": item.get("share_url"),
        "creator": author.get("unique_id") or author.get("nickname"),
        "play_count": stats.get("play_count"),
        "digg_count": stats.get("digg_count"),
        "comment_count": stats.get("comment_count"),
        "share_count": stats.get("share_count"),
    })

print(json.dumps(rows, ensure_ascii=False, indent=2))

Parametr sort_type je pro tuto cestu popsán takto: 0 znamená nejnovější feed a 1 populární feed. Příklad volí nejnovější příspěvky a připnutá videa vylučuje pomocí with_pinned_posts=0, aby se do vzorku nových příspěvků nedostal starší připnutý příspěvek. Pokud potřebujete jiný režim, uložte parametr do metadat snímku a používejte jej při každém spuštění stejně.

Zpracování odpovědi: od JSON k reprodukovatelné tabulce

Před transformací je užitečné uložit původní odpověď. Lze tak ověřit normalizaci, zjistit, proč je některá řádka prázdná, a upravit zpracování, pokud se v odpovědích změní dostupnost volitelných polí. V pracovním úložišti uchovávejte vedle JSON také čas sběru v UTC, požadovaný profil, parametry a verzi skriptu. Klíč API do archivu ani logu neukládejte.

Při opakovaných spuštěních použijte aweme_id jako identifikátor příspěvku, pokud je toto pole k dispozici. Deduplikace podle tohoto ID zabrání započítání jednoho videa jako několika příspěvků, když je získáte opakovaně. Zároveň uchovávejte samostatné snímky statistik: hodnoty zhlédnutí a reakcí odpovídají okamžiku pozorování, nikoli neměnným vlastnostem videa. Pokud pole statistiky chybí, ponechte je prázdné a příslušný záznam vynechte z výpočtu dané metriky.

Čas zveřejnění je ve schématu označen jako create_time. V analytické tabulce jej převeďte na datum a uložte původní hodnotu i normalizovaný čas UTC. Než začnete počítat, ověřte několik skutečných záznamů z obdržené odpovědi a zkontrolujte očekávaný typ a jednotky. Je to zvlášť důležité při tvorbě časových grafů: chybný převod času přesune příspěvky mezi dny a zkreslí týdenní srovnání.

Jednoduchý tematický klasifikátor lze vytvořit i bez modelu: normalizovat text, hledat zadané klíčové fráze a označit shody. Pro užitečnější klasifikaci připravte sadu ručně ověřených popisů a pravidla pro hraniční případy. Poté porovnejte jednoduchý slovníkový filtr s lidským hodnocením: zjistěte, které výrazy způsobují falešné shody, a slovník upravte. Vznikne tak srozumitelný základ, s nímž lze hodnotit následné využití AI.

import re

KEYWORDS = (
    "káva", "espresso", "mlýnek na kávu", "latte", "příprava kávy",
)


def normalize(text):
    text = (text or "").casefold()
    return re.sub(r"\s+", " ", text).strip()


def classify(description):
    text = normalize(description)
    matches = [word for word in KEYWORDS if word in text]
    return {
        "topic_match": bool(matches),
        "matched_terms": matches,
    }

for row in rows:
    row.update(classify(row["description"]))

Klíčové slovo v popisu může být užitečným signálem, ale klasifikátor by měl vracet vysvětlitelný důvod: seznam shodných výrazů, nikoli pouze štítek „ano/ne“. U jazykových modelů použijte strukturovaný prompt: předejte popis videa a pevně dané kategorie a požádejte o kategorii, stručné zdůvodnění a míru jistoty. Původní text a odpověď modelu ukládejte odděleně. Rozhodnutí ovlivňující rozpočet nebo výběr partnera ověřte u člověka podle odkazů na příspěvky.

Počítejte ukazatele s jasně určeným základem

Pro jednoduchý přehled se hodí podíl tematických videí a četnost publikování. Podíl získáte tak, že počet videí s potvrzenou tematickou relevancí vydělíte počtem videí, která se podařilo klasifikovat. Vždy uvádějte obě čísla, například „7 z 18 ověřených popisů“. Výsledek je tak srozumitelný a lze si všimnout, když procento vychází z příliš malého vzorku.

Četnost publikování lze vyjádřit počtem získaných videí za pevně stanovené období, například za posledních 30 dní. Hranice období určete podle času sběru a dat zveřejnění. Při týdenních snímcích uchovávejte výsledek každého spuštění, nikoli jen průběžně aktualizovaný souhrnný řádek: změny témat a aktivity pak zůstanou viditelné. Počet získaných položek nepovažujte za úplný archiv příspěvků autora — analyzujte skutečně získaný vzorek a pravidlo výběru výslovně uveďte.

Statistiky zhlédnutí, lajků, komentářů a sdílení se hodí jako kontext pro každé video. Absolutní hodnoty porovnávejte opatrně: starší příspěvek měl více času nasbírat reakce. Pro srovnání v rámci jednoho autora zaznamenávejte čas každého sběru a sledujte vývoj stejného videa mezi snímky. Rozdíl mezi dvěma snímky nenazývejte „rychlostí růstu“, pokud nejsou zaznamenané interval i dostupnost měření.

Užitečný souhrnný záznam pro každý profil zahrnuje datum sběru, zvolené parametry, počet získaných příspěvků, počet klasifikovaných popisů, počet tematických shod, seznam ukázkových URL a stručnou poznámku k nejednoznačným případům. Díky takové tabulce může kolega závěr ověřit a další analytik zopakovat postup u následujícího profilu.

Stránkování a plánování

Pokud vzorek vyžaduje další stránku, dokumentace pro feed profilu používá max_cursor získaný z předchozí odpovědi. Předávejte jej beze změny: kurzor je neprůhledná hodnota, kterou je třeba uložit a vrátit API. Pokud chcete načíst pokračování, zkontrolujte v odpovědi také has_more. Omezte počet stránek nebo celkový rozpočet požadavků, aby sběr končil předvídatelně.

cursor = None
all_items = []
max_pages = 3

for _ in range(max_pages):
    page_params = dict(params)
    if cursor is not None:
        page_params["max_cursor"] = cursor

    page_response = requests.get(
        "https://tiktok.evelode.com/getUserFeed",
        params=page_params,
        timeout=30,
    )
    page_response.raise_for_status()
    page_payload = page_response.json()

    if page_payload.get("status") != "ok":
        raise RuntimeError("TikTok API returned a non-ok status")

    page = page_payload.get("tiktok") or {}
    all_items.extend(page.get("aweme_list") or [])

    if not page.get("has_more"):
        break

    cursor = page.get("max_cursor")
    if cursor is None:
        break

Četnost spouštění přizpůsobte úkolu: pro první posouzení stačí ruční spuštění; u seznamu tvůrců může týdenní plán pomoci odhalovat změny bez nepřetržitého dotazování. Spuštění lze zařadit do cronu, úlohy CI nebo orchestrátoru. Postup je jednoduchý: načíst profily z tabulky, provést požadavky s omezeným paralelismem, uložit snímky, zkontrolovat podíl úspěšných odpovědí a odeslat souhrn do pracovní tabulky. Po dočasné chybě požadavek zopakujte s omezeným počtem pokusů a prodlevou. Chyby autorizovaných požadavků ukládejte zvlášť, aby bylo možné zkontrolovat klíč a konfiguraci.

Kde se hodí AI a kde je nutná kontrola

AI je užitečná při klasifikaci popisů obsahujících slang, více jazyků nebo formulace bez přesné klíčové fráze. Nejprve stanovte uzavřený seznam kategorií a požádejte model, aby vycházel pouze z textu popisu. Poté ověřte kvalitu na malém ručně označeném vzorku: porovnejte kategorie modelu s rozhodnutími editora a zvlášť projděte chyby i nejednoznačné případy. Do přehledu je lepší zahrnout podíl shody modelu s ručním hodnocením a počet prověřených příkladů než neinterpretovatelné celkové skóre.

Nezadávejte modelu úkol „vyber nejlepšího tvůrce“ bez stanovených kritérií. Místo toho rozdělte proces na měřitelné znaky: tematický podíl, pravidelnost, příklady relevantních videí a rozsah veřejných reakcí. Model může tato pole stručně shrnout a uvést odkazy na podklady; konečné rozhodnutí zůstává na týmu, který zohlední formát kampaně, publikum a dohodu s tvůrcem.

Pokud se analýza týká reklamních spoluprací, samostatně ověřte podle příspěvků samotných a příslušných požadavků, zda autor vztah ke značce zveřejnil. Pokyny americké Federální obchodní komise vysvětlují, že spojení se značkou má být zřetelně uvedeno u doporučení; životopis profilu nebo skrytá část textu přitom nemusejí publiku poskytnout dostatečně zřetelné upozornění. Viz doporučení FTC pro tvůrce na sociálních sítích. Monitorování veřejných dat pomáhá shromáždit podklady ke kontrole, posouzení souladu s pravidly však vyžaduje kontext konkrétního příspěvku a kampaně.

Co získáte

Po nastavení pipeline získá tým datované snímky veřejného feedu, tabulku příspěvků s popisy a dostupnými metrikami i opakovatelný výpočet tematického podílu. Díky nim lze rychleji vybírat profily k dalšímu prověření, všímat si změn témat a dokumentovat důvody hodnocení. Metoda zůstává ověřitelná: původní JSON, parametry požadavku, pravidla klasifikace a odkazy na videa umožňují sledovat cestu od dat k závěru.

Pro první test spusťte skript na jednom profilu, uložte nezpracovanou odpověď a ručně ověřte několik klasifikací. Poté stanovte slovník témat, pravidla výběru vzorku a formát přehledu. Až bude výsledek reprodukovatelný, přidejte plánované spouštění a frontu profilů. Popis cest a parametrů najdete v dokumentaci API; přehled produktu a dostupných možností integrace pak na stránce TikTok Scraper API.

Praktický kontrolní seznam před spuštěním

  • Zapište téma kampaně, slovník zahrnutých výrazů a příklady hraničních případů.
  • Stanovte období vzorku, hodnotu count, řazení a nastavení připnutých příspěvků.
  • Původní JSON, datum sběru a parametry uchovávejte odděleně od tajného klíče.
  • Pokud je identifikátor k dispozici, použijte aweme_id k deduplikaci.
  • Rozlišujte chybějící hodnotu od nuly a neprůměrujte metriky bez jasného důvodu.
  • Vedle tematického podílu uvádějte velikost vzorku a přikládejte ukázkové odkazy.
  • Před použitím při rozhodování o kampani ověřte klasifikaci AI na ručně zkontrolovaném vzorku.
  • Hodnocení aktualizujte podle plánu a porovnávejte snímky pořízené podle stejných pravidel.

Lidé

Pro tento článek zatím nejsou uvedeni žádní lidé.

Pokračujte ve čteníJak hodnotit kvalitu leadů z veřejných videí na TikToku: podrobný postup v Pythonu
Přečtěte si další článek

Proměňte přečtené ve funkční integraci

Prozkoumejte API sociálních dat jsonscraper, testujte požadavky a sestavte další workflow.

Prozkoumat API