La API de Scavio TikTok proporciona dos puntos finales de búsqueda: búsqueda/videos devuelve resultados de video para una consulta con paginación basada en cursor, y búsqueda/usuarios devuelve perfiles de creadores. Ambos utilizan solicitudes POST con Autorización: Portador.
Requisitos previos
- Python 3.9+ o Node.js 18+
- Clave API de Scavio con acceso a TikTok
Guia paso a paso
Paso 1: Buscar vídeos de TikTok por palabra clave
PUBLICAR en /tiktok/search/videos con su consulta. Paginar con el campo del cursor.
import requests
API_KEY = "your-scavio-api-key"
def search_tiktok_videos(query: str, cursor: int = 0, count: int = 20) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/tiktok/search/videos",
json={"query": query, "cursor": cursor, "count": count},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=20
)
r.raise_for_status()
return r.json()
result = search_tiktok_videos("ai coding tutorial")
videos = result.get("videos", [])
for v in videos:
print(v.get("desc"), v.get("stats", {}).get("playCount"))Paso 2: Paginar a través de resultados de vídeo
Utilice el cursor de la respuesta para ir a la página siguiente. Continúe hasta que has_more sea falso.
def get_all_videos(query: str, max_pages: int = 5) -> list:
all_videos = []
cursor = 0
for page in range(max_pages):
result = search_tiktok_videos(query, cursor=cursor)
videos = result.get("videos", [])
all_videos.extend(videos)
print(f"Page {page + 1}: {len(videos)} videos (total: {len(all_videos)})")
if not result.get("has_more") or not videos:
break
cursor = result.get("cursor", cursor + len(videos))
return all_videos
videos = get_all_videos("ai coding tutorial", max_pages=3)
print(f"Total videos fetched: {len(videos)}")Paso 3: Buscar usuarios de TikTok por palabra clave
PUBLICAR en /tiktok/search/users para encontrar perfiles de creadores. Misma paginación basada en cursor.
def search_tiktok_users(query: str, cursor: int = 0) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/tiktok/search/users",
json={"query": query, "cursor": cursor},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=20
)
r.raise_for_status()
return r.json()
result = search_tiktok_users("ai developer")
users = result.get("users", [])
for u in users:
print(u.get("nickname"), u.get("follower_count"), u.get("sec_uid"))Paso 4: Analizar y filtrar resultados
Extraiga métricas clave y filtre por recuento mínimo de reproducciones o recuento de seguidores.
def filter_videos(videos: list, min_plays: int = 10000) -> list:
filtered = []
for v in videos:
plays = v.get("stats", {}).get("playCount", 0)
if plays >= min_plays:
filtered.append({
"id": v.get("id"),
"desc": v.get("desc", "")[:100],
"plays": plays,
"likes": v.get("stats", {}).get("diggCount", 0),
"comments": v.get("stats", {}).get("commentCount", 0),
"author": v.get("author", {}).get("uniqueId")
})
return sorted(filtered, key=lambda x: x["plays"], reverse=True)
top_videos = filter_videos(videos, min_plays=50000)
for v in top_videos[:5]:
print(f"{v['plays']:>10,} plays | @{v['author']} | {v['desc'][:60]}")Ejemplo en Python
import requests
API_KEY = "your-scavio-api-key"
def search_videos(query: str, cursor: int = 0, count: int = 20) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/tiktok/search/videos",
json={"query": query, "cursor": cursor, "count": count},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=20
)
r.raise_for_status()
return r.json()
def search_users(query: str, cursor: int = 0) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/tiktok/search/users",
json={"query": query, "cursor": cursor},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=20
)
r.raise_for_status()
return r.json()
def collect_top_videos(query: str, min_plays: int = 10000, max_pages: int = 3) -> list:
all_videos = []
cursor = 0
for _ in range(max_pages):
result = search_videos(query, cursor=cursor)
batch = result.get("videos", [])
if not batch:
break
all_videos.extend(batch)
if not result.get("has_more"):
break
cursor = result.get("cursor", 0)
return sorted(
[{"id": v.get("id"), "desc": v.get("desc","")[:80],
"plays": v.get("stats",{}).get("playCount",0),
"likes": v.get("stats",{}).get("diggCount",0),
"author": v.get("author",{}).get("uniqueId")}
for v in all_videos if v.get("stats",{}).get("playCount",0) >= min_plays],
key=lambda x: x["plays"], reverse=True
)
if __name__ == "__main__":
print("=== Top Videos for 'ai coding tutorial' ===")
videos = collect_top_videos("ai coding tutorial", min_plays=50000)
for i, v in enumerate(videos[:10], 1):
print(f"{i:2}. {v['plays']:>10,} plays | @{v['author']:<20} | {v['desc'][:50]}")
print("\n=== Users matching 'ai developer' ===")
user_result = search_users("ai developer")
for u in user_result.get("users", [])[:5]:
print(f"@{u.get('uniqueId'):<25} {u.get('follower_count',0):>8,} followers")Ejemplo en JavaScript
const API_KEY = 'your-scavio-api-key';
async function searchVideos(query, cursor = 0, count = 20) {
const res = await fetch('https://api.scavio.dev/api/v1/tiktok/search/videos', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` },
body: JSON.stringify({ query, cursor, count })
});
if (!res.ok) throw new Error(`Failed: ${res.status}`);
return res.json();
}
async function searchUsers(query, cursor = 0) {
const res = await fetch('https://api.scavio.dev/api/v1/tiktok/search/users', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` },
body: JSON.stringify({ query, cursor })
});
return res.json();
}
const videoResult = await searchVideos('ai coding tutorial');
const top = (videoResult.videos ?? [])
.filter(v => (v.stats?.playCount ?? 0) >= 50000)
.sort((a, b) => (b.stats?.playCount ?? 0) - (a.stats?.playCount ?? 0));
for (const v of top.slice(0, 5)) {
console.log(`${v.stats?.playCount?.toLocaleString()} plays | @${v.author?.uniqueId} | ${v.desc?.slice(0, 60)}`);
}Salida esperada
=== Top Videos for 'ai coding tutorial' ===
1. 2,847,392 plays | @aicodingpro | How I built a full app in 10 minutes with AI
2. 1,203,441 plays | @techwithtim | Claude vs ChatGPT for coding - honest review
3. 891,022 plays | @cursordev | Cursor AI just changed everything
=== Users matching 'ai developer' ===
@aidevtools 1,240,000 followers
@buildwithclaude 890,441 followers