El equipo de soporte necesita una lista de videos públicos de TikTok en los que la gente hable de una función confusa o haga preguntas sobre el producto. La búsqueda manual es difícil de repetir de forma uniforme y las respuestas de la API de búsqueda pueden guardar los videos en distintos lugares del JSON. A continuación se muestra un script básico de Python que consulta resultados por palabras clave, combina ambas estructuras, elimina duplicados por ID y guarda los registros encontrados en un CSV.
Qué resultado genera el script
El resultado es una tabla con el ID del video, el enlace, la descripción, la hora de publicación, el autor y los contadores de interacciones disponibles. El equipo de soporte o marketing puede marcar manualmente qué temas requieren una respuesta, una actualización de las instrucciones o una comprobación en su propio CRM. La tabla refleja únicamente los resultados de la API para las consultas especificadas; considérala una muestra de trabajo para revisar, no un catálogo exhaustivo de todas las conversaciones.

El script resuelve la recopilación y la clasificación inicial. No determina automáticamente si una descripción es una pregunta, una queja o una broma: es mejor añadir esa etiqueta tras una revisión manual o con un clasificador aparte, registrando el texto original y el motivo de la decisión.
Qué consultar y cómo está estructurada la respuesta
Para buscar videos, jsonscraper documenta la ruta GET /searchVideo en el host https://tiktok.evelode.com. El parámetro obligatorio es keyword; también se pueden proporcionar count, la región, el orden, el periodo de publicación y el cursor de la página siguiente. Por ejemplo, la búsqueda se puede repetir con varias frases definidas de antemano: el nombre de una función, una formulación habitual de un error y una pregunta breve sobre la configuración. Los parámetros y sus valores permitidos se enumeran en la referencia de la API de TikTok.
La búsqueda tiene una particularidad que el analizador debe tener en cuenta: el array aweme_list puede estar vacío aunque los objetos encontrados se encuentren en search_item_list, con aweme_info dentro de cada uno. Por eso, el procesador de abajo comprueba ambas estructuras. Un ejemplo de respuesta y los campos observados en una comprobación del 25 de octubre de 2026 figuran en la especificación primaria de jsonscraper; los campos de estadísticas pueden faltar, así que el código no inventa valores.
Prepara la clave y la lista de consultas
Guarda la clave en la variable de entorno JSONSCRAPER_TIKTOK_LICENSE_KEY, no en el archivo fuente. En el terminal de Linux o macOS puedes hacerlo así:
export JSONSCRAPER_TIKTOK_LICENSE_KEY="tu_clave"
Instala la biblioteca de solicitudes y prepara un archivo queries.txt con una expresión de búsqueda por línea, por ejemplo nombre del producto configuración y nombre de la función no funciona. Elige las formulaciones según el idioma de la audiencia y mantenlas en una lista aparte para comparar las exportaciones semanales usando siempre las mismas consultas.
python -m pip install requests
Recopila y normaliza los videos encontrados
El ejemplo es compatible con Python 3.8 o posterior. Hace una solicitud por cada frase, con un límite de resultados, comprueba los errores HTTP y el estado general y, después, guarda solo los campos realmente presentes. Los resultados repetidos se combinan por aweme_id y todas las consultas que encontraron un video se registran en el campo keywords. El campo independiente collected_at_utc registra la hora de recopilación para compararla con la de ejecuciones posteriores.

import csv
import os
import sys
from datetime import datetime, timezone
import requests
BASE_URL = "https://tiktok.evelode.com/searchVideo"
API_KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
if not API_KEY:
raise SystemExit("Configura JSONSCRAPER_TIKTOK_LICENSE_KEY")
def get_items(tiktok):
"""Extrae videos de las dos estructuras documentadas de respuesta de búsqueda."""
items = list(tiktok.get("aweme_list") or [])
for entry in tiktok.get("search_item_list") or []:
info = entry.get("aweme_info") if isinstance(entry, dict) else None
if info:
items.append(info)
return items
with open("queries.txt", encoding="utf-8") as query_file:
queries = [line.strip() for line in query_file if line.strip()]
collected_at = datetime.now(timezone.utc).isoformat()
videos = {}
for keyword in queries:
response = requests.get(
BASE_URL,
params={
"license_key": API_KEY,
"keyword": keyword,
"count": 30,
"region": "US",
"sort_by": "relevance",
},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
print("Estado de API no satisfactorio para la consulta:", keyword, file=sys.stderr)
continue
tiktok = payload.get("tiktok") or {}
for item in get_items(tiktok):
video_id = item.get("aweme_id")
if not video_id:
continue
if video_id not in videos:
author = item.get("author") or {}
stats = item.get("statistics") or {}
videos[video_id] = {
"aweme_id": video_id,
"keywords": [keyword],
"description": item.get("desc"),
"share_url": item.get("share_url"),
"create_time": item.get("create_time"),
"author": author.get("unique_id") or author.get("nickname"),
"play_count": stats.get("play_count"),
"digg_count": stats.get("digg_count"),
"comment_count": stats.get("comment_count"),
"share_count": stats.get("share_count"),
"collected_at_utc": collected_at,
}
elif keyword not in videos[video_id]["keywords"]:
videos[video_id]["keywords"].append(keyword)
columns = [
"aweme_id", "keywords", "description", "share_url", "create_time",
"author", "play_count", "digg_count", "comment_count", "share_count",
"collected_at_utc",
]
with open("tiktok_support_review.csv", "w", newline="", encoding="utf-8-sig") as output:
writer = csv.DictWriter(output, fieldnames=columns)
writer.writeheader()
for video in videos.values():
row = dict(video)
row["keywords"] = " | ".join(row["keywords"])
writer.writerow(row)
print("Número de videos únicos encontrados y guardados:", len(videos))
La solicitud se envía mediante el parámetro params, de modo que la biblioteca codifica correctamente las frases de búsqueda en la URL. La clave está en un parámetro de consulta, tal como se describe en la documentación; no imprimas la URL completa de la solicitud en el registro de la aplicación. Para el diagnóstico, guarda el código de respuesta HTTP, la frase de búsqueda y la hora de ejecución, pero excluye secretos y datos personales que no sean necesarios para la tarea.
Cómo leer el CSV sin sacar conclusiones erróneas
La columna keywords contiene todas las frases que encontraron el video; collected_at_utc permite distinguir la hora de publicación de la hora de recopilación. El ID sirve para eliminar duplicados y el enlace para que una persona verifique el resultado. Un contador vacío significa que el campo no estaba presente en esa respuesta concreta, no que su valor sea cero.
Para una primera clasificación, añade a una copia de trabajo del CSV las columnas tema, tipo de señal, requiere respuesta y enlace al material interno. Las opciones de temas deben corresponder a tu producto; por ejemplo, instalación, pagos, compatibilidad o resolución de errores. Este esquema convierte la exportación en una cola de revisión y permite comprobar la decisión consultando el video original.
Programa la recopilación
Primero, ejecuta el script manualmente y comprueba algunas filas y enlaces. Después, añádelo a cron, a una tarea de CI o a un flujo de automatización que pueda ejecutar un proceso de Python. Para los informes periódicos, guarda cada exportación o añade las filas a un almacenamiento con una clave única para el video y la fecha de la instantánea. Así, el equipo podrá distinguir las publicaciones recién encontradas de las observaciones repetidas y seguir cómo cambian los contadores disponibles entre ejecuciones.
El parámetro cursor permite recorrer los resultados y debe enviarse a partir de la respuesta de la llamada anterior. La paginación se ha omitido deliberadamente en este ejemplo mínimo: es más fácil verificar y reproducir un conjunto limitado de consultas. Si añades páginas, conserva el cursor sin interpretarlo, detente según el indicador de que hay más resultados y establece un límite máximo de llamadas por ejecución. La solicitud a la API devuelve una muestra; no interpretes el número de filas como una cobertura completa de TikTok.
Límites prácticos de uso
Los resultados de búsqueda sirven para encontrar videos mediante formulaciones que el equipo ya conoce. Ayudan a recopilar material para clasificarlo, pero no sustituyen las consultas entrantes, la analítica del sitio propio ni la revisión del contexto del video. Es posible que la descripción no refleje el contenido del video y que las métricas disponibles representen el estado de los datos en el momento de recopilarlos. Registra los temas y las conclusiones por separado de los campos originales, para que el personal pueda revisar la clasificación.
Antes de iniciar un seguimiento periódico, define quién puede acceder a la exportación, durante cuánto tiempo se conservarán los datos y con qué finalidad se utilizará la información pública. Conserva solo los campos necesarios para revisar el producto y da preferencia a los enlaces a las publicaciones originales en lugar de copiar archivos multimedia. Para solicitar información y comprobar las opciones de integración disponibles, consulta la página de TikTok Scraper API y la documentación de la ruta de búsqueda.