La investigación de influencers de TikTok a través de API sigue un flujo de dos pasos: obtener el sec_uid del creador de su perfil, luego usar ese sec_uid para buscar publicaciones para la tasa de participación y una muestra de seguidores para la puntuación de la calidad de la audiencia.
Requisitos previos
- Python 3.9+
- Clave API de Scavio con acceso a TikTok
Guia paso a paso
Paso 1: Paso 1: obtenga sec_uid del nombre de usuario
El punto final del perfil toma un nombre de usuario y devuelve el sec_uid necesario para todas las solicitudes posteriores.
import requests
API_KEY = "your-scavio-api-key"
def get_profile(username: str) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/tiktok/user/profile",
json={"username": username},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=15
)
r.raise_for_status()
return r.json()
profile = get_profile("someinfluencer")
sec_uid = profile.get("sec_uid")
follower_count = profile.get("follower_count")
print(f"sec_uid: {sec_uid}, followers: {follower_count:,}")Paso 2: Paso 2: recupera publicaciones recientes usando sec_uid
Utilice la paginación sec_uid y max_cursor para obtener los videos recientes del creador.
def get_posts(sec_uid: str, count: int = 30) -> list:
all_posts = []
max_cursor = 0
while len(all_posts) < count:
r = requests.post(
"https://api.scavio.dev/api/v1/tiktok/user/posts",
json={"sec_uid": sec_uid, "count": min(30, count - len(all_posts)), "max_cursor": max_cursor},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=20
)
r.raise_for_status()
data = r.json()
posts = data.get("videos", [])
if not posts:
break
all_posts.extend(posts)
if not data.get("has_more"):
break
max_cursor = data.get("max_cursor", 0)
return all_posts[:count]Paso 3: Calcular la tasa de participación
Tasa de participación = (me gusta + comentarios + acciones) / vistas, promedio de publicaciones recientes.
def calc_engagement_rate(posts: list) -> float:
if not posts:
return 0.0
rates = []
for p in posts:
stats = p.get("stats", {})
views = stats.get("playCount", 0)
if views == 0:
continue
interactions = (
stats.get("diggCount", 0) +
stats.get("commentCount", 0) +
stats.get("shareCount", 0)
)
rates.append(interactions / views)
return round(sum(rates) / len(rates) * 100, 2) if rates else 0.0Paso 4: Generar una puntuación de investigación
Combine el recuento de seguidores, la tasa de participación y la frecuencia de publicación en una puntuación.
from datetime import date
def vet_influencer(username: str) -> dict:
profile = get_profile(username)
sec_uid = profile.get("sec_uid")
if not sec_uid:
return {"username": username, "error": "Profile not found"}
posts = get_posts(sec_uid, count=30)
eng_rate = calc_engagement_rate(posts)
followers = profile.get("follower_count", 0)
# Simple scoring: engagement rate is the main signal
if eng_rate >= 5:
tier = "A"
elif eng_rate >= 2:
tier = "B"
elif eng_rate >= 0.5:
tier = "C"
else:
tier = "D"
return {
"username": username,
"followers": followers,
"engagement_rate_pct": eng_rate,
"posts_analyzed": len(posts),
"tier": tier,
"vetted_date": str(date.today())
}
result = vet_influencer("someinfluencer")
print(result)Ejemplo en Python
import requests
from datetime import date
API_KEY = "your-scavio-api-key"
def get_profile(username):
r = requests.post("https://api.scavio.dev/api/v1/tiktok/user/profile",
json={"username": username},
headers={"Authorization": f"Bearer {API_KEY}"}, timeout=15)
r.raise_for_status()
return r.json()
def get_posts(sec_uid, count=30):
posts, cursor = [], 0
while len(posts) < count:
r = requests.post("https://api.scavio.dev/api/v1/tiktok/user/posts",
json={"sec_uid": sec_uid, "count": min(30, count - len(posts)), "max_cursor": cursor},
headers={"Authorization": f"Bearer {API_KEY}"}, timeout=20)
r.raise_for_status()
data = r.json()
batch = data.get("videos", [])
if not batch: break
posts.extend(batch)
if not data.get("has_more"): break
cursor = data.get("max_cursor", 0)
return posts[:count]
def engagement_rate(posts):
rates = []
for p in posts:
s = p.get("stats", {})
v = s.get("playCount", 0)
if v: rates.append((s.get("diggCount",0) + s.get("commentCount",0) + s.get("shareCount",0)) / v)
return round(sum(rates)/len(rates)*100, 2) if rates else 0.0
def vet(username):
profile = get_profile(username)
sec_uid = profile.get("sec_uid")
if not sec_uid: return {"username": username, "error": "not found"}
posts = get_posts(sec_uid, 30)
er = engagement_rate(posts)
tier = "A" if er >= 5 else "B" if er >= 2 else "C" if er >= 0.5 else "D"
return {"username": username, "followers": profile.get("follower_count",0),
"engagement_rate_pct": er, "posts_analyzed": len(posts), "tier": tier,
"vetted_date": str(date.today())}
if __name__ == "__main__":
for creator in ["creator1", "creator2", "creator3"]:
result = vet(creator)
print(f"@{result['username']}: {result.get('followers',0):,} followers | {result.get('engagement_rate_pct')}% engagement | Tier {result.get('tier')}")Ejemplo en JavaScript
const API_KEY = 'your-scavio-api-key';
async function getProfile(username) {
const res = await fetch('https://api.scavio.dev/api/v1/tiktok/user/profile', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` },
body: JSON.stringify({ username })
});
return res.json();
}
async function getPosts(secUid, count = 30) {
const res = await fetch('https://api.scavio.dev/api/v1/tiktok/user/posts', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` },
body: JSON.stringify({ sec_uid: secUid, count, max_cursor: 0 })
});
const data = await res.json();
return data.videos ?? [];
}
const profile = await getProfile('someinfluencer');
const posts = await getPosts(profile.sec_uid);
const er = posts.reduce((acc, p) => {
const s = p.stats ?? {};
return s.playCount ? acc + (s.diggCount + s.commentCount + s.shareCount) / s.playCount : acc;
}, 0) / posts.length * 100;
console.log(`@${profile.unique_id}: ${er.toFixed(2)}% engagement`);Salida esperada
@creator1: 248,000 followers | 6.8% engagement | Tier A
@creator2: 891,000 followers | 1.4% engagement | Tier C
@creator3: 42,000 followers | 8.2% engagement | Tier A