jsonscraper
Markeder

Slik vurderer du kvaliteten på TikTok-leads fra offentlige videoer: en trinnvis Python-pipeline

Samle et utvalg med søkeord, identifiser mulige etterspørselssignaler og send etterprøvbare data til en analytiker eller AI-klassifikator

Redaksjonelle retningslinjer Meld fra om en feil

Salgsteamet får det samme spørsmålet fra flere kanaler: Hvilke oppgaver prøver potensielle kunder allerede å løse? Manuell søking på TikTok gir en mengde videoer, men det er vanskelig å gjenta søket en uke senere, sammenligne resultatene og forklare hvorfor en bestemt video ble tatt med i rapporten. En liten undersøkelse kan gjøres om til en reproduserbar dataflyt ved å hente offentlige søkeresultater for noen presise søk, lagre råsvaret, hente ut felter om videoen og skaperen, fjerne duplikater og vurdere tegn på kjøpsintensjon eller produktvalg separat.

Artikkel: Slik vurderer du kvaliteten på TikTok-leads fra offentlige videoer: en trinnvis Python-pipeline
Sammendrag: En praktisk arbeidsflyt for markedsførere og utviklere: Søk etter offentlige TikTok-videoer med målgruppens søkefraser via TikTok Scraper API, lagre råsvarene, fjern duplikater og ranger videoene etter tydelige regler. Her finner du et Python-skript som håndterer to varianter av svarstrukturen og overfører API-nøkkelen på en sikker måte.
Bildets rolle: omslag – hovedideen
Del: 
Visuelt motiv: Redaksjonelt nærbilde
© jsonscraper · AI-generert illustrasjon

Nedenfor finner du en fungerende Python-løsning med TikTok Scraper API fra jsonscraper. Den passer for eksempel for en tjeneste for videoredigering som vil undersøke hvordan skapere beskriver utfordringer med undertekster, maler og eksport. Skriptet samler søkeresultatene som returneres, og en analytiker kan deretter kontrollere klassifiseringen og avgjøre hvilke formuleringer som bør brukes i målgruppeundersøkelsen. Dette er en måte å organisere observasjoner av offentlig innhold på, ikke en automatisk opptelling av alle brukere med kjøpsintensjon.

Problemet: målgruppens søk finnes, men undersøkelsen er vanskelig å gjenta

Manuelle undersøkelser mister lett kontekst. Én medarbeider søker etter «hvordan legge til undertekster», en annen etter «automatiske undertekster for Reels», og en tredje lagrer bare videoer hen liker. Den endelige tabellen blander ulike søk, datoer, måltall og utvalgskriterier. Når lederen ber om å gjenta analysen eller sammenligne to uker, må man rekonstruere både resultatene og selve søkeprosessen.

Det er mer nyttig å definere analyseenheten på forhånd: en video som er funnet, med beskrivelsestekst, ID, lenke, skaper og tilgjengelige offentlige måltall. Det opprinnelige søket og tidspunktet for innsamling lagres for hver video. Da kan man svare separat på spørsmål som hvilke formuleringer som forekommer, hvilke problemer som omtales, hvilke videoer som fikk flere offentlige reaksjoner, og hva som har endret seg mellom lagrede øyeblikksbilder.

La oss ta utgangspunkt i et selskap som utvikler et verktøy for undertekster og korte videoer. Selskapet vil finne offentlige videoer der skaperne snakker direkte om manuell transkripsjon, feil i talegjenkjenning, timing av teksting eller klargjøring av innhold for flere plattformer. Man bør ikke omtale skaperen som en «lead» eller «kjøper» ut fra én video alene: En analytiker kan rangere innholdet etter observerbare tegn og deretter kontrollere vurderingen manuelt.

Løsningsskisse: søk, registrering, rensing, vurdering

Pipelinen består av fire trinn. Først lager teamet en liten ordliste med søkefraser som hver svarer til en bestemt oppgave for målgruppen. Deretter søker skriptet etter videoer og lagrer hele JSON-svaret. I tredje trinn normaliseres ulike svarstrukturer til én rad per video, og duplikater fjernes ved hjelp av video-ID. Til slutt gir regler eller en egen AI-klassifikator videoene en prioritet for manuell gjennomgang, samtidig som begrunnelsen for vurderingen lagres.

Det er viktig å skille mellom disse trinnene for å kunne gjenta prosessen. Råsvaret hjelper med å undersøke endringer i feltene eller feil i normaliseringen. Den normaliserte tabellen er praktisk for filtrering og visualisering. En egen vurderingstabell gjør det mulig å endre reglene uten å sende et nytt API-kall, forutsatt at de lagrede dataene egner seg for ny behandling og følger teamets oppbevaringsfrist.

Som utgangspunkt kan man bruke «feil i automatiske undertekster», «hvordan legge til undertekster raskt» og «redigering av korte videoer for bedrifter». Dette er bare eksempler på søkefraser; tilpass formuleringene til målgruppens språk og produktet. Lagre søkene sammen med resultatet, fordi ulike formuleringer gir ulike utvalg.

Hva TikTok Scraper API tilbyr

I den publiserte dokumentasjonen fra jsonscraper er GET-endepunktet /searchVideo oppgitt for videosøk, med basisadressen https://tiktok.evelode.com. Den obligatoriske parameteren er keyword; blant de dokumenterte tilleggsparameterne er count, cursor, region, date_posted, sort_by og cache_timeout. For eksempel godtar sort_by de dokumenterte verdiene most-liked, relevance og date-posted, mens date_posted kan ha verdier som this-week eller all-time. Den nøyaktige parameterlisten og formålet med endepunktet står i oversikten over TikTok API-endepunkter.

Nøkkelen sendes som en query-parameter med navnet license_key. I eksemplet nedenfor leses den fra miljøvariabelen JSONSCRAPER_TIKTOK_LICENSE_KEY, slik at hemmeligheten ikke lagres i koden eller skrives til loggen. Bruk de gjeldende vilkårene for tilgangen din ved autentisering og valg av parametere; siden for TikTok Scraper API beskriver produktet og lenker videre til en demo og dokumentasjon.

Søkeresultatet må tolkes ut fra strukturen, ikke ved å anta at det bare finnes én bestemt liste. I eksemplet som ble kontrollert, returnerte API-et en overordnet status og et tiktok-objekt. Videoene kan ligge i tiktok.aweme_list, og i søkeresultater forekommer også tiktok.search_item_list[].aweme_info. Kontroller begge formatene. Felter som video-ID, beskrivelse, lenke, publiseringstidspunkt, informasjon om skaperen og statistikk som visninger, likerklikk, kommentarer og delinger, kan være tilgjengelige i objektene. Behandle måltall og felter som valgfrie: Koden skal ikke fylle inn oppdiktede nullverdier når en verdi mangler.

Søkepaginering bruker cursor. Hvis skriptet fortsetter gjennom resultatene, skal det sende den mottatte verdien videre som en ugjennomsiktig token i neste forespørsel, ikke beregne den selv. For en første prototype er det fornuftig å begrense innsamlingen til én side per søk. Det gjør kontrollen enklere og belastningen forutsigbar. Senere kan man legge til paginering med en grense for antall sider og beskyttelse mot gjentatte markører.

Klargjøring av miljøet

Eksemplet bruker Python 3.8 eller nyere og standardbiblioteket. Angi nøkkelen i miljøet, for eksempel i et macOS- eller Linux-skall:

export JSONSCRAPER_TIKTOK_LICENSE_KEY="din_nøkkel"
python tiktok_demand.py

I Windows PowerShell kan du angi miljøvariabelen slik:

$env:JSONSCRAPER_TIKTOK_LICENSE_KEY="din_nøkkel"
python .\tiktok_demand.py

Skriptet sender én forespørsel for hvert søkeord. Det kontrollerer HTTP-feil, JSON-svaret og den overordnede statusen, og henter deretter ut objekter fra begge de bekreftede listeformatene. Råsvaret skrives linje for linje til en JSONL-fil: Hver oppføring inneholder søket, observasjonstidspunktet og det opprinnelige svaret. Den andre delen lager en CSV-fil med standardiserte felter. Nøkkelfilen finnes ikke i koden, og hemmeligheten skrives ikke ut.

Eksempel: hente og normalisere søkeresultater

import csv
import json
import os
import time
from datetime import datetime, timezone
from pathlib import Path
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen

BASE_URL = "https://tiktok.evelode.com/searchVideo"
QUERIES = [
    "feil i automatiske undertekster",
    "hvordan legge til undertekster raskt",
    "redigering av korte videoer for bedrifter",
]


def extract_videos(payload):
    """Støtter begge observerte strukturer i søkeresvar."""
    tiktok = payload.get("tiktok") or {}
    videos = []

    aweme_list = tiktok.get("aweme_list") or []
    if isinstance(aweme_list, list):
        videos.extend(item for item in aweme_list if isinstance(item, dict))

    search_items = tiktok.get("search_item_list") or []
    if isinstance(search_items, list):
        for item in search_items:
            if not isinstance(item, dict):
                continue
            video = item.get("aweme_info")
            if isinstance(video, dict):
                videos.append(video)

    return videos


def fetch(query, license_key):
    params = {
        "keyword": query,
        "count": 20,
        "sort_by": "relevance",
        "date_posted": "this-month",
        "region": "US",
        "license_key": license_key,
    }
    url = BASE_URL + "?" + urlencode(params)
    request = Request(url, headers={"Accept": "application/json"})

    try:
        with urlopen(request, timeout=45) as response:
            payload = json.loads(response.read().decode("utf-8"))
    except HTTPError as exc:
        raise RuntimeError("API-et returnerte HTTP-status {}".format(exc.code)) from exc
    except (URLError, TimeoutError, json.JSONDecodeError) as exc:
        raise RuntimeError("Kunne ikke fullføre eller tolke API-forespørselen") from exc

    if payload.get("status") != "ok":
        raise RuntimeError("API-svaret hadde ikke status ok")
    return payload


def metric(statistics, key):
    value = statistics.get(key)
    return value if isinstance(value, (int, float)) else ""


def main():
    license_key = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
    if not license_key:
        raise SystemExit("Angi JSONSCRAPER_TIKTOK_LICENSE_KEY i miljøet")

    raw_path = Path("tiktok_raw.jsonl")
    csv_path = Path("tiktok_videos.csv")
    seen_ids = set()
    rows = []

    with raw_path.open("a", encoding="utf-8") as raw_file:
        for query in QUERIES:
            observed_at = datetime.now(timezone.utc).isoformat()
            payload = fetch(query, license_key)
            raw_file.write(json.dumps({
                "query": query,
                "observed_at": observed_at,
                "response": payload,
            }, ensure_ascii=False) + "\n")

            for video in extract_videos(payload):
                video_id = video.get("aweme_id")
                if not video_id or video_id in seen_ids:
                    continue
                seen_ids.add(video_id)

                author = video.get("author") or {}
                stats = video.get("statistics") or {}
                rows.append({
                    "query": query,
                    "observed_at": observed_at,
                    "video_id": video_id,
                    "created_at": video.get("create_time", ""),
                    "description": video.get("desc", ""),
                    "share_url": video.get("share_url", ""),
                    "author_username": author.get("unique_id", ""),
                    "author_nickname": author.get("nickname", ""),
                    "views": metric(stats, "play_count"),
                    "likes": metric(stats, "digg_count"),
                    "comments": metric(stats, "comment_count"),
                    "shares": metric(stats, "share_count"),
                })
            time.sleep(1)

    columns = [
        "query", "observed_at", "video_id", "created_at", "description",
        "share_url", "author_username", "author_nickname", "views",
        "likes", "comments", "shares",
    ]
    with csv_path.open("w", newline="", encoding="utf-8") as csv_file:
        writer = csv.DictWriter(csv_file, fieldnames=columns)
        writer.writeheader()
        writer.writerows(rows)

    print("Lagret {} unike returnerte videoer i {}".format(len(rows), csv_path))


if __name__ == "__main__":
    main()

Her er count angitt som ønsket utvalgsstørrelse per søk. Skriptet antar ikke at API-et nødvendigvis returnerer nøyaktig så mange elementer; det faktiske antallet rader avhenger av svaret. Pausen mellom forespørslene er et enkelt tiltak for å styre tempoet, ikke en påstand om en grense eller et krav fra tjenesten. For planlagt produksjonskjøring bør du legge til begrensede forsøk på nytt, overvåking av feil og regler for tillatt forespørselsfrekvens i tråd med vilkårene for abonnementet ditt.

Slik leser du den ferdige tabellen

Hver rad i CSV-filen representerer én unik returnert video som ble funnet med et av søkene. Feltet query viser hvor oppføringen kom fra, observed_at viser tidspunktet for øyeblikksbildet, og video_id brukes til å fjerne duplikater. Beskrivelsen og lenken gjør det mulig for analytikeren å kontrollere konteksten, mens offentlige tellere viser responsen på innsamlingstidspunktet. Bruk egne observasjoner for sammenligning over tid; ikke overskriv historikken for måltall hvis du vil se hvordan de endrer seg.

Tellere for visninger, likerklikk, kommentarer og delinger er øyeblikksbilder av den offentlige statistikken API-et returnerte da forespørselen ble sendt. De kan mangle i enkelte objekter, så en tom CSV-verdi betyr at svaret ikke inneholdt et numerisk felt. Den er forskjellig fra null og må håndteres separat ved beregning av aggregater. Resultatene gjenspeiler dessuten utvalget for bestemte søkeord, region, tidsfilter og forespørselsparametere. De beskriver videoene som faktisk ble returnert, ikke alt innholdet eller hele målgruppen på plattformen.

En tydelig regelbasert tabell kan brukes til en første vurdering av potensiell relevans: treff på formuleringer om problemer, omtale av et verktøy som er i bruk, spørsmål om pris eller sammenligning og konkrete arbeidsscenarioer. Det er bedre å lagre enkeltstående kjennetegn og en begrunnelse enn bare en ugjennomsiktig poengsum. En video med et spørsmål om nøyaktigheten til automatisk transkripsjon kan for eksempel merkes «kontroller: kvalitet omtales», mens en video med generelle innholdsråd kan merkes «lav faglig relevans».

Bruk AI uten å gjøre den til dommer

Når du har samlet et utvalg, kan en modell hjelpe med å merke beskrivelsene etter et forhåndsdefinert skjema: problem, omtalt verktøy, spørsmålets tone og tegn på produktvalg. Send bare feltene modellen trenger, for eksempel beskrivelsesteksten og oppføringens ID, og be om fast JSON med etiketter og en kort begrunnelse. Lagre versjonen av instruksjonen, modellen og resultatet sammen med den opprinnelige raden, slik at du kan gjenta merkingen eller la et menneske kontrollere et utvalg.

En nyttig instruks til klassifikatoren avgrenser konklusjonene til observerbare kjennetegn. Be den avgjøre om teksten inneholder et tydelig problem med undertekster, en forespørsel om verktøyanbefaling eller omtale av en arbeidsflyt. Ta med kategorien «utilstrekkelig kontekst» når datagrunnlaget er tynt. Modellen skal ikke utlede skaperens identitet, kjøpsintensjon eller demografiske kjennetegn fra én offentlig video. Resultatet er en kø med temaer som bør analyseres, ikke en liste over personer som skal kontaktes automatisk.

For å vurdere kvaliteten på merkingen velger du et tilfeldig delutvalg og merker de samme kategoriene manuelt. Sammenlign samsvaret for hver etikett og undersøk feilene: Modellen kan for eksempel tolke sarkasme som en klage eller et opplæringsråd som personlig erfaring. Ofte er det mer nyttig å forbedre ordlisten og instruksjonen enn å gjøre modellen mer komplisert med en gang. For rapportering bør du oppbevare originaltekstene og lenkene i tråd med den vedtatte policyen for lagring og tilgang.

Planlagt automatisering og kvalitetskontroll

Etter en vellykket manuell kjøring kan skriptet kjøres etter en tidsplan med cron, en skytjenestes oppgaveplanlegger eller en orkestrator som n8n. Den praktiske rekkefølgen er den samme: Les inn søkelisten, kall API-et, kontroller statusen, lagre råsvaret, normaliser videoene, skriv nye øyeblikksbilder og lag en rapport. Nøkkelen bør sendes via kjøremiljøets mekanisme for hemmeligheter, ikke legges i en tabell, workflow-tekst eller feilmelding.

Fire kontroller er nyttige i en automatisert jobb. For det første må forespørselen fullføres og svaret være gyldig JSON. For det andre må den overordnede statusen ha forventet verdi. For det tredje må behandleren forstå begge variantene av søkestrukturen og håndtere manglende felter på riktig måte. For det fjerde må antallet nye, unike videoer og antallet feil loggføres. Hvis resultatene plutselig uteblir, bør rapporten vise null treff som en tilstand for kjøringen, i stedet for å blande den sammen med en vanlig, vellykket rapport uten forklaring.

Legg til paginering først etter at du har kontrollert den første siden. Dokumentasjonen oppgir parameteren cursor for søkeendepunktet; lagre den mottatte tokenen og send den videre uendret i neste forespørsel. Begrens maksimalt antall sider per søketerm, og stopp løkken hvis det ikke kommer nye elementer, hvis det ikke finnes en ny markør, eller hvis markøren allerede er behandlet. En slik grense gjør kjøretiden og innsamlingsvolumet håndterlig. En cursor gjør det mulig å be om flere søkeresultater, men garanterer ikke fullstendighet i forhold til alle publiseringer.

En ny kjøring samme dag kan returnere overlappende videoer. Bruk derfor en stabil video-ID som dedupliseringsnøkkel, og lagre historiske øyeblikksbilder som egne oppføringer med observasjonsdato. Hvis du trenger en samlet oversikt, kan du bygge den på toppen av øyeblikksbildene. Da kan du skille mellom en video som ble funnet for første gang, en som dukket opp i flere søk, og en som ble hentet på nytt senere.

Måltall: hva du kan sammenligne på en korrekt måte

For operativ oppfølging er det nyttig å måle antall unike videoer per søk, andelen videoer med utfylt beskrivelse, fordelingen av tilgjengelige reaksjoner og hvor ofte bestemte temaer forekommer. Bruk de samme parameterne og kjøringsperioden når du sammenligner søk. Hvis én kjøring bruker this-week og en annen this-month, kan forskjellen i volum skyldes tidsvinduet. Den kan derfor ikke tolkes som en endring i interesse uten ytterligere analyse.

For å sammenligne måltall for én video over tid trenger du flere øyeblikksbilder og et enhetlig lagringsformat. Behold de opprinnelige verdiene for hver dato slik de ble hentet, og beregn deretter forskjellen mellom observasjonene. Ikke kall forskjellen en økning per døgn hvis det faktiske intervallet mellom kjøringene varierer. På samme måte kan rangering etter likerklikk hjelpe deg med å finne synlige videoer i utvalget, men den måler ikke den kommersielle effektiviteten til skaperen eller produktet.

Den endelige markedsføringsrapporten kan kombinere tre nivåer: eksempler på målgruppens formuleringer med klikkbare lenker, temagrupper av problemer og en kvantitativ beskrivelse av utvalget som ble hentet. Oppgi antall observasjoner, søkene og innsamlingsperioden sammen med hver konklusjon. Det gir lederen kontekst og gjør det mulig for analytikeren å gjenta filtreringen på de samme rådataene.

Vanlige feil og hvordan du unngår dem

Å behandle et tomt felt som null

Hvis statistikk eller informasjon om skaperen mangler, lar koden ovenfor cellen stå tom. Da bevares skillet mellom en ukjent verdi og en målt nullverdi. Definer tydelig hvordan manglende verdier skal håndteres i analysen, og oppgi hvor mange rader som er utelatt fra en bestemt beregning.

Å anta at søket alltid returnerer én liste

I søkeresvar forekommer både aweme_list og nestede elementer av typen search_item_list[].aweme_info. Behandleren kontrollerer begge formatene og ignorerer elementer av feil type. Hvis skjemaet endres, kan de lagrede råsvarene raskt vise hvor dataene nå ligger, og JSON-testfixturer kan brukes til å kontrollere rettelsen før neste kjøring.

Å telle den samme videoen som et separat signal flere ganger

Én video kan samsvare med flere søkeord. I eksemplet tas den bare med én gang i den endelige CSV-filen, og søkefeltet viser det første treffet i den gjeldende rekkefølgen. Hvis det er viktig å bevare alle koblinger mellom video og søk, bør du lagre en egen koblingstabell eller en liste over søk per ID i stedet for å fjerne opphavsinformasjonen.

Å sammenligne utvalg som ikke kan sammenlignes

Søkeord, region, tidsfilter, sortering og kjøringsdato påvirker utvalget. Lagre parameterne sammen med svaret, og endre én faktor om gangen når undersøkelsen sammenligner alternativer. Det gjør det lettere å avgjøre om resultatendringen skyldes søkeresultatene eller endrede eksperimentinnstillinger.

Å fremstille korrelasjon som kjøpsintensjon

Videobeskrivelser og offentlige tellere gir tegn på innhold og publikumsreaksjoner. De viser ikke i seg selv hvem som er klar til å kjøpe, om en person har sett en annonse, eller hva konverteringsraten er. Bruk dem til å utforme hypoteser, undersøke temaer og forberede innhold. Vurder salgseffektivitet med egne kampanjedata som er samordnet med undersøkelsen etter tidspunkt og målgruppe.

Slik kan du utvide pipelinen

Når grunnversjonen fungerer stabilt, kan du legge til en konfigurasjonsfil med søkeliste og kjøreparametere, slik at ordlisten kan endres uten å redigere Python-koden. Neste trinn kan være en tabell med koblinger mellom søk og temaklynger, for eksempel «gjenkjenningskvalitet», «redigeringshastighet» og «eksport». Teamet bør definere slike kategorier og teste dem mot eksempler; API-et returnerer søkeresultater, mens analytikeren bestemmer hvordan de skal tolkes.

I stedet for CSV kan du bruke en relasjonsdatabase med tabeller for kjøringer, videoer og måltallsøyeblikksbilder. En unik indeks på video-ID hindrer duplikater i katalogen, mens øyeblikksbildene gjør det mulig å følge endringer i tilgjengelige tellere. Lagre observasjonstidspunktet i UTC og versjonen av normaliseringen. Hvis logikken for uthenting endres, kan du behandle det arkiverte JSONL-materialet på nytt og sammenligne resultatene.

I n8n kan innsamlingen kjøres etter en tidsplan, mens normaliseringskoden kjøres som en separat Python-tjeneste eller node hvis miljøet støtter de nødvendige operasjonene. Det er ikke nødvendig å integrere en modell i første fase: Sørg først for stabil innsamling, og mål deretter hvor lang tid manuell klassifisering tar og hvilke kategorier som går igjen. AI er nyttig når den reduserer en konkret, gjentakende arbeidsoppgave og etikettene kan kontrolleres.

Hvis arbeidsoppgaven gjelder regelmessig overvåking av en bestemt konto, snarere enn søk etter formuleringer, finnes det et eget endepunkt, /getUserFeed, med parameterne query, max_cursor og count, i den offisielle oversikten. For emneknagger finnes /getHashtagFeed med parameteren cursor. Dette er ulike innsamlingsscenarioer: Velg endepunkt ut fra undersøkelsesspørsmålet, ikke ved å erstatte én utvalgstype med en annen.

Resultat: et reproduserbart utvalg i stedet for en samling bokmerker

Etter kjøringen sitter teamet igjen med to nyttige resultater: et arkiv med råsvar og en tabell over unike videoer med søketerm, observasjonsdato, lenke, beskrivelse og tilgjengelige måltall. Materialet kan brukes til å gruppere spørsmål fra målgruppen manuelt, sende tekstene gjennom kontrollert klassifisering, lage en ukentlig oppsummering og sammenligne nye øyeblikksbilder med tidligere. Koden håndterer forespørselsfeil tydelig, kontrollerer den overordnede statusen, skiller mellom to varianter av søkestrukturen og lar manglende måltall stå som manglende verdier.

For teamet gir dette et mer gjennomsiktig grunnlag for å avgjøre hvilke problemer som bør undersøkes i intervjuer, på en landingsside eller i annonsetekster. Hvis undersøkelsen krever en annen type data, kan du endre søkene eller bruke et annet dokumentert endepunkt. Før du tilpasser pipelinen, bør du kontrollere parametrene i dokumentasjonen for TikTok API; produktinformasjon og inngang til demoen finnes på siden for TikTok Scraper API.

Denne metoden løser den opprinnelige oppgaven: å gjøre TikTok-søk til en reproduserbar undersøkelsesprosess. Skriptet samler bestemte videoer som faktisk returneres, registrerer opphav og øyeblikksbilder, og et menneske eller en etterprøvbar klassifikator omgjør innholdet til hypoteser om etterspørsel. Teamet får et grunnlag for neste beslutning, samtidig som skillet mellom offentlige innholdssignaler og bekreftede salgsresultater opprettholdes.

Mennesker

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

Fortsett å leseSlik arkiverer du TikTok-søkeresultater med Python
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