jsonscraper
Markkinat

TikTok-liidien laadun arviointi julkisten videoiden perusteella: Python-putki vaihe vaiheelta

Kokoa avainsanoihin perustuva otos, tunnista mahdollisia kysyntäsignaaleja ja välitä tarkistettavat tiedot analyytikolle tai tekoälyluokittimelle

Toimituksellinen linjaus Ilmoita virheestä

Myyntitiimi saa eri kanavista saman kysymyksen: mitä ongelmia potentiaaliset asiakkaat yrittävät jo ratkaista? TikTokin manuaalinen haku tuottaa sekalaisen joukon videoita, mutta hakua on vaikea toistaa viikon kuluttua, tuloksia verrata ja selittää, miksi tietty video päätyi raporttiin. Pienessä tutkimuksessa muutaman täsmällisen hakutermin perusteella saatavan julkisen tulosjoukon voi muuttaa toistettavaksi tietovirraksi: tallenna alkuperäinen vastaus, poimi video- ja tekijäkentät, poista kaksoiskappaleet ja arvioi erikseen ostoaikeeseen tai tuotteen valintaan viittaavia merkkejä.

Artikkeli: TikTok-liidien laadun arviointi julkisten videoiden perusteella: Python-putki vaihe vaiheelta
Yhteenveto: Käytännön työnkulku markkinoijalle ja kehittäjälle: etsi yleisön hakutermeillä julkisia TikTok-videoita TikTok Scraper API -rajapinnan kautta, tallenna alkuperäiset vastaukset, poista videotunnisteiden avulla kaksoiskappaleet ja järjestä tulokset selkeiden sääntöjen mukaan. Mukana on Python-komentosarja, joka käsittelee kaksi vastausrakenteen vaihtoehtoa ja välittää API-avaimen turvallisesti.
Kuvan rooli: kansikuva – keskeinen ajatus
Osio: 
Visuaalinen aihe: lähikuva toimituksellisesta kuvasta
© jsonscraper · tekoälyn luoma kuvitus

Alla on toimiva Python-ratkaisu, joka käyttää jsonscraperin TikTok Scraper API -rajapintaa. Se sopii esimerkiksi videoeditointipalvelulle, joka haluaa selvittää, miten sisällöntuottajat kuvailevat tekstityksiin, mallipohjiin ja vientiin liittyviä vaikeuksia. Komentosarja kokoaa haun palauttamat tulokset, minkä jälkeen analyytikko tarkistaa luokittelun ja päättää, mitä ilmaisuja kannattaa käyttää yleisötutkimuksessa. Kyse on julkisen sisällön havainnoinnin järjestämisestä, ei kaikkien ostoaikeisten käyttäjien automaattisesta laskemisesta.

Ongelma: yleisön tarpeet ovat tiedossa, mutta tutkimusta on vaikea toistaa

Manuaalisessa tutkimuksessa asiayhteys katoaa helposti. Yksi työntekijä hakee ilmauksella ”kuinka lisätä tekstitys”, toinen ilmauksella ”automaattinen tekstitys Reelsiin”, ja kolmas tallentaa vain kiinnostavilta vaikuttavat videot. Lopulliseen taulukkoon sekoittuu eri hakutermejä, päivämääriä, mittareita ja valintaperusteita. Kun esihenkilö pyytää toistamaan analyysin tai vertaamaan kahta viikkoa, on palautettava mieleen tulosten lisäksi myös koko hakuprosessi.

Hyödyllisempää on määritellä havaintoyksikkö etukäteen: löydetty video, johon liittyy kuvausteksti, tunniste, linkki, tekijä ja saatavilla olevat julkiset mittarit. Jokaisesta videosta tallennetaan alkuperäinen hakutermi ja keräysaika. Näin kysymyksiin voi vastata erikseen: millaisia ilmaisuja esiintyy, mitä ongelmia mainitaan, mitkä videot saivat enemmän julkisia reaktioita ja mikä muuttui tallennettujen havaintojen välillä.

Otetaan esimerkiksi yritys, joka kehittää tekstitysten ja lyhyiden videoiden luontityökalua. Sen kannattaa löytää julkisia videoita, joissa tekijät puhuvat suoraan manuaalisesta litteroinnista, puheentunnistuksen virheistä, tekstitysten ajoituksesta tai sisällön valmistelusta useille alustoille. Tekijää ei pidä nimetä liidiksi tai ostajaksi yhden videon perusteella: tutkija voi järjestää sisältöä havaittavien merkkien mukaan ja tarkistaa johtopäätökset sen jälkeen käsin.

Ratkaisun rakenne: haku, tallennus, siivous ja arviointi

Putkessa on neljä vaihetta. Ensin tiimi laatii pienen hakutermiluettelon, jossa kukin termi vastaa tiettyä yleisön tehtävää. Sitten komentosarja hakee videoita ja tallentaa koko JSON-vastauksen. Kolmannessa vaiheessa eri vastausrakenteet muunnetaan yhtenäisiksi videoriveiksi ja kaksoiskappaleet poistetaan tunnisteen perusteella. Lopuksi sääntöihin perustuva järjestelmä tai erillinen tekoälyluokitin antaa manuaalista tarkistusta varten prioriteetin ja tallentaa arvion perustelun.

Vaiheiden erottaminen on tärkeää toistettavuuden kannalta. Raakavastaus auttaa tutkimaan kenttien muutoksia tai normalisointivirheitä. Normalisoitua taulukkoa on helppo suodattaa ja visualisoida. Erillisen arviointitaulukon avulla sääntöjä voi muuttaa API-kutsua toistamatta, jos tallennetut tiedot soveltuvat uudelleenkäsittelyyn ja tiimin säilytysaika sallii sen.

Esimerkkihakutermeiksi sopivat ”automaattisen tekstityksen virheet”, ”kuinka lisätä tekstitys nopeasti” ja ”lyhyiden videoiden editointi yrityksille”. Nämä ovat vain esimerkkejä: ilmaukset on mukautettava yleisön kieleen ja tuotteeseen. Hakutermit on säilytettävä tulosten yhteydessä, sillä eri sanoilla haettaessa saadaan erilaisia otoksia.

Mitä TikTok Scraper API tarjoaa

jsonscraperin julkaistussa dokumentaatiossa videoiden hakuun käytetään GET-reittiä /searchVideo perusosoitteessa https://tiktok.evelode.com. Pakollinen parametri on keyword; dokumentoituihin lisäparametreihin kuuluvat count, cursor, region, date_posted, sort_by ja cache_timeout. Esimerkiksi sort_by-parametrin dokumentoidut arvot ovat most-liked, relevance ja date-posted, ja date_posted-parametrin arvoja ovat esimerkiksi this-week ja all-time. Parametrien tarkka luettelo ja reitin kuvaus löytyvät TikTok API -päätepisteiden dokumentaatiosta.

Avain välitetään kyselyparametrina license_key. Alla olevassa esimerkissä se luetaan ympäristömuuttujasta JSONSCRAPER_TIKTOK_LICENSE_KEY, jotta salaisuutta ei tallenneta koodiin eikä tulosteta lokiin. Käytä kirjautumiseen ja parametrien valintaan nykyisten käyttöehtojesi mukaisia asetuksia; TikTok Scraper API -sivu sisältää tuotekuvauksen sekä linkit esittelyyn ja dokumentaatioon.

Hakuvastausta on käsiteltävä todellisen rakenteen, ei oletetun yksittäisen taulukon perusteella. Tarkistetussa esimerkissä API palautti ylätason tilan ja tiktok-objektin; videot voivat olla kentässä tiktok.aweme_list, ja hakutuloksissa esiintyy myös rakenne tiktok.search_item_list[].aweme_info. Tarkista molemmat muodot. Löydetyissä objekteissa voi olla videon tunniste, kuvausteksti, linkki, julkaisuaika, tekijätiedot ja tilastoja, kuten katselukertoja, tykkäyksiä, kommentteja ja jakoja. Mittarit ja kentät on käsiteltävä valinnaisina: koodi ei saa täyttää puuttuvia arvoja keksityillä nollilla.

Haun sivutus käyttää cursor-parametria. Jos komentosarja jatkaa tulosten hakemista, sen on välitettävä saatu arvo seuraavan pyynnön läpinäkymättömänä tunnisteena sen sijaan, että se laskisi arvon itse. Alkuvaiheen prototyypissä on järkevää rajoittaa keruu yhteen sivuun hakutermiä kohden. Näin tarkistaminen on helpompaa ja kuormitus ennakoitavissa; myöhemmin voidaan lisätä sivutus, sivumäärän yläraja ja suoja toistuvaa kursoria vastaan.

Ympäristön valmistelu

Esimerkki käyttää Python 3.8:aa tai uudempaa versiota sekä vakiokirjastoa. Aseta avain ympäristöön esimerkiksi macOS- tai Linux-komentorivillä:

export JSONSCRAPER_TIKTOK_LICENSE_KEY="oma_avaimesi"
python tiktok_demand.py

Windows PowerShellissä muuttujan voi asettaa näin:

$env:JSONSCRAPER_TIKTOK_LICENSE_KEY="oma_avaimesi"
python .\tiktok_demand.py

Komennot tekevät erillisen pyynnön jokaiselle avainsanalle. Ne tarkistavat HTTP-virheet, JSON-vastauksen ja ulkoisen tilan, minkä jälkeen ne poimivat objektit kummastakin vahvistetusta taulukkomuodosta. Raakavastaukset kirjoitetaan rivi riviltä JSONL-tiedostoon: kukin tietue sisältää hakutermin, havaintoajan ja alkuperäisen vastauksen. Toinen osa tuottaa CSV-tiedoston, jossa on yhtenäiset kentät. Avainta ei ole kirjoitettu koodiin, eikä salaisuuden sisältöä tulosteta.

Esimerkki: hakutulosten keruu ja normalisointi

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 = [
    "automaattisen tekstityksen virheet",
    "kuinka lisätä tekstitys nopeasti",
    "lyhyiden videoiden editointi yrityksille",
]


def extract_videos(payload):
    """Tukee hakuvastauksessa havaittuja kahta rakennetta."""
    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 palautti HTTP-tilakoodin {}".format(exc.code)) from exc
    except (URLError, TimeoutError, json.JSONDecodeError) as exc:
        raise RuntimeError("API-pyyntöä ei voitu suorittaa tai jäsentää") from exc

    if payload.get("status") != "ok":
        raise RuntimeError("API-vastauksen tila ei ollut 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("Aseta JSONSCRAPER_TIKTOK_LICENSE_KEY ympäristöön")

    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("Tallennettiin {} yksilöllistä palautettua videota tiedostoon {}".format(len(rows), csv_path))


if __name__ == "__main__":
    main()

Tässä count määrittää pyyntöön sisällytettävän otoskoon hakutermiä kohden. Komentosarja ei oleta, että API palauttaisi täsmälleen tämän määrän: rivien todellinen määrä riippuu vastauksesta. Pyyntöjen välissä oleva tauko on yksinkertainen keino säädellä suoritustahtia, ei väite palvelun rajoituksista tai vaatimuksista. Lisää tuotantokäyttöön rajatut uudelleenyritykset, virheiden seuranta ja sallitun pyyntötiheyden säännöt oman sopimuksesi ehtojen mukaisesti.

Näin luet valmista taulukkoa

CSV-tiedoston kukin rivi edustaa yhtä yksilöllistä palautettua videota, joka löytyi yhdellä hakutermeistä. query-kenttä kertoo, mistä tietue on peräisin, observed_at havaintoajan ja video_id toimii kaksoiskappaleiden poistamisen avaimena. Kuvausteksti ja linkki auttavat analyytikkoa tarkistamaan asiayhteyden, ja julkiset laskurit kertovat reaktioista keruuhetkellä. Käytä pitkäaikaiseen vertailuun erillisiä havaintoja äläkä korvaa mittareiden historiaa, jos haluat nähdä niiden muuttumisen.

Katselukertojen, tykkäysten, kommenttien ja jakojen laskurit ovat API:n kyselyhetkellä palauttama julkisen tilaston tilannekuva. Niitä voi puuttua yksittäisistä objekteista, joten tyhjä CSV-kenttä tarkoittaa, ettei vastauksessa ollut numeerista arvoa. Se on eri asia kuin nolla, ja sitä on käsiteltävä koontilaskelmissa erikseen. Lisäksi tulokset kuvaavat otosta, joka on saatu tietyillä sanoilla, alueella, aikarajauksella ja pyyntöparametreilla. Ne kuvaavat saatuja videoita, eivät alustan sisällön tai yleisön kokonaismäärää.

Alustavaa osuvuuden arviointia varten voi rakentaa läpinäkyvän sääntötaulukon: ongelmaa kuvaavien ilmausten osumat, maininnat käytössä olevista työkaluista, hinta- tai vertailukysymykset sekä konkreettisen käyttötapauksen esiintyminen. Kannattaa tallentaa erilliset piirteet ja arvion perustelu sen sijaan, että kirjaisi vain läpinäkymättömän pistemäärän. Esimerkiksi videon, jossa kysytään automaattisen litteroinnin tarkkuudesta, voi merkitä ”tarkistettava: käsittelee laatua”, ja yleiset sisältövinkit voi luokitella ”vähäinen aihekohtainen osuvuus”.

Tekoälyn liittäminen ilman tuomarin roolia

Kun otosta on kertynyt, malli voi auttaa luokittelemaan kuvaustekstejä ennalta määritellyn rakenteen mukaan: ongelma, mainittu työkalu, kysymyksen sävy ja tuotteen valintaan viittaavan merkin olemassaolo. Välitä mallille vain tarvittavat kentät, esimerkiksi kuvausteksti ja tietueen tunniste, ja pyydä palauttamaan kiinteän rakenteen JSON, jossa on luokat ja lyhyt perustelu. Tallenna ohjeen versio, malli ja tulos alkuperäisen rivin yhteyteen, jotta luokittelu voidaan toistaa tai tarkistaa pistokokein ihmisen toimesta.

Hyvä luokittelupyyntö rajaa päätelmät havaittaviin merkkeihin. Pyydä mallia selvittämään, sisältääkö teksti selkeän tekstitysongelman, työkalusuosituksen pyynnön tai työnkulun käsittelyä. Jos tietoa on vähän, sisällytä luokka ”asiayhteys ei riitä”. Malli ei saa päätellä tekijän henkilöllisyyttä, ostoaikeita tai demografisia ominaisuuksia yhden julkisen videon perusteella. Lopputulos on analysoitavien aiheiden jono, ei luettelo ihmisistä automaattista yhteydenottoa varten.

Luokituksen laadun arviointia varten valitse satunnainen osajoukko ja merkitse samat luokat käsin. Vertaa yhtenevyyttä kunkin tunnisteen osalta ja tutki virheitä: malli voi esimerkiksi tulkita sarkasmin valitukseksi tai opetusvinkin henkilökohtaiseksi kokemukseksi. Hakusanaston ja ohjeen korjaaminen on usein hyödyllisempää kuin mallin monimutkaistaminen heti. Säilytä raporttia varten alkuperäiset tekstit ja linkit hyväksytyn säilytys- ja käyttöoikeuskäytännön mukaisesti.

Ajastettu automaatio ja laadunvalvonta

Kun manuaalinen suoritus toimii, komentosarjan voi ajastaa cronilla, pilvialustan tehtäväajastimella tai esimerkiksi n8n-orkestrointityökalulla. Käytännön työnkulku pysyy samana: lue hakutermiluettelo, kutsu API:a, tarkista tila, tallenna raakavastaus, normalisoi videot, tallenna uudet tilannekuvat ja kokoa raportti. Välitä avain suoritusalustan salaisuuksienhallinnalla, älä taulukossa, työnkulun tekstissä tai virheilmoituksessa.

Automaattisessa tehtävässä kannattaa tehdä neljä tarkistusta. Ensimmäiseksi varmistetaan, että pyyntö onnistui ja vastaus on JSON-muodossa. Toiseksi tarkistetaan, että ulkoinen tila vastaa odotettua arvoa. Kolmanneksi varmistetaan, että käsittelijä ymmärtää molemmat hakurakenteet ja sietää puuttuvia kenttiä. Neljänneksi kirjataan uusien yksilöllisten videoiden määrä ja virheiden määrä. Jos tuloksia ei yhtäkkiä ole, raportin on esitettävä tyhjä otos suorituksen tilana eikä yhdistettävä sitä tavanomaiseen onnistumisraporttiin ilman selitystä.

Lisää sivutus vasta ensimmäisen sivun tarkistamisen jälkeen. Hakureitin dokumentaatio määrittää cursor-parametrin; tallenna saatu tunniste ja välitä se seuraavassa pyynnössä muuttamattomana. Rajoita kunkin hakutermin sivujen enimmäismäärää ja pysäytä silmukka, jos uusia kohteita ei ole, seuraavaa kursoria ei saada tai jo käsitelty kursori toistuu. Näin suoritusaika ja keruun koko pysyvät hallittavina. Kursorin olemassaolo mahdollistaa tulosten hakemisen jatkamisen, mutta se ei takaa kaikkien julkaisujen kattavaa tulosta.

Sama ajo voi palauttaa osittain samoja videoita. Siksi kaksoiskappaleiden poistamiseen tarvitaan vakaa videotunniste, ja havaintohistoria on tallennettava erillisenä päivämäärällä varustettuna tietueena. Jos tarvitaan koontinäkymä, rakenna se tilannekuvien päälle: näin voi erottaa ensimmäistä kertaa löytyneen videon sellaisesta, joka esiintyi useassa haussa tai palautui myöhemmässä haussa uudelleen.

Mittarit: mitä voi verrata luotettavasti

Operatiiviseen seurantaan sopivat esimerkiksi hakutermillä löytyneiden yksilöllisten videoiden määrä, kuvaustekstin sisältävien videoiden osuus, saatavilla olevien reaktioiden jakauma ja tiettyjen aiheiden esiintymistiheys. Pidä parametrit ja ajoajanjakso samoina hakujen vertailussa. Jos yhdessä ajossa käytetään arvoa this-week ja toisessa arvoa this-month, määrien ero voi johtua aikarajauksesta, eikä sitä pidä tulkita kiinnostuksen muutokseksi ilman lisäanalyysia.

Yhden videon mittareiden vertailu ajan kuluessa edellyttää useita tilannekuvia ja yhtenäistä tallennusrakennetta. Säilytä kunkin päivämäärän alkuperäiset arvot sellaisinaan ja laske sen jälkeen havaintojen välinen ero. Älä kutsu eroa vuorokauden kasvuksi, jos todellisten ajojen välit poikkesivat toisistaan. Samoin tykkäysten perusteella järjestäminen auttaa löytämään otoksen näkyvät videot, mutta se ei mittaa tekijän tai tuotteen kaupallista tehokkuutta.

Markkinointitiimin loppuraportissa voi olla kolme tasoa: esimerkkejä yleisön käyttämistä ilmauksista linkkeineen, ongelmien aihepiiriryhmiä ja kerätyn otoksen määrällinen kuvaus. Jokaisen johtopäätöksen yhteydessä on hyvä kertoa havaintojen määrä, käytetyt hakutermit ja keruujakso. Näin esihenkilö saa asiayhteyden ja analyytikko pystyy toistamaan suodatuksen samoilla lähtötiedoilla.

Yleisiä virheitä ja niiden välttäminen

Tyhjän kentän käsitteleminen nollana

Jos tilastot tai tekijätiedot puuttuvat, yllä oleva koodi jättää solun tyhjäksi. Näin tuntematon arvo erottuu mitatusta nollasta. Määritä analyysissä puuttuvien tietojen käsittelysääntö ja ilmoita, kuinka monta riviä jätettiin pois kustakin laskelmasta.

Olettamus, että haku palauttaa aina yhden taulukon

Hakuvastauksessa esiintyy sekä aweme_list että sen sisään sijoittuvia search_item_list[].aweme_info-elementtejä. Käsittelijä tarkistaa molemmat muodot ja ohittaa vääräntyyppiset elementit. Jos skeema muuttuu, tallennetut raakavastaukset auttavat löytämään uuden tietojen sijainnin nopeasti, ja JSON-testitiedostoilla voi varmistaa korjauksen ennen seuraavaa ajoa.

Saman videon laskeminen uudelleen erilliseksi signaaliksi

Yksi video voi vastata useita hakutermejä. Esimerkissä se sisällytetään lopulliseen CSV-tiedostoon vain kerran, ja hakutermikenttä kertoo ensimmäisen osuman nykyisessä järjestyksessä. Jos kaikki video–hakutermi-vastaavuudet on säilytettävä, käytä erillistä linkitystaulukkoa tai tallenna kullekin tunnisteelle hakutermiluettelo sen sijaan, että poistat tiedon tietueen alkuperästä.

Vertailukelvottomien otosten vertaaminen

Hakusana, alue, aikarajaus, lajittelu ja ajopäivä vaikuttavat otokseen. Tallenna parametrit vastauksen kanssa ja muuta vain yhtä tekijää kerrallaan, kun tutkimuksessa vertaillaan vaihtoehtoja. Näin voidaan selvittää, johtuuko tuloksen muutos hakunäkymän toiminnasta vai kokeen asetusten muuttamisesta.

Korrelaation esittäminen ostoaikeena

Videon kuvausteksti ja julkiset laskurit antavat viitteitä sisällöstä ja yleisön reaktioista. Ne eivät yksinään kerro, kuka on valmis ostamaan, onko henkilö nähnyt mainoksen tai mikä konversio on. Käytä tietoja hypoteesien muodostamiseen, aiheiden tarkistamiseen ja sisällön valmisteluun. Arvioi myynnin tehokkuutta omien kampanjatietojen avulla ja sovita ne tähän tutkimukseen ajan ja yleisön osalta.

Näin laajennat putkea

Kun perusversio toimii vakaasti, voit lisätä asetustiedoston hakutermien ja ajoasetusten luettelolle, jolloin sanastoa voi muuttaa Python-koodia muokkaamatta. Seuraava vaihe on hakutermien ja aiheklustereiden vastaavuustaulukko, jossa voi olla esimerkiksi luokat ”tunnistuksen laatu”, ”editoinnin nopeus” ja ”vienti”. Tiimin on määriteltävä nämä kategoriat ja tarkistettava ne esimerkkien avulla; API palauttaa hakutietoja, mutta tutkija määrittää niiden merkitysrakenteen.

CSV:n sijasta tiedot voi tallentaa relaatiotietokantaan, jossa on ajokerrat, videot ja mittarien tilannekuvat omissa tauluissaan. Videotunnisteen yksilöllinen indeksi ehkäisee kaksoiskappaleet luettelossa, ja tilannekuvien avulla voi seurata saatavilla olevien laskureiden muuttumista. Tallenna havaintoaika UTC-aikavyöhykkeessä ja normalisointiversio. Poimintalogiikan muuttuessa arkistoidun JSONL-aineiston voi käsitellä uudelleen ja tuloksia verrata.

n8n:ssä keruun voi ajastaa, ja normalisointikoodin voi suorittaa erillisessä Python-palvelussa tai solmussa, jos valittu ympäristö tukee tarvittavia toimintoja. Aluksi mallia ei tarvitse lisätä: varmista ensin keruun vakaus, mittaa sitten manuaaliseen luokitteluun kuluva aika ja selvitä, mitkä kategoriat toistuvat. Tekoälystä on hyötyä, kun se vähentää tiettyä toistuvaa työtä ja sen luokitukset voidaan tarkistaa.

Jos tutkimuskysymys koskee hakutermien sijasta tietyn tilin säännöllistä seurantaa, virallisessa päätepistedokumentaatiossa on erillinen reitti /getUserFeed parametreineen query, max_cursor ja count. Hashtagin syötteelle on reitti /getHashtagFeed ja parametri cursor. Nämä ovat eri keruutapoja: päätepiste on valittava tutkimuskysymyksen perusteella, eikä yhtä otostyyppiä pidä korvata toisella.

Tulos: toistettava otos kirjanmerkkikokoelman sijaan

Ajossa tiimi saa kaksi hyödyllistä tuotosta: alkuperäisten vastausten arkiston ja taulukon yksilöllisistä videoista, jossa on hakutermi, havaintopäivä, linkki, kuvausteksti ja saatavilla olevat mittarit. Niiden pohjalta voi ryhmitellä yleisön kysymyksiä käsin, antaa tekstejä valvottuun luokitteluun, laatia viikkokoosteen ja verrata uusia tilannekuvia aiempiin. Koodi käsittelee pyynnön virheet näkyvästi, tarkistaa ulkoisen tilan, erottaa kaksi hakurakenteen muotoa ja tallentaa puuttuvat mittarit puuttuvina arvoina.

Käytännön hyöty tiimille on läpinäkyvämpi päätös siitä, mitä ongelmia kannattaa selvittää haastatteluissa, laskeutumissivulla tai mainosviestissä. Jos tutkimus edellyttää muunlaisia tietoja, muuta hakutermejä tai käytä siihen sopivaa dokumentoitua reittiä. Tarkista parametrit ennen putken muokkaamista TikTok API -dokumentaatiosta; tuotetiedot ja esittely löytyvät TikTok Scraper API -sivulta.

Näin ratkaistaan alkuperäinen tehtävä: TikTok-haku muutetaan toistettavaksi tutkimusprosessiksi. Komentosarja kerää konkreettiset palautetut videot ja tallentaa niiden alkuperän ja tilannekuvat, minkä jälkeen ihminen tai tarkistettavissa oleva luokitin muuntaa sisällön kysyntää koskeviksi hypoteeseiksi. Tiimi saa pohjan seuraavalle päätökselle ja säilyttää samalla rajan julkisten sisältömerkkien ja vahvistettujen myyntitulosten välillä.

Ihmiset

Tämän artikkelin luettelossa ei ole vielä ihmisiä.

Jatka lukemistaTikTok-hakutulosten arkistointi Pythonilla
Lue seuraava artikkeli

Muuta lukemasi toimivaksi integraatioksi

Tutustu jsonscraperin sosiaalisen datan rajapintoihin, testaa pyyntöjä ja rakenna seuraava työnkulkusi.

Tutki API:t