Если приложению нужны сведения о конкретном 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 даёт отправную точку — базовый адрес и карту маршрутов. В производственном коде всё равно нужно проверять конкретный ответ, защищать ключ и предусматривать случаи, когда данные отличаются от ожидаемой структуры.