Jeśli aplikacja potrzebuje informacji o konkretnym filmie z TikToka, najwygodniej zacząć od jednego żądania i sprawdzić, jakie dane zwraca. Następnie można zwalidować odpowiedź i przygotować ją do przechowywania lub analizy.
Na stronie TikTok Scraper API od jsonscraper wymieniono trasy dotyczące filmów, użytkowników, wyszukiwania, hashtagów, muzyki i innych typów danych. Poniżej omówimy udokumentowane żądanie getVideoByID oraz sposoby bezpiecznego przetwarzania jego odpowiedzi. Przykłady opierają się na materiałach dostawcy; przed użyciem sprawdź je z aktywnym kluczem i aktualną dokumentacją.
Pierwsze żądanie: pobieranie informacji o filmie
W dokumentacji getVideoByID w Postmanie wskazano metodę GET i parametr video_id. Przykład zawiera także region i cache_timeout. Podstawowy adres opublikowany na stronie usługi to https://tiktok.evelode.com.
Przykładowe żądanie za pomocą cURL:
export JSONSCRAPER_LICENSE_KEY="twój_klucz"
curl --get "https://tiktok.evelode.com/getVideoByID" \
--data-urlencode "video_id=7106855913906081070" \
--data-urlencode "license_key=$JSONSCRAPER_LICENSE_KEY" \
--data-urlencode "region=US"
ID w przykładzie pochodzi z opublikowanego żądania. Zastąp je ID filmu, który chcesz sprawdzić. Przechowuj klucz w zmiennej środowiskowej lub menedżerze sekretów: nie dodawaj go do publicznego repozytorium, JavaScriptu po stronie klienta ani logów.
Postman opisuje region jako kod regionu i podaje US jako wartość domyślną. W przypadku cache_timeout dokumentacja wskazuje domyślne okno buforowania wynoszące 3600 sekund; wartość 0 wyłącza buforowanie. Jeśli ten parametr jest potrzebny w Twoim scenariuszu, możesz przekazać go jawnie:
curl --get "https://tiktok.evelode.com/getVideoByID" \
--data-urlencode "video_id=7106855913906081070" \
--data-urlencode "license_key=$JSONSCRAPER_LICENSE_KEY" \
--data-urlencode "region=US" \
--data-urlencode "cache_timeout=0"
To adaptacja parametrów opublikowanych dla tej trasy, a nie gwarancja, że wszystkie odpowiedzi będą miały taką samą strukturę ani że wyłączenie buforowania będzie odpowiednie do każdego zadania. Przed wdrożeniem sprawdź uwierzytelnianie i parametry w aktualnej kolekcji: Postman może przekazywać klucz za pomocą skonfigurowanego API Key, natomiast powyższy przykład cURL pokazuje go jako parametr URL.
To samo żądanie w Pythonie
Poniżej znajduje się przykład wykorzystujący standardową bibliotekę Pythona. Tworzy żądanie GET, przekazuje parametry i obsługuje błąd sieci, błąd HTTP oraz niepoprawny JSON.
import json
import os
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen
base_url = "https://tiktok.evelode.com/getVideoByID"
license_key = os.environ.get("JSONSCRAPER_LICENSE_KEY")
if not license_key:
raise RuntimeError("Ustaw zmienną JSONSCRAPER_LICENSE_KEY")
params = {
"video_id": "7106855913906081070",
"license_key": license_key,
"region": "US",
}
url = f"{base_url}?{urlencode(params)}"
request = Request(url, method="GET")
try:
with urlopen(request, timeout=30) as response:
status_code = response.status
payload = json.loads(response.read().decode("utf-8"))
except HTTPError as error:
print(f"Błąd HTTP: {error.code}")
raise
except URLError as error:
print(f"Błąd sieci: {error.reason}")
raise
except json.JSONDecodeError:
raise RuntimeError("Nie udało się sparsować odpowiedzi usługi jako JSON")
print("Status HTTP:", status_code)
print("Klucze najwyższego poziomu:", list(payload.keys()))
To adaptacja udokumentowanego żądania, a nie przykład osobno przetestowany przez dostawcę dla Pythona. Nie opisuje też wszystkich możliwych odpowiedzi usługi. Ponieważ klucz jest przekazywany w adresie URL, nie zapisuj pełnego URL w logach: może zawierać sekret.
Jak sprawdzać odpowiedź JSON
W opublikowanej odpowiedzi Postmana znajduje się pole status oraz zagnieżdżony obiekt tiktok.aweme_detail z danymi filmu i autora. To przykład struktury pojedynczej odpowiedzi, a nie gwarancja niezmiennego schematu. Możesz zapoznać się z nim w przykładzie odpowiedzi dla getVideoByID.
Podczas odczytu zagnieżdżonych pól sprawdzaj każdy poziom:
def get_video_details(payload):
tiktok = payload.get("tiktok")
if not isinstance(tiktok, dict):
return None
details = tiktok.get("aweme_detail")
if not isinstance(details, dict):
return None
return details
details = get_video_details(payload)
if details is None:
print("Odpowiedź nie zawiera oczekiwanego obiektu z danymi filmu")
else:
video_id = details.get("id")
description = details.get("desc")
author = details.get("author")
print("ID:", video_id)
print("Opis:", description)
print("Autor:", author)
Nazwy pól pochodzą z opublikowanego przykładu. Użycie .get() nie oznacza, że pola są wymagane: pozwala obsłużyć odpowiedź, w której brakuje oczekiwanych wartości. Jeśli logika aplikacji zależy od konkretnego pola, sprawdź jego obecność w odpowiedziach dotyczących Twojego scenariusza i przygotuj obsługę jego braku.
Warto rozdzielić trzy rodzaje sprawdzeń:
- Transport: czy otrzymano odpowiedź HTTP i jaki jest jej status.
- Format: czy treść udało się sparsować jako JSON.
- Zawartość: czy znajdują się w niej dane potrzebne aplikacji.
Pomyślne sparsowanie JSON nie oznacza jeszcze, że odpowiedź zawiera potrzebny obiekt. Na potrzeby diagnostyki zapisuj błędy techniczne i wyniki sprawdzeń, maskując klucze.
Od jednego żądania do działającego potoku
Do prototypu wystarczy wysłać żądanie i wyświetlić kilka wartości. W przypadku regularnego przetwarzania podziel pracę na etapy:
Żądanie → weryfikacja → normalizacja → deduplikacja → przechowywanie.
- Żądanie. Pobierz odpowiedź za pomocą udokumentowanej trasy i osobno zapisz status techniczny.
- Weryfikacja. Upewnij się, że treść można sparsować jako JSON i że zawiera dane potrzebne do konkretnego zadania.
- Normalizacja. Przenieś potrzebne wartości do własnego modelu danych. Nie zapisuj całej zagnieżdżonej struktury w bazie, jeśli aplikacja potrzebuje tylko wybranych pól.
- Deduplikacja. Wybierz identyfikator po sprawdzeniu, czy jest obecny i odpowiedni do Twojego zadania. Nie zakładaj, że zawsze będzie dostępny we wszystkich odpowiedziach.
- Przechowywanie. W razie potrzeby zapisuj czas żądania i oryginalną odpowiedź oddzielnie od znormalizowanego rekordu. Ułatwi to ustalenie, jakie zmiany wprowadziła aplikacja.
Są to zalecenia dotyczące projektowania aplikacji, a nie funkcje, które należy przypisywać usłudze. Oddzielenie zewnętrznej odpowiedzi od wewnętrznego modelu ułatwia też obsługę zmian: problemów można szukać na etapie weryfikacji lub normalizacji, a nie w całym kodzie.
W przypadku powtarzających się żądań z góry ustal, kiedy odświeżać dane i które błędy warto ponawiać. Ogranicz liczbę prób: nieskończona pętla nie naprawi nieprawidłowego parametru ani problemu z uwierzytelnianiem.
Buforowanie i region
W opisie trasy getVideoByID parametr cache_timeout określa czas buforowania w sekundach: podano wartość domyślną 3600 sekund, a 0 wyłącza buforowanie. Parametr region opisano jako kod kraju; w dokumentacji podano przykład US. Przed wdrożeniem sprawdź te informacje w aktualnej dokumentacji żądania w Postmanie.
Sama obecność ustawienia buforowania nie potwierdza aktualności konkretnej odpowiedzi. Jeśli aktualność danych jest istotna, sprawdź wyniki powtarzanych żądań w swoim scenariuszu i wybierz odpowiedni sposób działania.
Jakie zadania warto zbadać dalej
Na stronie produktu wymieniono trasy do wyszukiwania filmów i użytkowników, hashtagów, lokalizacji, muzyki oraz trendów. Przykłady obejmują searchVideo, searchHashtag, getUserFeed i getTrendingFeed. To opublikowany przez dostawcę wykaz tras, a nie niezależna weryfikacja każdej z nich. Parametry i strukturę odpowiedzi sprawdzaj w dokumentacji konkretnej trasy: nie można automatycznie przenosić do niej przykładu getVideoByID.
jsonscraper proponuje korzystanie z kolekcji Postman do konfiguracji klucza i uruchamiania żądań. Może to być wygodny sposób sprawdzenia pojedynczej trasy przed napisaniem integracji. Usługa wymienia również scenariusze automatyzacji, ale zgodność konkretnego procesu należy sprawdzić osobno w swojej konfiguracji. Eksportując kolekcję lub udostępniając ją, upewnij się, że nie pozostał w niej aktywny klucz.
Co sprawdzić przed użyciem w aplikacji
Zanim włączysz żądanie do regularnego procesu, przetestuj je na filmach i parametrach potrzebnych w projekcie:
- Czy żądanie działa z aktywnym kluczem i poprawnym ID.
- Jak aplikacja obsługuje nieprawidłowy lub brakujący parametr.
- Co się dzieje, gdy JSON jest poprawny, ale brakuje potrzebnego pola.
- Jak obsługiwane są błąd HTTP, awaria sieci i przekroczenie limitu czasu.
- Które pola nadają się do identyfikacji i deduplikacji w Twoim konkretnym zadaniu.
- Jak zmienia się wynik ponownego żądania przy różnych wartościach
cache_timeout, jeśli używasz tego parametru.
Zapisz datę testu, parametry bez sekretu i zanonimizowany przykład odpowiedzi. Jedno udane żądanie potwierdza działanie tylko konkretnego scenariusza w konkretnych warunkach; nie dowodzi stabilności wszystkich tras i odpowiedzi.
Zacznij od jednego powtarzalnego scenariusza
Przetestuj getVideoByID dla wybranego filmu, sprawdź rzeczywisty JSON i napisz obsługę uwzględniającą brakujące pola oraz błędy. Następnie, jeśli będzie to potrzebne, rozbuduj proces o normalizację, deduplikację i przechowywanie danych.
Dokumentacja jsonscraper stanowi punkt wyjścia — zawiera podstawowy adres i wykaz tras. W kodzie produkcyjnym nadal trzeba sprawdzać konkretną odpowiedź, chronić klucz i przewidywać sytuacje, w których dane odbiegają od oczekiwanej struktury.