Если покупатели задают один и тот же вопрос в нескольких TikTok-видео, команде поддержки полезно получить список исходных роликов и формулировок, которые можно проверить. Начать можно со сбора результатов поиска по нескольким запросам, объединения по ID видео и передачи выборки на ручную разметку.
Ниже — Python-сценарий, который собирает возвращённые результаты и создаёт CSV со ссылками, описаниями роликов и поисковыми фразами, по которым найден каждый ролик. Он помогает увидеть пересечения между поисками; сам по себе он не определяет семантически похожие вопросы. Это решение принимает специалист или отдельный классификатор с последующей проверкой.
Какой вопрос должен решить сбор
Пусть команда продаёт термокружку и хочет понять, о чём спрашивают в публичных роликах. Запрос «термокружка протекает» может вернуть видео с жалобами, обзорами и инструкциями. Запрос «как мыть термокружку» даст другую выборку. Несколько выражений формируют рабочий набор примеров для проверки поддержки и контент-плана.

Результат сценария — таблица, где у записи есть ID публикации, описание, ссылка и список поисковых фраз, по которым она встретилась. Совпадение ролика в нескольких выдачах показывает пересечение поисковых результатов, но ещё не доказывает, что в ролике задан повторяющийся вопрос. Чтобы составить очередь вопросов, откройте ссылки, проверьте контекст и присвойте подтверждённым формулировкам тему.
Такой процесс полезен разработчику, который автоматизирует сбор, и аналитику, которому нужен воспроизводимый набор для разбора. Связь с исходным роликом позволяет проверить вывод до того, как менять инструкцию или готовить новый материал.
Какие данные возвращает поиск
Маршрут /searchVideo и его параметры перечислены в справочнике TikTok API. Обязателен keyword; среди дополнительных параметров указаны count, cursor, region, date_posted, sort_by и cache_timeout. Запрос аутентифицируется параметром license_key. В примере ниже используются фраза и размер страницы.
В проверенной форме ответа есть верхнеуровневый status и объект tiktok. У элементов могут быть ID, описание, ссылка, сведения об авторе и статистика, включая просмотры и комментарии. Отдельные поля могут отсутствовать: поэтому в CSV такие значения остаются пустыми, а не превращаются в ноль.
У поискового ответа поддержаны две структуры: элементы могут находиться в aweme_list или внутри search_item_list[].aweme_info. Нормализатор обрабатывает оба варианта. Код также проверяет наличие объекта tiktok, чтобы не принять неожиданную форму ответа за успешную пустую выдачу.
Готовый сборщик на Python
Пример совместим с Python 3.8+ и библиотекой requests. Он делает по одному запросу на каждую фразу, проверяет HTTP-ответ и статус API, объединяет записи по ID, сохраняет совпавшие поисковые фразы и записывает CSV. Ключ читается из переменной окружения и не выводится.

import csv
import os
import sys
import requests
BASE_URL = "https://tiktok.evelode.com/searchVideo"
KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
QUERIES = [
"термокружка протекает",
"как мыть термокружку",
"термокружка не держит тепло",
]
if not KEY:
sys.exit("Задайте JSONSCRAPER_TIKTOK_LICENSE_KEY")
def extract_items(payload):
data = payload.get("tiktok")
if not isinstance(data, dict):
raise RuntimeError("В ответе отсутствует объект tiktok")
items = list(data.get("aweme_list") or [])
for entry in data.get("search_item_list") or []:
video = entry.get("aweme_info") if isinstance(entry, dict) else None
if isinstance(video, dict):
items.append(video)
return items
rows = {}
for query in QUERIES:
response = requests.get(
BASE_URL,
params={"license_key": KEY, "keyword": query, "count": 20},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
raise RuntimeError("API вернул статус, отличный от ok")
for item in extract_items(payload):
video_id = item.get("aweme_id")
if not video_id:
continue
stats = item.get("statistics") or {}
author = item.get("author") or {}
row = rows.setdefault(video_id, {
"video_id": video_id,
"description": item.get("desc"),
"share_url": item.get("share_url"),
"author": author.get("nickname"),
"play_count": stats.get("play_count"),
"comment_count": stats.get("comment_count"),
"matched_queries": set(),
})
row["matched_queries"].add(query)
fields = ["video_id", "description", "share_url", "author",
"play_count", "comment_count", "matched_queries"]
with open("tiktok_questions.csv", "w", newline="", encoding="utf-8-sig") as file:
writer = csv.DictWriter(file, fieldnames=fields)
writer.writeheader()
for row in rows.values():
output = dict(row)
output["matched_queries"] = " | ".join(sorted(row["matched_queries"]))
writer.writerow(output)
Установите зависимость командой python -m pip install requests, задайте JSONSCRAPER_TIKTOK_LICENSE_KEY в окружении процесса и выполните файл. Не помещайте ключ в исходный код, CSV или журналы. Для расписания запускайте сценарий в защищённом окружении, где переменная доступна задаче.
Как превратить CSV в очередь вопросов
После сбора откройте ролики и вручную выделите фактические вопросы, затем сгруппируйте подтверждённые формулировки по темам, например «герметичность», «уход» или «сохранение тепла». Поисковая фраза помогает найти публикацию, но описание видео и совпадение запросов не заменяют проверку контекста.
Если используете языковую модель, передавайте ей описание и просите предложить краткую метку темы и возможный вопрос. Сохраняйте рядом исходный текст, ссылку и результат модели, чтобы специалист мог проверить основания классификации. Не выдавайте предложенную моделью формулировку за дословный вопрос, если её нет в описании.
Количество найденных записей описывает только возвращённые результаты конкретных запросов. Оно не измеряет весь объём обсуждений или спрос. Для внутреннего отчёта сохраняйте дату запуска, исходную фразу, ID и необработанный ответ API. Так можно сравнивать результаты повторных запусков и отдельно отмечать новые ID.
В примере намеренно нет автоматической пагинации. Для следующих страниц документация указывает параметр cursor, значение которого берут из предыдущего ответа и передают дальше без преобразования. Одна страница представляет только полученную порцию результатов, а не всю выдачу.
Что увидит команда
Файл tiktok_questions.csv содержит по одной строке на каждый уникальный ID, найденный по заданным фразам. Столбец matched_queries показывает, какими запросами встретился этот ролик. Это удобный способ выделить пересечения между выдачами и выбрать примеры для проверки; классификацию вопросов нужно выполнить отдельно.
Затем CSV можно включить в еженедельную автоматизацию: планировщик запускает сбор, хранилище сохраняет снимок, а уведомление отправляется при появлении ID, которого ещё нет в журнале. Это логика внешней оркестрации, а не функция endpoint поиска. Команда получает очередь ссылок для анализа, а не готовое заключение о причинах поведения покупателей.
Параметры маршрутов доступны в документации API; попробовать запрос можно на демо-площадке TikTok API. Перед регулярным сбором проверьте форму фактического ответа и сохраняйте значения, необходимые для перехода от сводки к конкретному ролику. Описание продукта приведено на странице TikTok Scraper API.
Полезный итог — проверяемый набор видео, связанных с конкретными поисковыми выражениями. Он помогает выбрать материал для ручного разбора и сохранить источники каждой принятой в контент-план темы.