jsonscraper

Slik arkiverer du TikTok-søkeresultater med Python

Lagre API-svar etter søkeord, slik at du kan undersøke innlegg og sammenligne tilgjengelige målinger mellom innsamlingsdatoer.

Redaksjonelle retningslinjer Meld fra om en feil

Etter at en kampanje er lansert, kan det være nyttig for teamet å undersøke hvilke offentlige videoer som vises i søkeresultatene for bestemte ord. Manuelle søk er vanskelige å gjenta og sammenligne noen dager senere. Et lite innsamlingsskript kan kjøre de samme søkene etter en tidsplan og arkivere svarene med dato og søkefrase, slik at en analytiker kan kontrollere postene og utarbeide sin egen oppsummering.

Artikkel: Slik arkiverer du TikTok-søkeresultater med Python
Sammendrag: En praktisk oppskrift på et daglig arkiv over offentlige TikTok-videoer: send forespørsler til det dokumenterte jsonscraper-endepunktet, lagre de opprinnelige JSON-svarene og normaliser dataene etter at du har kontrollert et eksempel.
Bildets rolle: Forside – hovedideen
Seksjon: 
Visuelt motiv: Et stilleben som ligner et diagram over en datapipeline, med JSON-filer merket med datoer og søkeord som flyter inn i en kompakt analysetabell med TikTok-trenddiagrammer for videoer, uten personer o
© jsonscraper · AI-generert illustrasjon

Denne veiledningen viser en Python-pipeline for å arkivere søkeresultater for faste søkefraser. I stedet for å overvåke enkeltstående emneknagger eller kontoer er nøkkelen til sammenligning her å gjenta de samme søkefrasene og lagre et eget øyeblikksbilde av hvert svar. Siden for jsonscrapers TikTok Scraper API oppgir basisadressen og endepunktet GET /searchVideo; i dokumentasjonen for dette endepunktet sendes søkefrasen i den obligatoriske parameteren keyword.

Formål og målegrenser

Se for deg at en markedsfører vil samle inn søkeresultater hver dag for flere faste fraser: produktnavnet, en kategori og en formulering av kundens problem. For hver forespørsel lagrer systemet innsamlingstidspunktet og API-svaret. Etter at du har kontrollert et eksempel på et svar, kan du legge til normalisering av felter som faktisk finnes i JSON-dataene, for eksempel video-ID eller offentlige tellere, hvis de er med.

Arkivet besvarer et konkret spørsmål: Hvilke oppføringer returnerte søket for den lagrede frasen under denne kjøringen? Hvis svaret inneholder måltall, kan gjentatte observasjoner vise forskjellen mellom verdier registrert på ulike tidspunkter. Denne forskjellen gjelder de observerte øyeblikksbildene og tidsrommet mellom dem; lagre begge innsamlingstidspunktene og det samme feltet for å kunne sammenligne.

Lagre forespørselen sammen med svaret. Resultatsammensetningen gjelder en bestemt søkefrase og et bestemt innsamlingstidspunkt. Arkivet er derfor nyttig for å følge søkeresultater for valgte søk, men ikke som en fullstendig oversikt over alt innhold på TikTok. ID-er, opprinnelige svar og tidsstempler gjør det mulig å kontrollere hvor hver rad i den senere tabellen kommer fra.

Kontroller endepunktet og parameterne

Oversikten over TikTok API-endepunkter oppgir basisadressen https://tiktok.evelode.com og GET /searchVideo. Den gjeldende API-spesifikasjonen angir keyword som obligatorisk søkeparameter; blant de valgfrie parameterne er cursor, count, cache_timeout, date_posted, sort_by og region. For autentisering sendes license_key. Informasjon om endepunktet finnes også i dokumentasjonen for Python-SDK-en.

Parameterne count og date_posted hjelper deg med å angi svarstørrelse og tidsfilter; sort_by godtar de dokumenterte verdiene most-liked, relevance eller date-posted. Hvis du bruker paginering, send cursor-verdien fra det forrige svaret videre som en ugjennomsiktig verdi, uten å beregne den selv. For et sammenlignbart daglig arkiv bør du lagre forespørselsparameterne og versjonen av din egen kode sammen med dataene.

Eksemplet nedenfor bruker en lav count-verdi for en testkjøring og den faste regionen US. Kontroller én forespørsel, HTTP-statusen og JSON-strukturen før den daglige innsamlingen. Svarskjemaet kan inneholde funne videoer i tiktok.aweme_list eller tiktok.search_item_list, der videoobjektet ligger i aweme_info; koden støtter begge formene som er observert.

Sett opp prosjektet

Opprett et virtuelt miljø og installer requests:

python -m venv .venv
source .venv/bin/activate
pip install requests

I PowerShell aktiverer du miljøet med kommandoen .venv\Scripts\Activate.ps1. Angi nøkkelen og listen over søkefraser med miljøvariabler. Bruk det dokumenterte variabelnavnet JSONSCRAPER_TIKTOK_LICENSE_KEY for TikTok API:

export JSONSCRAPER_TIKTOK_LICENSE_KEY="din_nøkkel"
export TIKTOK_QUERIES="produktnavn,produktkategori,kundeproblem"

Samle inn og lagre øyeblikksbilder

Eksemplet sender én forespørsel for hver frase til det dokumenterte endepunktet, og lagrer deretter den opprinnelige JSON-en, innsamlingstidspunktet og parameterne som ble brukt. Filnavnet inneholder dato og søkefrase. Nøkkelen lagres i miljøet og tas ikke med i arkivet.

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

import requests

BASE_URL = "https://tiktok.evelode.com"
ENDPOINT = "/searchVideo"
LICENSE_KEY = os.environ["JSONSCRAPER_TIKTOK_LICENSE_KEY"]
QUERIES = [
    item.strip()
    for item in os.environ["TIKTOK_QUERIES"].split(",")
    if item.strip()
]
OUT = Path("data")
OUT.mkdir(exist_ok=True)


def safe_name(text):
    cleaned = re.sub(r"[^a-zA-Z0-9_-]+", "_", text).strip("_")
    return cleaned[:80] or "query"


def fetch(query):
    params = {
        "license_key": LICENSE_KEY,
        "keyword": query,
        "count": 10,
        "region": "US",
    }
    response = requests.get(
        BASE_URL + ENDPOINT,
        params=params,
        timeout=60,
    )
    response.raise_for_status()
    payload = response.json()

    if payload.get("status") != "ok":
        raise RuntimeError("API-en returnerte en annen status enn ok")

    return payload


def extract_videos(payload):
    tiktok = payload.get("tiktok") or {}
    videos = list(tiktok.get("aweme_list") or [])
    for item in tiktok.get("search_item_list") or []:
        video = item.get("aweme_info") or {}
        if video:
            videos.append(video)
    return videos


for query in QUERIES:
    collected_at = datetime.now(timezone.utc).isoformat()
    payload = fetch(query)
    record = {
        "collected_at": collected_at,
        "query": query,
        "request": {
            "endpoint": ENDPOINT,
            "keyword": query,
            "count": 10,
            "region": "US",
        },
        "videos_found": len(extract_videos(payload)),
        "payload": payload,
    }
    filename = OUT / f"{collected_at[:10]}_{safe_name(query)}.json"
    filename.write_text(
        json.dumps(record, ensure_ascii=False, indent=2),
        encoding="utf-8",
    )
    print(f"Svar lagret for søket: {query}")
    time.sleep(1)

print(f"Antall lagrede svar: {len(QUERIES)}")

Dette enkle innsamlingsskriptet sender én forespørsel per frase med count=10. Hvis du vil samle inn mer, kan du legge til paginering med cursor: fortsett forespørslene ved å sende videre markørverdien fra svaret så lenge API-et angir at det finnes flere resultater, og lagre hvert svar separat. Markøren og antallet resultater bestemmer den konkrete gjennomgangen; den lagrede JSON-en gjør det mulig å kontrollere hva hver forespørsel faktisk returnerte.

Eksemplet kontrollerer den ytre status-verdien og leser deretter objektet tiktok. Det samler inn elementer fra aweme_list og også fra search_item_list[].aweme_info hvis denne formen finnes. Mulige felter i en videooppføring omfatter ID, beskrivelse, forfatter, lenke og statistikk; enkelte felter kan mangle. Lagre derfor hele svaret, og kontroller at hvert felt finnes før du normaliserer det.

Intervallet på ett sekund er en pause mellom forespørslene fra selve skriptet, ikke en påstand om tjenestens grenseverdier. Tilpass frekvensen og gjentatte forsøk etter tilgangsvilkårene og dokumentasjonen. Parameteren cache_timeout er dokumentert for søk; den lar deg angi hurtigbufferens levetid i sekunder, og ifølge spesifikasjonen slår verdien 0 av hurtigbufring. Legg den til i forespørselen når dette passer for ditt brukstilfelle.

Normaliser data etter det faktiske svaret

Etter den første kjøringen åpner du den lagrede filen og undersøker strukturen i payload. Funksjonen extract_videos i eksemplet samler inn elementer fra to svarformer som er dokumentert for søk. Finn de nøyaktige nøklene til feltene du trenger i analysen. Hvis et felt mangler i en bestemt oppføring, lagrer du det som manglende i stedet for å sette inn et antatt tall.

For videre behandling er det praktisk å lage én rad for hvert funnet objekt og legge til collected_at og query. Bekreftede felter kan lagres i CSV eller en database, mens den opprinnelige JSON-en beholdes i arkivet. Med begge deler kan du lage oversiktlige tabeller og samtidig kontrollere opphavet til hver oppføring.

Hvis API-et returnerer en video-ID, bruker du den til å knytte sammen observasjoner av samme video fra ulike kjøringer. Oppbevar hver observasjon separat, uten å overskrive tidligere data. Hvis det ikke finnes en stabil ID, bør du først undersøke hvilke attributter som kan brukes til å sammenligne oppføringer, og ikke anta at lik tekst i beskrivelsen garanterer et treff.

Sammenlign øyeblikksbilder og lag en rapport

Etter normaliseringen grupperer du oppføringene etter en kontrollert ID og sorterer dem etter innsamlingstidspunkt. Differansen mellom to påfølgende verdier for tellefelter kan beregnes med vanlig kode. En overgang fra 12 400 til 18 900 betyr for eksempel at tellerverdien endret seg med 6 500 mellom disse øyeblikksbildene. Oppgi observasjonsdatoene og det opprinnelige feltet i rapporten, slik at leseren kan kontrollere beregningen.

En nyttig slutttabell inneholder søkefrase, innleggs-ID, innsamlingstidspunkt og utvalgte felter fra svaret. Oppsummeringen kan grupperes etter søk og sorteres etter en bekreftet teller. Det gir teamet en etterprøvbar liste over returnerte oppføringer for videre gjennomgang; implementer tabellen eller meldingen som et eget trinn etter at du har undersøkt det faktiske skjemaet.

Lagre JSON-filene lokalt til å begynne med. Når innsamlingen blir regelmessig, kan du flytte normaliserte rader til PostgreSQL eller et datavarehus, og de opprinnelige svarene til objektlagring med dato og søk i filnavnet. Det er spesielt nyttig å ta vare på originalen når du forbedrer parseren: du kan kjøre den på nytt på historiske data uten å sende en ny forespørsel til API-et.

Kjør innsamlingen etter en tidsplan

For et daglig arkiv kan du kjøre skriptet med cron eller en annen planlegger som er tilgjengelig i miljøet ditt. En jobb kan for eksempel starte Python-filen én gang i døgnet og hente nøkkel og søkefraser fra miljøvariabler. Test én forespørsel først, deretter hele listen, og koble først på tidsplanen etterpå.

For en pålitelig kjøring bør du lagre statusen for hver forespørsel, begrense antall nye forsøk ved midlertidige feil og markere innsamlingen som ufullstendig hvis én frase mislykkes. Ikke ta med nøkkelen i feilmeldinger. Det er også nyttig å skille filer etter dato og søkenavn, slik at en ny kjøring ikke overskriver et tidligere øyeblikksbilde.

Velg frekvens ut fra oppgaven og omfanget av forespørslene. For en daglig oversikt holder det med én kjøring om dagen; hyppigere innsamling er relevant når teamet trenger å følge endringer i løpet av dagen. Begynn med en kort liste over fraser, undersøk om resultatene er nyttige, og utvid deretter innsamlingen innenfor tilgangsvilkårene og reglene for bruk av data.

Bruk KI til tematisk gruppering

Når svarskjemaet er bekreftet, kan du sende utvalgte tekstfelter til en modell for å gruppere beskrivelser etter forhåndsdefinerte temaer eller utarbeide et kort utkast til en oppsummering. Ta vare på det opprinnelige innleggs-ID-et, søkefrasen og tekstutdraget som kategorien bygger på, sammen med klassifiseringen. Da kan analytikeren gå fra modellens konklusjon tilbake til den opprinnelige oppføringen.

Beregn numeriske differanser, sortering og deduplisering med vanlig kode. En modell kan brukes til tekstbehandling og utforming av rapportformuleringer, mens tellere og tidsstempler hentes fra de lagrede svarene. Når disse operasjonene holdes atskilt, blir opphavet til hver konklusjon tydelig.

Kontroller et utvalg av de automatiske kategoriene manuelt, og lagre rettelsene som testeksempler. Hvis ulike typer innlegg stadig havner i samme gruppe, bør du presisere kategoridefinisjonene og kontrollere på nytt. Denne prosessen gjør det mulig å vurdere klassifiseringens kvalitet på dataene for din oppgave.

Oppsummering: et gjentakbart arkiv og en etterprøvbar oversikt

Når du har kjørt den dokumenterte forespørselen med parameteren keyword, har teamet et arkiv over hvilke fraser som ble brukt, når de ble kjørt, og hvilke data API-et returnerte for hver av dem. Arkivet kan brukes til å lage en resultattabell, sammenligne bekreftede felter mellom øyeblikksbilder og utarbeide en liste over funne innlegg for manuell analyse.

Begynn med én testforespørsel, og konfigurer deretter fraselisten og tidsplanen. Beskrivelsen av TikTok Scraper API oppgir basisadressen og oversikten over endepunkter; parameterne for /searchVideo og svarformatet er beskrevet i API-spesifikasjonen. Ved å arkivere kontrollerte svar får du et grunnlag for gjentakbar analyse av faste søkefraser.

People

No people listed for this article yet.

Keep readingSlik analyserer du TikTok-skaperes temaer: en praktisk Python-pipeline
Read the next article

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