jsonscraper
Marknader

Så bedömer du en TikTok-skapares ämnesmässiga konsekvens utifrån offentliga inlägg

En stegvis Python-pipeline för att hämta en skapares flöde, jämföra ämnen och använda AI på ett genomtänkt sätt

Redaktionella riktlinjer Rapportera ett fel

En skapare kan verka lämplig för en kampanj utifrån sin profil och några lyckade videor, men det senaste flödet berättar något viktigare: fortsätter personen att regelbundet prata om det önskade ämnet? Manuell granskning blir snabbt inaktuell, och en enstaka genomgång riskerar att bara fokusera på de mest framträdande inläggen. För en byrå eller ett varumärke är det bättre att samla ett återkommande urval av offentliga videor, spara läget vid granskningstillfället och bedöma ämnesrelevansen enligt samma regler varje gång.

Artikel: Så bedömer du en TikTok-skapares ämnesmässiga konsekvens utifrån offentliga inlägg
Sammanfattning: Vi går igenom hur ett varumärke eller en byrå kan bedöma hur regelbundet en TikTok-skapare publicerar innehåll om ett visst ämne: hämta flödet via ett API, spara ögonblicksbilder, beräkna transparenta mått och låta en tematisk klassificerare analysera videobeskrivningar.
Bildens roll: omslag – huvudidén
Avsnitt: 
Visuellt motiv: En utskriven analysrapport med TikTok-skapares videokort återgivna som neutrala ikoner,
© jsonscraper · AI-genererad illustration

Nedan följer en praktisk process för att bedöma en TikTok-skapares offentliga flöde. Den använder jsonscrapers TikTok Scraper API och Python: hämtar inlägg via en dokumenterad endpoint, sparar den ursprungliga JSON-datan, omvandlar bekräftade fält till en tabell och beräknar andelen videor som passar ett angivet ämne. Om du vill kan beskrivningarna också skickas till en textklassificerare som ett separat, kontrollerat steg.

Börja med att definiera vad ”relevant” innebär

Anta att ett team väljer en skapare för en kampanj om att brygga kaffe hemma. Antalet följare och hur populära enskilda videor är kan bidra till att beskriva räckvidden, men svarar inte i sig på frågan om hur nära flödet är kopplat till kaffe. För en första gallring behövs innehållssignaler: nämner videobeskrivningen kaffebryggning, utrustning, recept eller recensioner; hur många inlägg om ämnet finns inom den valda observationsperioden; och hur stor andel av det insamlade materialet utgörs av ämnesrelevanta videor?

Skriv ned kriterierna i en kort ordlista innan du samlar in data, till exempel ”espresso”, ”kaffekvarn”, ”latte” och ”bryggning”. Lägg till undantag och tvetydiga ord. ”Kaffe” kan förekomma i ett skämt, ett reklamsamarbete eller ett orelaterat sammanhang. En automatisk textmatchning är därför en preliminär märkning, inte en slutgiltig bedömning av skaparen. Skilj åtminstone mellan tre statusar: tydlig relevans, möjlig relevans och en irrelevant video.

Bestäm även urvalet i förväg. Du kan exempelvis analysera de 20 senast hämtade inläggen vid varje veckokörning. Det är en regel för din övervakning, inte ett löfte om att API:et returnerar exakt så många: vilka resultat som är tillgängliga och hur de ser ut beror på svaret på den enskilda begäran. Registrera insamlingstid, antal mottagna objekt och begärans parametrar för att kunna jämföra ögonblicksbilder utan att blanda ihop olika regler.

Begäran till skaparens flöde

I jsonscrapers dokumentation tar endpointen GET /getUserFeed emot den obligatoriska parametern query – profilens användarnamn eller URL. Bland de valfria parametrarna finns count, region, sort_type, with_pinned_posts och max_cursor. API-nyckeln skickas som license_key i query string. Förvara den i en miljövariabel, inte i källkoden. Mer information om endpoints och parametrar finns i den officiella dokumentationen för TikTok API.

Kontrollera först det övergripande status-fältet i svaret och gå sedan vidare till objektet tiktok. För en användares flöde finns inläggslistan i tiktok.aweme_list. Det observerade schemat innehåller videons ID, beskrivningstext, publiceringstid, skapare, URL och ett statistikobjekt. Enskilda fält kan saknas, så hanteringen ska lämna sådana värden tomma i stället för att ersätta dem med påhittade siffror.

Följande minimala exempel är avsett för Python 3.8+ och biblioteket requests. Spara nyckeln i JSONSCRAPER_TIKTOK_LICENSE_KEY. Koden gör en begäran, kontrollerar HTTP-svaret och API:ets övergripande status, sparar den ursprungliga JSON-datan och skriver ut normaliserade rader.

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))

För den här endpointen anges sort_type som 0 för det senaste flödet och 1 för populärt innehåll. Exemplet väljer de senaste inläggen och utesluter fästa videor med with_pinned_posts=0, så att ett äldre fäst inlägg inte hamnar i urvalet av nya inlägg. Om du behöver ett annat läge ska du spara parametern i ögonblicksbildens metadata och använda den på samma sätt vid varje körning.

Bearbeta svaret: från JSON till en reproducerbar tabell

Det är bra att spara det ursprungliga svaret innan du gör några omvandlingar. Då kan du kontrollera normaliseringen, ta reda på varför ett fält blev tomt och anpassa hanteringen om tillgängligheten för valfria fält förändras i svaren. Spara insamlingstiden i UTC, den efterfrågade profilen, parametrarna och skriptversionen bredvid JSON-filen i den operativa lagringen. Lägg inte API-nyckeln i arkivet eller loggen.

Använd aweme_id som inläggsidentifierare vid upprepade körningar, om fältet finns. Deduplikering med detta ID förhindrar att samma video räknas som flera inlägg när den hämtas på nytt. Spara samtidigt separata ögonblicksbilder av statistiken: visnings- och reaktionsvärdena gäller tidpunkten då de samlades in, inte oföränderliga egenskaper hos videon. Om ett statistikfält saknas ska du lämna det tomt och utesluta posten från beräkningen av det måttet.

Publiceringstiden anges i schemat som create_time. I analystabellen ska du omvandla den till ett datum och spara både originalvärdet och en normaliserad UTC-tid. Kontrollera några faktiska poster i det mottagna svaret innan du räknar, så att du vet att datatyp och enheter är de förväntade. Detta är särskilt viktigt när du skapar tidsseriegrafer: en felaktig tidsomvandling flyttar inlägg mellan dagar och förvränger jämförelsen mellan veckor.

En grundläggande ämnesklassificerare kan byggas utan en modell: normalisera texten, sök efter angivna nyckelfraser och märk upp träffar. För en mer användbar kategorisering ska du ta fram en uppsättning manuellt granskade beskrivningar och regler för gränsfall. Jämför sedan ett enkelt ordfilter med den mänskliga märkningen: identifiera vilka uttryck som ger falska träffar och uppdatera ordlistan. Det ger dig en begriplig baslinje att jämföra med när du senare börjar använda AI.

import re

KEYWORDS = (
    "кофе", "эспрессо", "кофемолка", "латте", "заваривание",
)


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"]))

Ett nyckelord i beskrivningen kan vara en användbar signal, men klassificeraren bör returnera en förklaring som går att granska – en lista över matchade termer, inte bara en ”ja/nej”-etikett. För språkmodeller kan du använda en strukturerad prompt: skicka videobeskrivningen och fasta kategorier och be modellen returnera en kategori, en kort motivering och en konfidensnivå. Spara originaltexten och modellens svar separat. En människa bör kontrollera beslut som påverkar budgeten eller valet av samarbetspartner med hjälp av länkarna till inläggen.

Beräkna mått med en tydlig nämnare

Andelen ämnesrelevanta videor och publiceringsfrekvensen passar bra i en enkel rapport. Andelen är antalet videor med bekräftad ämnesrelevans dividerat med antalet videor som gick att klassificera. Visa alltid båda talen, till exempel ”7 av 18 granskade beskrivningar”. Då blir resultatet lättare att förstå och det går att upptäcka när procenten bygger på ett alltför litet urval.

Publiceringsfrekvensen kan anges som antalet hämtade videor under en fast period, till exempel de senaste 30 dagarna. Bestäm periodens gränser utifrån insamlingstid och publiceringsdatum. Vid veckovisa ögonblicksbilder ska du spara resultatet från varje körning, inte bara den uppdaterade slutraden: då syns förändringar i ämnen och aktivitet. Tolka inte antalet insamlade objekt som ett fullständigt arkiv över skaparens inlägg – analysera det urval som faktiskt hämtades och ange tydligt vilken regel som användes.

Visnings-, gilla-, kommentar- och delningsstatistik är användbar som sammanhang för varje video. Jämför absoluta värden försiktigt: ett äldre inlägg kan ha haft längre tid på sig att samla reaktioner. För jämförelser inom samma skapares flöde ska du registrera när varje insamling gjordes och följa hur samma video förändras mellan ögonblicksbilderna. Kalla inte skillnaden mellan två ögonblicksbilder för ”tillväxthastighet” om tidsintervallet och mätningarnas tillgänglighet inte har dokumenterats.

En användbar sammanställning för varje profil omfattar insamlingsdatum, valda parametrar, antal hämtade inlägg, antal klassificerade beskrivningar, antal ämnesrelevanta träffar, exempel på URL:er och en kort notering om tvetydiga fall. Med en sådan tabell kan en medarbetare kontrollera slutsatsen och en annan analytiker upprepa metoden för nästa profil.

Sidindelning och schemaläggning

Om urvalet kräver nästa sida använder dokumentationen för profilflödet max_cursor från föregående svar. Skicka det vidare utan att omvandla det: markören är ett ogenomskinligt värde som ska sparas och skickas tillbaka till API:et. Kontrollera även has_more i svaret om du planerar att hämta fler sidor. Begränsa antalet sidor eller den totala mängden begäranden så att insamlingen avslutas förutsägbart.

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

Välj körningsfrekvens utifrån behovet: en manuell körning räcker för en första bedömning; ett veckoschema kan visa förändringar utan ständig avfrågning om du har en lista med skapare. Körningen kan läggas i cron, en CI-uppgift eller en orkestrerare. Upplägget är enkelt: hämta profiler från en tabell, skicka begäranden med begränsad parallellism, spara ögonblicksbilder, kontrollera andelen lyckade svar och skicka en sammanställning till arbetsbladet. Försök igen efter tillfälliga fel, med ett begränsat antal försök och en paus mellan dem. Spara fel från autentiserade begäranden separat så att nyckeln och konfigurationen kan kontrolleras.

När AI passar – och när granskning behövs

AI kan vara användbart för att klassificera beskrivningar med slang, flera språk eller formuleringar utan exakta nyckelord. Börja med en fast lista över kategorier och be modellen endast använda texten i beskrivningen. Mät sedan kvaliteten på ett litet manuellt märkt urval: jämför modellens kategorier med redaktörens bedömningar och gå igenom fel och tvetydiga fall separat. Rapportera helst andelen överensstämmelse mellan modellen och den manuella märkningen samt antalet granskade exempel, i stället för ett svårtolkat totalbetyg.

Be inte modellen att ”välja den bästa skaparen” utan kriterier. Dela i stället upp processen i mätbara faktorer: ämnesandel, regelbundenhet, exempel på relevanta videor och spannet för offentliga reaktioner. Modellen kan sammanfatta dessa uppgifter kort och ange länkar som stöd; det slutliga beslutet ligger hos teamet, som också tar hänsyn till kampanjens format, målgruppen och överenskommelserna med skaparen.

Om analysen gäller reklamsamarbeten ska du separat kontrollera hur kopplingen mellan skaparen och varumärket redovisas i själva inläggen och vilka regler som gäller. USA:s Federal Trade Commission förklarar i FTC:s vägledning för skapare i sociala medier att kopplingen till ett varumärke ska redovisas tydligt i anslutning till rekommendationen. En profilbiografi eller en dold del av texten kanske inte räcker för att publiken ska uppmärksamma informationen. Övervakning av offentliga data hjälper till att samla underlag för granskning, men bedömningen av om reglerna följs kräver sammanhanget kring det enskilda inlägget och kampanjen.

Resultatet

När pipelinen är konfigurerad får teamet daterade ögonblicksbilder av det offentliga flödet, en tabell med inläggens beskrivningar och tillgängliga mått samt en reproducerbar beräkning av ämnesandelen. Det går då snabbare att välja ut profiler för vidare granskning, upptäcka ämnesförändringar och dokumentera bedömningens grunder. Metoden förblir granskningsbar: den ursprungliga JSON-datan, begärans parametrar, klassificeringsreglerna och videolänkarna gör det möjligt att följa vägen från data till slutsats.

Testa skriptet på en profil, spara råsvaret och granska några klassificeringar manuellt. Fastställ sedan ämnesordlistan, urvalsreglerna och rapportformatet. När resultatet går att reproducera kan du lägga till ett schema och en kö med profiler. Se API-dokumentationen för information om endpoints och parametrar, och besök sidan för TikTok Scraper API för en produktöversikt och tillgängliga integrationsalternativ.

Praktisk checklista före start

  • Skriv ned kampanjens ämne, inkluderingsordlistan och exempel på gränsfall.
  • Fastställ urvalsperiod, värdet för count, sortering och inställningen för fästa inlägg.
  • Förvara ursprunglig JSON-data, insamlingsdatum och parametrar separat från den hemliga nyckeln.
  • Använd aweme_id för deduplicering om identifieraren finns.
  • Skilj på saknat värde och nollvärde, och beräkna inte medelvärden utan en tydlig grund.
  • Visa urvalets storlek intill ämnesandelen och bifoga länkar till exempel.
  • Kontrollera AI-klassificeringen mot ett manuellt granskat urval innan den används för kampanjbeslut.
  • Uppdatera bedömningen enligt ett schema och jämför ögonblicksbilder som samlats in enligt samma regler.

Personer

Inga personer listade för denna artikel ännu.

Fortsätt läsaSå bedömer du kvaliteten på TikTok-leads med offentliga videor: en stegvis pipeline i Python
Läs nästa artikel

Gör det du läser till en fungerande integration

Utforska jsonscrapers API:er för social data, testa anrop och bygg nästa arbetsflöde.

Utforska API:er