jsonscraper
Marknader
Tillbaka till journalen

Hitta TikTok-videor med växande engagemang utan att jämföra råa visningar

Samla in mätvärden för samma upptäckta videor med jämna mellanrum och beräkna ökningen separat från den totala populariteten

Redaktionella riktlinjer Rapportera ett fel

För att ta reda på om en viss TikTok-video får mer respons jämför du dess offentliga mätvärden med en tidigare ögonblicksbild av samma video. En enstaka sökning visar de visningar och reaktioner som redan har samlats in; genom att samla in samma upptäckta videor igen kan du se förändringen mellan två körningar. Här följer en enkel fungerande Python-pipeline: sök, spara mätvärden i CSV och beräkna differensen.

Vad mäter den här bevakningen?

Skriptet passar en marknadsförare, analytiker eller utvecklare som behöver en lista över videor som hittats inom ett ämne och en verifierbar historik över observationerna. Ett team kan till exempel regelbundet bevaka videor om en produktlansering eller en viss sökfråga från målgruppen och ta reda på vilka videor som fått fler visningar, gilla-markeringar, kommentarer eller delningar sedan den föregående kontrollen.

Artikel: Hitta TikTok-videor med växande engagemang utan att jämföra råa visningar
Sammanfattning: En stegvis Python-pipeline samlar in TikTok-videor som hittats med en sökning, sparar visnings- och reaktionsmått i CSV och beräknar förändringen för samma videor vid nästa körning.
Bildens roll: omslagsbild – den centrala idén
Avsnitt: Vad mäter den här bevakningen?
Visuellt motiv: Redaktionellt foto: utskrivna ark med anonymiserade rader av kortvideo-ID:n och två tidsstämplar
Jämförelse av två ögonblicksbilder av mätvärden för samma video, identifierad med sitt ID.© jsonscraper · skapad med AI

Den centrala jämförelseenheten är videon, identifierad med aweme_id. För varje post sparas insamlingstid, ID, beskrivning, URL, upphovspersonens namn och tillgängliga räknare. Därefter matchas två ögonblicksbilder med hjälp av ID:t. På så sätt blandas inte ökningen av visningar för en video ihop med det totala antalet visningar för en annan.

Resultatet beskriver bara videor som returnerats av en viss sökfråga vid en viss körning. Sökresultaten kan förändras och enskilda statistikfält kan saknas. Därför är det användbart att spara själva ögonblicksbilderna och insamlingstiden, och tolka rapporten som en observation av redan upptäckta videor – inte som en fullständig katalog över publiceringar inom ämnet.

Hur fungerar insamlingen via API:et?

Dokumentationen för TikTok Scraper API beskriver GET-rutten /searchVideo. Sökningen kräver strängen keyword; bland de valfria parametrarna finns count, region, sort_by och date_posted. API-nyckeln skickas som license_key. Referensdokumentationen anger https://tiktok.evelode.com som basadress.

Svaret innehåller en yttre status och ett objekt med namnet tiktok. I sökresultaten kan videor finnas i tiktok.aweme_list eller inuti tiktok.search_item_list[].aweme_info. Hanteraren nedan stöder båda formerna. Mätvärdena hämtas från statistics, bland annat play_count, digg_count, comment_count och share_count; saknade värden sparas som tomma i stället för att ersättas med noll.

Ruttbeskrivningen listar cursor för att bläddra genom sökresultaten och anger tillåtna alternativ för date_posted och sort_by. För en enkel, upprepningsbar bevakning räcker det till en början att hämta en sida med resultat och spara svaret; lägg bara till paginering vid behov. Om paginering behövs skickar du den mottagna markören vidare utan att ändra den.

Fungerande Python-exempel

Installera requests-biblioteket med kommandot python -m pip install requests och ange nyckeln i miljövariabeln JSONSCRAPER_TIKTOK_LICENSE_KEY. Skriptet tar en sökfras som argument och lägger till de insamlade ögonblicksbilderna i en CSV-fil. Koden fungerar med Python 3.8 och senare.

import csv
import os
import sys
from datetime import datetime, timezone
from pathlib import Path

import requests

BASE_URL = "https://tiktok.evelode.com/searchVideo"
CSV_PATH = Path("tiktok_video_snapshots.csv")
FIELDS = [
    "collected_at", "aweme_id", "author", "description", "share_url",
    "play_count", "digg_count", "comment_count", "share_count",
]


def extract_items(payload):
    """Support the observed search response layouts."""
    data = payload.get("tiktok") or {}
    items = data.get("aweme_list") or []
    if items:
        return items

    found = []
    for result in data.get("search_item_list") or []:
        info = result.get("aweme_info")
        if info:
            found.append(info)
    return found


def main():
    key = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
    if not key:
        raise SystemExit("Set JSONSCRAPER_TIKTOK_LICENSE_KEY first")
    if len(sys.argv) < 2:
        raise SystemExit('Usage: python collect.py "search phrase"')

    params = {
        "license_key": key,
        "keyword": sys.argv[1],
        "count": 20,
        "region": "US",
        "sort_by": "relevance",
        "date_posted": "this-week",
    }
    response = requests.get(BASE_URL, params=params, timeout=30)
    response.raise_for_status()
    payload = response.json()

    if payload.get("status") != "ok":
        raise RuntimeError("API returned a non-ok outer status")
    data = payload.get("tiktok") or {}
    items = extract_items(payload)
    collected_at = datetime.now(timezone.utc).isoformat()

    rows = []
    for item in items:
        stats = item.get("statistics") or {}
        author = item.get("author") or {}
        rows.append({
            "collected_at": collected_at,
            "aweme_id": item.get("aweme_id"),
            "author": author.get("unique_id") or author.get("nickname"),
            "description": item.get("desc"),
            "share_url": item.get("share_url"),
            "play_count": stats.get("play_count"),
            "digg_count": stats.get("digg_count"),
            "comment_count": stats.get("comment_count"),
            "share_count": stats.get("share_count"),
        })

    write_header = not CSV_PATH.exists()
    with CSV_PATH.open("a", newline="", encoding="utf-8") as file:
        writer = csv.DictWriter(file, fieldnames=FIELDS)
        if write_header:
            writer.writeheader()
        writer.writerows(rows)

    print("Saved", len(rows), "returned videos")
    print("has_more:", data.get("has_more"), "cursor:", data.get("cursor"))


if __name__ == "__main__":
    main()

Kör exempelvis python collect.py "produktrelaterad sökning". Biblioteket lägger till raden med nyckeln i URL-parametrarna; skriptet skriver inte ut den i terminalen. Spara inte hela förfrågnings-URL:en i offentligt tillgängliga loggar, eftersom den innehåller nyckeln. Använd en hemlighetshanterare i produktionssystem och begränsa åtkomsten till filen med ögonblicksbilder.

Hur beräknar man ökningen mellan körningar?

Skriptet skriver avsiktligt alla observationer i stället för att skriva över tidigare värden. Nästa lilla analysverktyg matchar de två senaste ögonblicksbilderna för varje video och skriver ut skillnaden i räknarna. Om ett mätvärde saknas i någon av de två posterna markeras resultatet som otillgängligt.

Artikel: Hitta TikTok-videor med växande engagemang utan att jämföra råa visningar
Sammanfattning: En stegvis Python-pipeline samlar in TikTok-videor som hittats med en sökning, sparar visnings- och reaktionsmått i CSV och beräknar förändringen för samma videor vid nästa körning.
Bildens roll: stödjande illustration 2 – en annan specifik aspekt
Avsnitt: Hur beräknar man ökningen mellan körningar?
Visuellt motiv: Infografik på ryska som visar arbetsflödet: TikTok-sökning med nyckelord → returnerad video
Dataflödet från sökresultat till jämförelse av två sparade ögonblicksbilder.© jsonscraper · AI-genererad illustration
import csv
from collections import defaultdict
from pathlib import Path

rows_by_video = defaultdict(list)
with Path("tiktok_video_snapshots.csv").open(encoding="utf-8", newline="") as file:
    for row in csv.DictReader(file):
        if row["aweme_id"]:
            rows_by_video[row["aweme_id"]].append(row)

metrics = ("play_count", "digg_count", "comment_count", "share_count")
for video_id, snapshots in rows_by_video.items():
    snapshots.sort(key=lambda row: row["collected_at"])
    if len(snapshots) < 2:
        continue
    previous, latest = snapshots[-2], snapshots[-1]
    changes = {}
    for metric in metrics:
        old, new = previous[metric], latest[metric]
        changes[metric] = int(new) - int(old) if old and new else None
    print(video_id, changes, latest["share_url"])

Differensen är skillnaden mellan två sparade värden, inte en tillväxttakt med garanterad periodicitet. Om körningarna sker med olika intervall kan du lägga till en beräkning av tiden mellan collected_at och jämföra ökningen under den faktiska tidsperioden. Räknarna kan förändras mellan observationerna; de sparade tidsstämplarna visar exakt när de använda värdena hämtades.

Hur automatiserar och tolkar man rapporten?

För en daglig rapport kan du schemalägga insamlingen på en server eller i CI, ange en fast lista med sökfraser och spara CSV-filen eller läsa in raderna i en databas. Vid upprepade körningar kan du deduplicera poster inom en och samma ögonblicksbild med aweme_id om resultaten innehåller dubbletter. För historikens skull kan du spara ursprunglig JSON tillsammans med normaliserade kolumner; det gör det enklare att bearbeta materialet på nytt om rapportens schema ändras.

I tabellen är det praktiskt att visa videons ID och URL, upphovsperson, beskrivning, insamlingstid och differenser för varje mätvärde. Sortering efter ökning av visningar besvarar frågan om spridning, medan ökningar av kommentarer eller delningar kan hjälpa till att identifiera en annan typ av respons. Slå inte ihop dessa mätvärden till ett enda betyg utan en uttrycklig regel: varje räknare betyder något eget.

En schemaläggare kan skicka rapporten till e-post, ett kalkylark eller en intern kanal, men det steget sköts av din infrastruktur – exemplet ovan samlar bara in och analyserar data. För en mer fullständig insamling kan du gå igenom resultatsidorna, spara markören och avsluta loopen när API:et anger att det inte finns fler sidor. Sökmarkören är ett ogenomskinligt värde i svaret; räkna inte ut den själv. Även genomgång av alla sidor beskriver de resultat som returnerats och garanterar inte en fullständig lista över alla matchande publiceringar.

Det förväntade praktiska resultatet är en reproducerbar observationslogg och en tabell över förändringar för upptäckta videor. Det hjälper dig att se vilka publiceringars offentliga räknare som ändrats mellan kontrollerna och att skicka specifika länkar till en specialist för innehållsanalys. Produktinformation och API-åtkomst finns på sidan TikTok Scraper API.

Vad bör kontrolleras före schemalagd körning?

  • Kontrollera att den yttre svarsstatusen är ok innan du behandlar tiktok.
  • Kontrollera båda varianterna av strukturen för sökresultat; om listan saknas ska insamlingen bli tom, inte orsaka ett fel.
  • Spara ursprungsvärden och tidsstämplar. Ett tomt mätvärde ska förbli tomt.
  • Använd samma sökfrågor och parametrar för att göra jämförelsen mellan ögonblicksbilder tydligare; dokumentera ändringar av dessa inställningar tillsammans med rapporten.
  • Håll koll på körningsfrekvens, HTTP-fel och historikens storlek, och följ tillämpliga plattformsregler och krav för databehandling.

Sammanfattningsvis räcker det för att få ett observerbart resultat att upprepa samma sökning, identifiera videor med aweme_id och jämföra de sparade mätvärdena över tid. Metoden besvarar en avgränsad praktisk fråga – vilka av de redan upptäckta videorna som fått ändrade offentliga räknare mellan två kontroller – och gör det möjligt att granska och bearbeta ursprungsdata vidare.

Personer

Inga personer listade för denna artikel ännu.

Fortsätt läsaSå analyserar du TikTok-skapares ämnen: ett praktiskt Python-arbetsflöde
Läs nästa artikel

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