HTTP 200 garanterer ikke at den daglige TikTok-overvåkingen har hentet videoer. Søkeresultatene kan ligge i aweme_list eller i search_item_list[].aweme_info; et skript som bare leser den første arrayen, kan fullføres uten feil og likevel skrive en tom rapport. En pålitelig kontroll bekrefter separat transportstatus og applikasjonsstatus, henter ut begge støttede svarstrukturene og registrerer hvor mange unike videoer som ble hentet i denne kjøringen.
Hva det er verdt å diagnostisere
Se for deg denne oppgaven: Hver morgen samler et team inn offentlige videoer for flere søk, slik at de kan oppdage nye innlegg om et produkt. Et viktig resultat av denne prosessen er en reproduserbar liste over funn med beskrivelse, forfatter, publiseringsdato og tilgjengelige måltall. Hvis rapporten plutselig er tom, kan årsaken være JSON-behandling, et endret resultatsett, at allerede kjente videoer dukker opp igjen, eller en faktisk feil i forespørselen. Ett enkelt tall – for eksempel lengden på aweme_list – gjør det ikke mulig å skille mellom disse tilfellene.
For jsonscraper TikTok Scraper API tar søkeruten /searchVideo den obligatoriske parameteren keyword og tilleggsparametrene count, cursor, date_posted, sort_by og region. Dokumentasjonen for ruten beskriver paginering med cursor; verdien skal sendes videre uendret fra det forrige svaret. Parameteren count angir ønsket antall resultater, ikke en garanti for at alle innlegg blir funnet.
Del kontrollen inn i fire signaler
Nyttig diagnostikk består av fire uavhengige kontroller. Den første er at HTTP-forespørselen fullføres. Den andre er at den ytre status-verdien i svaret er ok, og at den indre tiktok.status_code tilsvarer et vellykket svar. Den tredje er at objektet tiktok finnes, og at oppføringer kan hentes fra begge de dokumenterte stedene i svaret. Den fjerde er at det etter deduplisering gjenstår oppføringer med ID-er som kan lagres. Registrer antallet elementer som er hentet ut både før og etter deduplisering: Forskjellen viser om det oppstod gjentakelser under normaliseringen.
Et manglende felt skal stå tomt, ikke erstattes med en oppdiktet verdi. For eksempel kan antall visninger mangle i en bestemt oppføring. Hvis du lagrer den opprinnelige JSON-en sammen med den normaliserte raden, kan du senere kontrollere om informasjon gikk tapt under parsing, eller om den manglet i det opprinnelige svaret.
En enkel forespørsel og normalisering i Python
Spesifikasjonen fra jsonscraper angir basisadressen https://tiktok.evelode.com og at nøkkelen sendes i forespørselsparameteren license_key. Eksemplet nedenfor bruker de dokumenterte parameterne; nøkkelen leses fra en miljøvariabel og skrives ikke til loggen. Installer avhengigheten med kommandoen python -m pip install requests, og angi deretter JSONSCRAPER_TIKTOK_LICENSE_KEY i miljøet.


import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
BASE_URL = "https://tiktok.evelode.com/searchVideo"
KEY = os.environ["JSONSCRAPER_TIKTOK_LICENSE_KEY"]
def extract_videos(payload):
"""Samle videoer fra begge de kjente strukturene i søkesvaret."""
tiktok = payload.get("tiktok") or {}
videos = []
for item in tiktok.get("aweme_list") or []:
if isinstance(item, dict):
videos.append(item)
for item in tiktok.get("search_item_list") or []:
if isinstance(item, dict):
aweme = item.get("aweme_info")
if isinstance(aweme, dict):
videos.append(aweme)
return videos
def main():
params = {
"license_key": KEY,
"keyword": "eksempel på produktsøk",
"count": 20,
"region": "US",
}
response = requests.get(BASE_URL, params=params, timeout=30)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
raise RuntimeError("API-et returnerte en ytre status som ikke er ok")
tiktok = payload.get("tiktok")
if not isinstance(tiktok, dict):
raise RuntimeError("Objektet tiktok mangler i svaret")
if tiktok.get("status_code") != 0:
raise RuntimeError("Den indre status_code er ikke lik den vellykkede verdien 0")
raw_videos = extract_videos(payload)
unique = {}
for video in raw_videos:
video_id = video.get("aweme_id")
if video_id:
unique.setdefault(str(video_id), video)
snapshot = {
"collected_at": datetime.now(timezone.utc).isoformat(),
"keyword": params["keyword"],
"status": payload.get("status"),
"status_code": tiktok.get("status_code"),
"raw_items": len(raw_videos),
"unique_items": len(unique),
"has_more": tiktok.get("has_more"),
"cursor": tiktok.get("cursor"),
"videos": list(unique.values()),
}
Path("snapshots").mkdir(exist_ok=True)
stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
Path(f"snapshots/{stamp}.json").write_text(
json.dumps(snapshot, ensure_ascii=False, indent=2),
encoding="utf-8",
)
print({
"status": snapshot["status"],
"status_code": snapshot["status_code"],
"raw_items": snapshot["raw_items"],
"unique_items": snapshot["unique_items"],
"has_more": snapshot["has_more"],
})
if __name__ == "__main__":
main()
Skriptet kontrollerer transportnivået med raise_for_status(), og kontrollerer deretter den ytre statusen, at objektet tiktok finnes, og den indre status_code. Deretter henter det oppføringer fra de to søkestrukturene, dedupliserer dem etter aweme_id og lagrer et øyeblikksbilde med innsamlingstidspunktet. Hvis det ikke finnes passende oppføringer, inneholder filen likevel informasjon om kjøringen. Dermed kan du skille mellom et lagret tomt resultat og en manglende rapport.
Slik gjør du øyeblikksbilder om til et signal for teamet
Kjør skriptet etter en tidsplan med cron, CI eller en arbeidsflytplanlegger. Lagre øyeblikksbilder separat for hvert søk, eller ta med søkeordet i filnavnet. I en statustabell er det nok å registrere kjøretidspunkt, status, antall hentede og unike oppføringer samt flagget has_more. Det kan være nyttig å sende et varsel ved unntak i forespørselen, manglende obligatoriske deler av svaret eller en brå endring i antall hentede oppføringer sammenlignet med historikken for det aktuelle søket.
En slik sammenligning avdekker en uregelmessighet i datapipelinen, men forklarer ikke i seg selv årsaken. Et lavere antall resultater kan skyldes innholdet i det aktuelle resultatsettet, ikke en feil i API-et eller parseren. Derfor er det nyttig å lagre den opprinnelige JSON-en, sammenligne identiske parametere og kontrollere ID-ene som ble funnet. Velg en varslingsgrense ut fra observasjoner av nettopp søket ditt, ikke ut fra et universelt tall.
Ved paginering bruker du cursor fra svaret og avslutter gjennomgangen når API-et oppgir at det ikke finnes flere resultater. Lagre brukte markører og forespørselsparametere, slik at kjøringen kan gjentas. Parameterne date_posted og sort_by lar deg angi tidsfilter og sortering; hvis oppgaven krever sammenligninger som kan gjentas, bør du holde dem uendret mellom kjøringene.
Slik leser du resultatet
Etter innføringen har teamet et etterprøvbart svar på tre praktiske spørsmål: Ble forespørselen gjennomført, hvor ligger resultatene i JSON, og hvor mange unike videoer kom med i det lagrede øyeblikksbildet? Dette forkorter veien fra en tom tabell til diagnostikk: Først kontrolleres status og struktur, deretter parametere, gjentakelser og innholdet i det opprinnelige svaret.
Svarskjemaet og tilgjengelige felt kan variere mellom oppføringer. I en live-kontroll med jsonscraper 25. oktober 2026 returnerte søket felter for ID, beskrivelse, forfatter og statistikk; verdiene for den enkelte oppføringen bør regnes som valgfrie. En fungerende rapport lagrer dataene som faktisk ble mottatt, og erstatter ikke manglende verdier med nuller.
Du kan begynne på siden for TikTok Scraper API og kontrollere nøyaktige ruter og parametere i den offisielle API-dokumentasjonen. En slik kontroll er nyttig før overvåkingen settes i drift: Rapporten blir et observerbart resultat som det er mulig å diagnostisere kvaliteten på.