jsonscraper
Markeder
Tilbake til journalen

Slik finner du TikTok-videoer med økende engasjement uten å sammenligne rå visningstall

Ta øyeblikksbilder av de samme videoene med jevne mellomrom, og mål økningen uavhengig av samlet popularitet

Redaksjonelle retningslinjer Meld fra om en feil

For å finne ut om en bestemt TikTok-video får respons, sammenligner du de offentlige målingene med videoens forrige øyeblikksbilde. Et enkelt søk viser visninger og reaksjoner som allerede er samlet opp; hvis du henter de samme videoene på nytt, kan du se endringen mellom to kjøringer. Nedenfor finner du en enkel Python-pipeline: søk, lagre målinger i en CSV-fil og beregne differansen.

Hva måler denne typen overvåking?

Skriptet passer for en markedsfører, analytiker eller utvikler som trenger en liste over videoer fra et tema og en etterprøvbar observasjonshistorikk. Et team kan for eksempel følge videoer om en produktlansering eller et bestemt søk fra målgruppen jevnlig, og se hvilke videoer som har fått flere visninger, likerklikk, kommentarer eller delinger siden forrige kontroll.

Artikkel: Slik finner du TikTok-videoer med økende engasjement uten å sammenligne rå visningstall
Sammendrag: En trinnvis Python-pipeline henter TikTok-videoer fra et søk, lagrer visninger og reaksjoner i en CSV-fil og beregner endringer for de samme videoene ved neste kjøring.
Bilderolle: Forside – hovedideen
Seksjon: Hva måler denne typen overvåking?
Visuelt motiv: Redaksjonelt fotografi: trykte ark med anonymiserte rader av kortvideo-ID-er og to tidsstempler
Sammenligning av to målingsøyeblikk for den samme videoen, identifisert med ID.© jsonscraper · laget med KI

Den sentrale sammenligningsenheten er videoen, identifisert med aweme_id. For hver oppføring lagres innsamlingstidspunkt, ID, beskrivelse, URL, skaperens navn og tilgjengelige tellere. Deretter kobles to øyeblikksbilder sammen ved hjelp av ID-en. Dermed blandes ikke økningen i visninger for én video sammen med visningene en annen video har samlet opp.

Resultatet beskriver bare videoene som returneres av et bestemt søk ved en bestemt kjøring. Søkeresultatene kan endre seg, og enkelte statistikkfelt kan mangle. Derfor er det nyttig å lagre selve øyeblikksbildene og innsamlingstidspunktet, og behandle rapporten som en observasjon av videoer som allerede er funnet – ikke som en fullstendig katalog over alle publiseringer om temaet.

Hvordan fungerer innsamlingen via API-et?

Dokumentasjonen for TikTok Scraper API beskriver GET-ruten /searchVideo. Søkestrengen keyword er obligatorisk; blant tilleggsparameterne finner vi count, region, sort_by og date_posted. API-nøkkelen sendes som license_key. Referansen oppgir https://tiktok.evelode.com som basisadresse.

Svaret inneholder en ytre status og et tiktok-objekt. Søkeresultatene kan ligge i tiktok.aweme_list eller under tiktok.search_item_list[].aweme_info. Behandleren nedenfor støtter begge formatene. Målingene hentes fra statistics, blant annet play_count, digg_count, comment_count og share_count; verdier som mangler, lagres som tomme i stedet for å erstattes med null.

Ruteoversikten lister opp cursor for å bla gjennom søkeresultatene og angir gyldige alternativer for date_posted og sort_by. For enkel, gjentakbar overvåking holder det først å hente én resultatside og lagre svaret. Legg bare til paginering ved behov. Hvis du trenger det, sender du videre markøren du mottok, uten å endre den.

Et fungerende Python-eksempel

Installer requests-biblioteket med python -m pip install requests, og angi nøkkelen i miljøvariabelen JSONSCRAPER_TIKTOK_LICENSE_KEY. Skriptet tar et søkeuttrykk som argument og legger de innsamlede øyeblikksbildene til i én CSV-fil. Koden er kompatibel med Python 3.8+.

import csv
import os
import sys
from datetime import datetime, timezone
from pathlib import Path

import requests

BASE_URL = "https://tiktok.evelode.com/searchVideo"
CSV_PATH = Path("tiktok_video_snapshots.csv")
FIELDS = [
    "collected_at", "aweme_id", "author", "description", "share_url",
    "play_count", "digg_count", "comment_count", "share_count",
]


def extract_items(payload):
    """Support the observed search response layouts."""
    data = payload.get("tiktok") or {}
    items = data.get("aweme_list") or []
    if items:
        return items

    found = []
    for result in data.get("search_item_list") or []:
        info = result.get("aweme_info")
        if info:
            found.append(info)
    return found


def main():
    key = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
    if not key:
        raise SystemExit("Set JSONSCRAPER_TIKTOK_LICENSE_KEY first")
    if len(sys.argv) < 2:
        raise SystemExit('Usage: python collect.py "search phrase"')

    params = {
        "license_key": key,
        "keyword": sys.argv[1],
        "count": 20,
        "region": "US",
        "sort_by": "relevance",
        "date_posted": "this-week",
    }
    response = requests.get(BASE_URL, params=params, timeout=30)
    response.raise_for_status()
    payload = response.json()

    if payload.get("status") != "ok":
        raise RuntimeError("API returned a non-ok outer status")
    data = payload.get("tiktok") or {}
    items = extract_items(payload)
    collected_at = datetime.now(timezone.utc).isoformat()

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

    write_header = not CSV_PATH.exists()
    with CSV_PATH.open("a", newline="", encoding="utf-8") as file:
        writer = csv.DictWriter(file, fieldnames=FIELDS)
        if write_header:
            writer.writeheader()
        writer.writerows(rows)

    print("Saved", len(rows), "returned videos")
    print("has_more:", data.get("has_more"), "cursor:", data.get("cursor"))


if __name__ == "__main__":
    main()

Kjør for eksempel python collect.py "produktsøk". Biblioteket legger nøkkelstrengen inn i URL-parametrene; skriptet skriver den ikke ut i terminalen. Ikke lagre hele forespørsels-URL-en i offentlige logger, siden den inneholder nøkkelen. Bruk en hemmelighetsløsning i produksjon, og begrens tilgangen til filen med øyeblikksbilder.

Hvordan beregner du økningen mellom kjøringer?

Skriptet skriver med vilje alle observasjonene i stedet for å overskrive tidligere verdier. Den neste, korte analysatoren kobler sammen de to siste øyeblikksbildene for hver video og skriver ut differansen for tellerne. Hvis en måling mangler i én av de to oppføringene, vises resultatet som utilgjengelig.

Artikkel: Slik finner du TikTok-videoer med økende engasjement uten å sammenligne rå visningstall
Sammendrag: En trinnvis Python-pipeline henter TikTok-videoer fra et søk, lagrer visninger og reaksjoner i en CSV-fil og beregner endringer for de samme videoene ved neste kjøring.
Bilderolle: Støttende illustrasjon 2 – en annen, spesifikk side av saken
Seksjon: Hvordan beregner du økningen mellom kjøringer?
Visuelt motiv: Infografikk på russisk som viser arbeidsflyten: TikTok-søk etter nøkkelord → returnert video
Dataflyten fra søkeresultatet til sammenligning av to lagrede øyeblikksbilder.© jsonscraper · KI-generert illustrasjon
import csv
from collections import defaultdict
from pathlib import Path

rows_by_video = defaultdict(list)
with Path("tiktok_video_snapshots.csv").open(encoding="utf-8", newline="") as file:
    for row in csv.DictReader(file):
        if row["aweme_id"]:
            rows_by_video[row["aweme_id"]].append(row)

metrics = ("play_count", "digg_count", "comment_count", "share_count")
for video_id, snapshots in rows_by_video.items():
    snapshots.sort(key=lambda row: row["collected_at"])
    if len(snapshots) < 2:
        continue
    previous, latest = snapshots[-2], snapshots[-1]
    changes = {}
    for metric in metrics:
        old, new = previous[metric], latest[metric]
        changes[metric] = int(new) - int(old) if old and new else None
    print(video_id, changes, latest["share_url"])

Differansen er endringen mellom to lagrede verdier, ikke en veksthastighet med garantert tidsintervall. Hvis det går ulikt lang tid mellom kjøringene, kan du beregne tidsrommet mellom collected_at-verdiene og sammenligne økningen over det faktiske intervallet. Tellerne kan endre seg mellom observasjonene; de lagrede tidsstemplene viser når verdiene som er brukt, ble hentet.

Hvordan automatiserer og tolker du rapporten?

For en daglig rapport kan du legge innsamlingen inn i en oppgaveplanlegger på en server eller i CI, angi en fast liste med søkefraser og lagre CSV-filen eller laste radene inn i en database. Fjern duplikater innenfor hvert enkelt øyeblikksbilde ved hjelp av aweme_id hvis resultatene inneholder gjentakelser. Lagre rå JSON sammen med normaliserte kolonner for historikken; da blir det enklere å behandle dataene på nytt hvis rapportskjemaet endres.

Det er praktisk å vise videoens ID og URL, skaperen, beskrivelsen, innsamlingstidspunktet og endringer for hver enkelt måling i tabellen. Sortering etter økning i visninger viser spredning, mens økning i kommentarer eller delinger kan fremheve en annen type respons. Ikke slå disse målene sammen til én samlet rangering uten å angi en tydelig regel: hver teller uttrykker noe forskjellig.

Oppgaveplanleggeren kan sende rapporten på e-post, til et regneark eller til en intern kanal, men dette håndteres av infrastrukturen din – eksemplet ovenfor samler bare inn og analyserer data. Hvis du vil hente flere resultater, kan du gå gjennom resultatsidene, lagre markøren og avslutte løkken når API-et melder at det ikke finnes flere sider. Søkemarkøren er en ugjennomsiktig verdi fra svaret; ikke beregn den selv. Selv om du går gjennom sidene, beskriver resultatet bare det API-et returnerer og garanterer ikke en fullstendig liste over alle relevante publiseringer.

Det praktiske resultatet du kan forvente, er en gjentakbar observasjonslogg og en tabell med endringer for videoene du har funnet. Det gjør det lettere å oppdage hvilke publiseringer som har fått endrede offentlige tellere mellom kontrollene, og å sende konkrete lenker til en fagperson for nærmere innholdsanalyse. Du finner produktdetaljer og API-tilgang på siden for TikTok Scraper API.

Hva bør du kontrollere før du setter kjøringen på fast plan?

  • Kontroller at den ytre statusen i svaret er ok før du behandler tiktok.
  • Kontroller begge formatene for søkeelementer; hvis listen mangler, skal innsamlingen gi et tomt resultat, ikke en feil.
  • Lagre de opprinnelige verdiene og tidsstemplene. En tom måling skal forbli tom.
  • Bruk de samme søkene og parameterne for å gjøre sammenligningen av øyeblikksbilder tydeligere; noter endringer i disse innstillingene sammen med rapporten.
  • Følg med på hvor ofte kjøringene skjer, HTTP-feil og historikkens størrelse. Følg også gjeldende plattformregler og krav til databehandling.

For å få et observerbart resultat holder det altså å gjenta det samme søket, identifisere videoene med aweme_id og sammenligne de lagrede målingene over tid. Denne metoden besvarer et avgrenset, praktisk spørsmål – hvilke av videoene du allerede har funnet, som har fått endrede offentlige tellere mellom to kontroller – samtidig som originaldataene er tilgjengelige for revisjon og videre behandling.

Mennesker

Ingen personer er oppført for denne artikkelen ennå.

Fortsett å leseSlik analyserer du TikTok-skaperes temaer: en praktisk Python-pipeline
Les neste artikkel

Gjør det du leser til en fungerende integrasjon

Utforsk jsonscrapers API-er for sosiale data, test forespørsler og bygg neste arbeidsflyt.

Utforsk API-er