Якщо покупці ставлять те саме запитання в кількох відео 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, якого ще немає в журналі. Це логіка зовнішньої оркестрації, а не функція кінцевої точки пошуку. Команда отримує чергу посилань для аналізу, а не готовий висновок про причини поведінки покупців.
Параметри маршрутів наведено в документації API; спробувати запит можна на демомайданчику TikTok API. Перед регулярним збором перевірте фактичну форму відповіді та зберігайте значення, потрібні для переходу від зведення до конкретного ролика. Опис продукту наведено на сторінці TikTok Scraper API.
Корисний результат — перевірюваний набір відео, пов’язаних із конкретними пошуковими фразами. Він допомагає вибрати матеріали для ручного аналізу та зберегти джерела кожної теми, включеної до контент-плану.