jsonscraper

Så arkiverar du TikToks sökresultat med Python

Spara API-svar efter sökord för att granska inlägg och jämföra tillgängliga mätvärden mellan insamlingstillfällen.

Redaktionella riktlinjer Rapportera ett fel

Efter en kampanj kan teamet vilja kontrollera vilka offentliga videor som visas i sökresultaten för utvalda ord. Manuella sökningar är svåra att upprepa och jämföra några dagar senare. Ett enkelt insamlingsskript kan köra samma frågor enligt ett schema och arkivera svaren med datum och sökfras, så att en analytiker kan granska posterna och skapa en egen sammanställning.

Artikel: Så arkiverar du TikToks sökresultat med Python
Sammanfattning: En praktisk metod för att skapa ett dagligt arkiv över offentliga TikTok-videor: anropa den dokumenterade jsonscraper-rutten, spara råa JSON-svar och normalisera dem efter att ha granskat ett dataexempel.
Bildens roll: omslag – huvudidén
Avsnitt: 
Visuellt motiv: En stillbild som liknar ett diagram över en datapipeline, där JSON-filer märkta med datum och söktermer flödar in i en kompakt analystabell med diagram över TikTok-videotrender, inga personer o
© jsonscraper · AI-genererad illustration

Den här guiden visar en Python-pipeline för att arkivera sökresultat från fasta fraser. Till skillnad från övervakning av enskilda hashtaggar eller konton bygger jämförelsen här på att samma sökfraser används varje gång och att en separat ögonblicksbild av varje svar sparas. Sidan för jsonscrapers TikTok Scraper API anger basadressen och rutten GET /searchVideo; i dokumentationen för rutten anges att sökfrasen skickas i den obligatoriska parametern keyword.

Uppgift och mätningens avgränsningar

Föreställ dig att en marknadsförare vill samla sökresultat varje dag för några fasta fraser: ett produktnamn, en kategori och en formulering av kundens problem. För varje förfrågan sparar systemet insamlingstidpunkten och API-svaret. När ett exempel på svaret har granskats kan du lägga till normalisering av fält som faktiskt finns i JSON-filen, till exempel video-ID eller offentliga räknare, om sådana förekommer.

Arkivet besvarar en avgränsad fråga: vilka poster returnerade sökningen för den sparade frasen under den här körningen? Om svaret innehåller mätvärden kan upprepade observationer visa skillnaden mellan värden som registrerats vid olika tidpunkter. Skillnaden gäller de observerade ögonblicksbilderna och intervallet mellan dem; spara därför båda insamlingstidpunkterna och samma fält vid jämförelsen.

Spara förfrågan tillsammans med svaret. Resultatens sammansättning hör ihop med en viss sökfras och en viss insamlingstidpunkt. Arkivet är därför användbart för att följa resultat för utvalda sökningar, men inte som en fullständig översikt över allt innehåll på TikTok. ID:n, råsvar och tidsstämplar gör det lättare att kontrollera var varje rad i en senare tabell kommer ifrån.

Kontrollera rutten och dess parametrar

I översikten över TikTok API-rutter anges basadressen https://tiktok.evelode.com och GET /searchVideo. Den aktuella API-specifikationen anger keyword som obligatorisk sökparameter. Bland de valfria parametrarna finns cursor, count, cache_timeout, date_posted, sort_by och region. För autentisering skickas license_key. Information om rutten finns även i dokumentationen för Python-SDK:n.

Parametrarna count och date_posted hjälper till att ange svarsstorlek och tidsfilter. sort_by godtar de dokumenterade värdena most-liked, relevance eller date-posted. Om du använder paginering skickar du värdet på cursor från föregående svar vidare som ett opakt värde, utan att beräkna det själv. För att få ett jämförbart dagligt arkiv bör du spara förfrågans parametrar och versionen av din egen kod tillsammans med data.

Exemplet nedan använder ett lågt värde för count vid testkörningen och en fast region, US. Innan du börjar samla in data dagligen bör du kontrollera en förfrågan, dess HTTP-status och JSON-strukturen. Svarsformatet kan innehålla hittade videor under tiktok.aweme_list eller tiktok.search_item_list, där videoobjektet ligger i aweme_info. Koden hanterar båda observerade formerna.

Förbered projektet

Skapa en virtuell miljö och installera requests:

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

I PowerShell aktiverar du miljön med kommandot .venv\Scripts\Activate.ps1. Ange nyckeln och listan med sökfraser via miljövariabler. För TikTok API använder du det dokumenterade variabelnamnet JSONSCRAPER_TIKTOK_LICENSE_KEY:

export JSONSCRAPER_TIKTOK_LICENSE_KEY="din_nyckel"
export TIKTOK_QUERIES="produktnamn,produktkategori,kundproblem"

Samla in och spara ögonblicksbilder

Exemplet skickar en förfrågan för varje fras till den dokumenterade rutten och sparar sedan den råa JSON-filen, insamlingstidpunkten och parametrarna som användes. Filnamnet innehåller datum och sökfras. Nyckeln lagras i miljön och tas inte 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 returnerade en annan status än 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 sparat för sökningen: {query}")
    time.sleep(1)

print(f"Antal sparade svar: {len(QUERIES)}")

Det här enkla insamlingsskriptet gör en förfrågan per fras med count=10. För en bredare insamling kan du lägga till paginering med cursor: fortsätt att skicka förfrågningar med markörvärdet från svaret tills API:t anger att det inte finns fler resultat, och spara varje svar separat. Markören och antalet resultat definierar den aktuella genomgången; med den sparade JSON-filen kan du senare kontrollera exakt vad varje förfrågan returnerade.

Exemplet kontrollerar det yttre värdet status och läser sedan objektet tiktok. Det samlar in poster från aweme_list och även från search_item_list[].aweme_info, om den formen förekommer. Möjliga fält i en videopost är bland annat ID, beskrivning, författare, länk och statistik; enskilda fält kan saknas. Spara därför hela svaret och kontrollera att varje fält finns när du normaliserar data.

En sekunds fördröjning är en paus mellan skriptets egna förfrågningar, inte ett påstående om tjänstens begränsningar. Anpassa frekvens och återförsök efter åtkomstvillkoren och dokumentationen. Parametern cache_timeout är dokumenterad för sökning; enligt specifikationen kan du ange en cachningstid i sekunder, och värdet 0 stänger av cachning. Lägg till parametern i förfrågan när det passar ditt användningsfall.

Lägg till normalisering utifrån det faktiska svaret

Efter den första körningen öppnar du den sparade filen och granskar strukturen under payload. Funktionen extract_videos i exemplet samlar in poster från två dokumenterade platser där sökresultaten kan finnas. Leta upp de exakta nycklarna för fälten du behöver analysera. Om ett fält saknas i en viss post ska du registrera det som saknat i stället för att fylla i ett antaget värde.

För vidare bearbetning är det praktiskt att skapa en rad per hittat objekt och lägga till collected_at och query. Bekräftade fält kan sparas i en CSV-fil eller databas, medan den råa JSON-filen behålls i arkivet. Den kombinationen gör det möjligt att skapa lättanvända tabeller och samtidigt kontrollera varje posts ursprung.

Om API:t returnerar ett video-ID kan du använda det för att länka samman observationer av samma video från olika körningar. Spara varje observation separat i stället för att skriva över tidigare data. Om det inte finns något stabilt ID bör du först kontrollera vilka attribut som kan användas för att matcha poster, och inte anta att identisk beskrivningstext garanterar en matchning.

Jämför ögonblicksbilder och skapa en rapport

Efter normaliseringen grupperar du posterna efter ett kontrollerat ID och sorterar dem efter insamlingstidpunkt. Skillnaden mellan två på varandra följande värden för räknarfält kan beräknas med vanlig kod. En ändring från 12 400 till 18 900 innebär exempelvis att räknarvärdet ökade med 6 500 mellan dessa ögonblicksbilder. Ange observationsdatumen och källfältet i rapporten, så att läsaren kan kontrollera beräkningen.

En användbar sammanställningstabell kan innehålla sökfras, inläggs-ID, insamlingstidpunkt och valda fält från svaret. Sammanställningen kan grupperas efter sökning och sorteras efter en bekräftad räknare. Det ger teamet en kontrollerbar lista över returnerade poster för vidare granskning. Skapa tabellen eller meddelandet i ett separat steg efter att du har undersökt det faktiska formatet.

Spara först JSON-filerna lokalt. När insamlingen blir regelbunden kan du flytta normaliserade rader till PostgreSQL eller ett datalager och lägga de råa svaren i objektlagring med datum och sökfråga i filnamnet. Det är särskilt användbart att behålla råfilen när du förbättrar parsern: du kan köra den igen på historiska data utan att anropa API:t på nytt.

Kör insamlingen enligt ett schema

För ett dagligt arkiv kan du anropa skriptet via cron eller en annan schemaläggare som finns i din miljö. Ett exempel är att låta ett jobb köra Python-filen en gång om dagen och tillhandahålla nyckeln och sökfraserna som miljövariabler. Testa en enskild förfrågan först, därefter hela listan och koppla sedan in schemaläggningen.

För en tillförlitlig körning bör du spara status för varje förfrågan, begränsa antalet återförsök vid tillfälliga fel och markera insamlingen som ofullständig om en fras misslyckas. Ta inte med nyckeln i felmeddelanden. Det är också bra att skilja filerna åt efter datum och sökfråga, så att en ny körning inte skriver över en tidigare ögonblicksbild.

Välj insamlingsfrekvens efter uppgiften och antalet förfrågningar. För en daglig översikt räcker det med en körning per dag. Tätare insamling kan vara relevant när teamet behöver följa förändringar under dagen. Börja med ett litet antal fraser, kontrollera hur användbara resultaten är och utöka sedan insamlingen inom ramen för åtkomstvillkor och regler för dataanvändning.

Använd AI för att gruppera teman

När svarsformatet har bekräftats kan utvalda textfält skickas till en modell för att gruppera beskrivningar efter fördefinierade teman eller ta fram ett kort utkast till en sammanställning. Spara det ursprungliga inläggs-ID:t, sökfrasen och textstycket som kategorin bygger på tillsammans med klassificeringen. Då kan analytikern gå från modellens resultat tillbaka till den ursprungliga posten.

Beräkna numeriska skillnader, sortering och dubblettkontroller med vanlig kod. En modell kan användas för textbearbetning och formulering av rapporter, medan räknare och tidsstämplar ska hämtas från de sparade svaren. När dessa uppgifter hålls åtskilda blir det tydligt var varje slutsats kommer ifrån.

Granska en del av de automatiska kategorierna manuellt och spara korrigeringarna som testexempel. Om olika typer av inlägg regelbundet hamnar i samma grupp bör du förtydliga kategoriernas definitioner och göra en ny kontroll. Den processen hjälper dig att bedöma klassificeringens kvalitet för din uppgift.

Slutsats: ett repeterbart arkiv och en kontrollerbar sammanställning

När ni har kört den dokumenterade sökförfrågan med parametern keyword får teamet ett arkiv som visar vilka fraser som användes, när det skedde och vilka data API:t returnerade för varje fras. Utifrån arkivet kan ni skapa en resultattabell, jämföra bekräftade fält mellan ögonblicksbilder och sammanställa en lista över hittade inlägg för manuell analys.

Börja med en testsökning och konfigurera sedan fraslistan och schemat. Beskrivningen av TikTok Scraper API innehåller basadressen och en översikt över rutterna. Parametrarna för /searchVideo och svarsformatet finns beskrivna i API-specifikationen. Genom att arkivera kontrollerade svar skapar du en grund för repeterbar analys av fasta sökfraser.

People

No people listed for this article yet.

Keep readingSå analyserar du TikTok-skapares ämnen: ett praktiskt Python-arbetsflöde
Read the next article

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