Якщо застосунку потрібні відомості про конкретне відео в TikTok, зручніше почати з одного запиту й перевірити, які дані він повертає. Потім відповідь можна перевірити й підготувати до зберігання або аналітики.
На сторінці TikTok Scraper API від jsonscraper перелічено маршрути для відео, користувачів, пошуку, хештегів, музики та інших типів даних. Нижче розберемо документований запит getVideoByID і способи безпечно обробити його відповідь. Приклади ґрунтуються на матеріалах постачальника; перед використанням перевірте їх із чинним ключем та актуальною документацією.
Перший запит: отримати відомості про відео
У документації getVideoByID у Postman зазначено метод GET і параметр video_id. У прикладі також показано region і cache_timeout. Базова адреса, опублікована на сторінці сервісу, — https://tiktok.evelode.com.
Приклад запиту через cURL:
export JSONSCRAPER_LICENSE_KEY="ваш_ключ"
curl --get "https://tiktok.evelode.com/getVideoByID" \
--data-urlencode "video_id=7106855913906081070" \
--data-urlencode "license_key=$JSONSCRAPER_LICENSE_KEY" \
--data-urlencode "region=US"
ID у прикладі взято з опублікованого запиту. Замініть його на ID відео, яке потрібно перевірити. Зберігайте ключ у змінній середовища або менеджері секретів: не додавайте його до публічного репозиторію, клієнтського JavaScript чи журналів.
Postman описує region як код регіону й указує US як значення за замовчуванням. Для cache_timeout документація вказує типове вікно кешування тривалістю 3600 секунд; значення 0 вимикає кешування. Якщо цей параметр потрібен вашому сценарію, його можна передати явно:
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"
Це адаптація параметрів, опублікованих для маршруту, а не гарантія, що всі відповіді матимуть однакову структуру або що вимкнення кешування підходить для будь-якого завдання. Перед упровадженням звірте авторизацію та параметри з поточною колекцією: Postman може передавати ключ через налаштований API Key, а наведений вище приклад cURL передає його як параметр URL.
Той самий запит у Python
Нижче наведено варіант зі стандартною бібліотекою Python. Він формує GET-запит, передає параметри й обробляє мережеву помилку, HTTP-помилку та некоректний 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("Задайте змінну 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"HTTP-помилка: {error.code}")
raise
except URLError as error:
print(f"Мережева помилка: {error.reason}")
raise
except json.JSONDecodeError:
raise RuntimeError("Не вдалося розібрати відповідь сервісу як JSON")
print("HTTP-статус:", status_code)
print("Ключі верхнього рівня:", list(payload.keys()))
Це адаптація документованого запиту, а не приклад, який постачальник окремо тестує для Python. Він також не описує всі можливі відповіді сервісу. Оскільки ключ передається в URL, не виводьте повний URL у журнали: він може містити секрет.
Як перевіряти JSON-відповідь
В опублікованій відповіді Postman є поле status і вкладений об’єкт tiktok.aweme_detail із даними про відео та автора. Це приклад структури однієї відповіді, а не гарантія незмінності схеми. Ознайомитися з ним можна в прикладі відповіді для getVideoByID.
Під час читання вкладених полів перевіряйте кожен рівень:
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("У відповіді немає очікуваного об’єкта з даними відео")
else:
video_id = details.get("id")
description = details.get("desc")
author = details.get("author")
print("ID:", video_id)
print("Опис:", description)
print("Автор:", author)
Назви полів узято з опублікованого прикладу. Перевірка через .get() не означає, що поля обов’язкові: вона дає змогу обробити відповідь, у якій немає очікуваних значень. Якщо логіка застосунку залежить від конкретного поля, перевірте його наявність у відповідях для свого сценарію та передбачте поведінку на випадок його відсутності.
Корисно розділяти три перевірки:
- Транспорт: чи отримано HTTP-відповідь і який її статус.
- Формат: чи вдалося розібрати тіло відповіді як JSON.
- Вміст: чи присутні дані, потрібні застосунку.
Успішний розбір JSON ще не означає, що відповідь містить потрібний об’єкт. Для діагностики записуйте технічні помилки й результати перевірок, маскуючи ключі.
Від одного запиту до робочого конвеєра
Для прототипу достатньо надіслати запит і вивести кілька значень. Для регулярної обробки розділіть роботу на етапи:
Запит → перевірка → нормалізація → дедуплікація → зберігання.
- Запит. Отримайте відповідь через документований маршрут і окремо збережіть технічний статус.
- Перевірка. Переконайтеся, що тіло розбирається як JSON і містить дані, необхідні для конкретного завдання.
- Нормалізація. Перенесіть потрібні значення до власної моделі даних. Не копіюйте всю вкладену структуру до бази, якщо застосунку потрібні лише окремі поля.
- Дедуплікація. Виберіть ідентифікатор після перевірки, що він присутній і підходить для вашого завдання. Не припускайте, що він завжди буде доступний у всіх відповідях.
- Зберігання. За потреби зберігайте час запиту й вихідну відповідь окремо від нормалізованого запису. Це допоможе зрозуміти, які зміни внесло застосування.
Це рекомендації щодо побудови застосунку, а не функції, які слід приписувати сервісу. Відокремлення зовнішньої відповіді від внутрішньої моделі також спрощує обробку змін: проблеми можна шукати на етапі перевірки чи нормалізації, а не в усьому коді.
Для повторюваних запитів заздалегідь визначте, коли оновлювати дані та які помилки варто повторювати. Обмежте кількість повторних спроб: нескінченний цикл не допоможе виправити неправильний параметр або проблему з авторизацією.
Кешування та регіон
В описі маршруту getVideoByID параметр cache_timeout задає час кешування в секундах: указано типове значення 3600 секунд, а 0 вимикає кешування. Параметр region описано як код країни; у документації наведено приклад US. Перед упровадженням звірте ці відомості з актуальною документацією запиту в Postman.
Сама наявність налаштування кешу не підтверджує свіжість конкретної відповіді. Якщо свіжість важлива, перевірте результати повторних запитів на даних свого сценарію та виберіть відповідну поведінку.
Які завдання можна дослідити далі
На сторінці продукту перелічено маршрути для пошуку відео й користувачів, хештегів, локацій, музики та трендів. Серед прикладів — searchVideo, searchHashtag, getUserFeed і getTrendingFeed. Це опублікована постачальником карта маршрутів, а не незалежна перевірка кожного з них. Параметри та форму відповіді вивчайте в документації конкретного маршруту: їх не можна автоматично переносити з прикладу getVideoByID.
jsonscraper пропонує використовувати колекцію Postman для налаштування ключа й запуску запитів. Це може бути зручним способом перевірити окремий маршрут до написання інтеграції. Сервіс також перелічує сценарії автоматизації, але сумісність конкретного процесу перевіряйте окремо у своїй конфігурації. Експортуючи колекцію або ділячись нею, переконайтеся, що в ній не залишився чинний ключ.
Що перевірити перед використанням у застосунку
Перш ніж включити запит до регулярного процесу, перевірте його на відео й параметрах, потрібних проєкту:
- Чи виконується запит із чинним ключем і правильним ID.
- Як застосунок обробляє неправильний або відсутній параметр.
- Що відбувається, якщо JSON коректний, але потрібного поля немає.
- Як обробляються HTTP-помилка, мережевий збій і тайм-аут.
- Які поля підходять для ідентифікації та дедуплікації саме у вашому завданні.
- Як змінюється результат повторного запиту за різних значень
cache_timeout, якщо ви використовуєте цей параметр.
Запишіть дату перевірки, параметри без секрету й знеособлений приклад відповіді. Один успішний запит підтверджує лише роботу конкретного сценарію за конкретних умов; він не доводить стабільність усіх маршрутів і відповідей.
Почніть з одного відтворюваного сценарію
Перевірте getVideoByID на потрібному відео, вивчіть фактичний JSON і напишіть обробник, який враховує відсутні поля та помилки. Потім за потреби розширте процес нормалізацією, дедуплікацією та зберіганням.
Документація jsonscraper дає відправну точку — базову адресу й карту маршрутів. У виробничому коді все одно потрібно перевіряти конкретну відповідь, захищати ключ і передбачати випадки, коли дані відрізняються від очікуваної структури.