TikTok impulsa ventas masivas de comercio electrónico. Los productos que se vuelven virales en TikTok se agotan en Amazon en cuestión de días. La detección temprana de estas tendencias le brinda una ventaja de abastecimiento. Este tutorial crea un canal de detección de tendencias de TikTok utilizando los puntos finales de la API de Scavio TikTok. Busque videos relacionados con productos, realice un seguimiento de la velocidad de participación (vistas por hora) y haga referencias cruzadas con los datos de búsqueda de Amazon para validar la viabilidad comercial. Las llamadas a la API de TikTok utilizan el patrón de autenticación del token de portador.
Requisitos previos
- Python 3.9+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Comprensión básica del abastecimiento de productos de comercio electrónico
Guia paso a paso
Paso 1: Busque en TikTok videos relacionados con productos
Utilice el punto final de búsqueda de vídeos de TikTok para encontrar contenido relacionado con el producto. Los recuentos altos de visualizaciones y las fechas de carga recientes indican productos de tendencia.
import os, requests, time
from datetime import datetime
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
TT_URL = 'https://api.scavio.dev/api/v1/tiktok'
TT_H = {'Authorization': f'Bearer {SCAVIO_KEY}', 'Content-Type': 'application/json'}
SEARCH_URL = 'https://api.scavio.dev/api/v1/search'
SEARCH_H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
def search_tiktok_products(query: str, count: int = 20) -> list:
"""Search TikTok for product-related videos."""
resp = requests.post(f'{TT_URL}/search/videos', headers=TT_H,
json={'keyword': query, 'count': count, 'cursor': 0})
videos = resp.json().get('data', {}).get('videos', [])
results = []
for v in videos:
stats = v.get('stats', {})
author = v.get('author', {})
results.append({
'description': v.get('desc', '')[:100],
'author': author.get('uniqueId', ''),
'plays': stats.get('playCount', 0),
'likes': stats.get('diggCount', 0),
'comments': stats.get('commentCount', 0),
'shares': stats.get('shareCount', 0),
'created': v.get('createTime', 0),
'video_id': v.get('id', ''),
})
# Sort by plays descending
results.sort(key=lambda x: x['plays'], reverse=True)
return results
videos = search_tiktok_products('TikTok made me buy it')
print(f'Found {len(videos)} product videos')
for v in videos[:5]:
print(f' {v["plays"]:>12,} plays | @{v["author"]:15s} | {v["description"][:40]}')Paso 2: Detectar categorías de productos de tendencia
Busque múltiples hashtags y palabras clave relacionados con productos para identificar qué categorías están en tendencia. Compare las tasas de participación entre categorías.
def detect_trending_categories(categories: list) -> list:
"""Search TikTok for each product category and rank by engagement."""
results = []
for category in categories:
videos = search_tiktok_products(category, count=10)
if not videos:
continue
total_plays = sum(v['plays'] for v in videos)
total_likes = sum(v['likes'] for v in videos)
avg_engagement = total_likes / total_plays if total_plays else 0
results.append({
'category': category,
'videos': len(videos),
'total_plays': total_plays,
'total_likes': total_likes,
'avg_engagement': avg_engagement,
'top_video': videos[0] if videos else None,
})
time.sleep(0.3)
results.sort(key=lambda x: x['total_plays'], reverse=True)
return results
categories = [
'cleaning gadget review',
'kitchen organization hack',
'skincare routine product',
'desk setup accessory',
'pet gadget review',
]
trending = detect_trending_categories(categories)
print('TikTok Product Trend Detection')
print('=' * 60)
for t in trending:
print(f" {t['category']:30s} | {t['total_plays']:>12,} plays | {t['avg_engagement']:.1%} eng")
if t['top_video']:
print(f" Top: {t['top_video']['description'][:50]}")Paso 3: Seguimiento de la velocidad del hashtag para sincronizar las tendencias
Utilice el punto final del hashtag de TikTok para comprobar qué tan rápido está creciendo el hashtag de un producto. Los recuentos altos de visualizaciones en el hashtag indican un momento pico o previo al pico.
def check_hashtag_velocity(hashtag: str) -> dict:
"""Check a hashtag's total views and video volume."""
# Get hashtag info
resp = requests.post(f'{TT_URL}/hashtag', headers=TT_H,
json={'hashtag': hashtag})
hashtag_data = resp.json().get('data', {})
time.sleep(0.3)
# Get recent videos under this hashtag
resp = requests.post(f'{TT_URL}/hashtag/videos', headers=TT_H,
json={'hashtag': hashtag, 'count': 20, 'cursor': 0})
videos = resp.json().get('data', {}).get('videos', [])
recent_plays = sum(v.get('stats', {}).get('playCount', 0) for v in videos)
return {
'hashtag': hashtag,
'total_views': hashtag_data.get('stats', {}).get('videoCount', 0),
'recent_videos': len(videos),
'recent_plays': recent_plays,
'avg_plays_per_video': recent_plays // len(videos) if videos else 0,
}
hashtags = ['cleaninghack', 'kitchengadget', 'desksetup', 'skincareproduct']
print('Hashtag Velocity Check')
print('-' * 60)
for tag in hashtags:
data = check_hashtag_velocity(tag)
print(f' #{data["hashtag"]:20s} | {data["recent_plays"]:>10,} recent plays | '
f'{data["avg_plays_per_video"]:>8,} avg/video')
time.sleep(0.3)Paso 4: Validación cruzada con datos de búsqueda de Amazon
Un producto que es tendencia en TikTok solo es importante para el comercio electrónico si la gente realmente lo compra. Haga una referencia cruzada de las tendencias de TikTok con la búsqueda de Amazon para validar la viabilidad comercial.
def validate_trend_commercially(product: str) -> dict:
"""Cross-validate a TikTok trend with Amazon data."""
# TikTok data
tt_videos = search_tiktok_products(product, count=10)
tt_plays = sum(v['plays'] for v in tt_videos)
time.sleep(0.3)
# Amazon data
resp = requests.post(SEARCH_URL, headers=SEARCH_H,
json={'query': f'site:amazon.com {product}',
'country_code': 'us', 'num_results': 5})
amazon_results = resp.json().get('organic_results', [])
# Scoring
tiktok_score = min(tt_plays / 100000, 10) # Normalize to 0-10
amazon_score = len(amazon_results) * 2 # 0-10
combined = (tiktok_score + amazon_score) / 2
return {
'product': product,
'tiktok_videos': len(tt_videos),
'tiktok_plays': tt_plays,
'amazon_listings': len(amazon_results),
'tiktok_score': round(tiktok_score, 1),
'amazon_score': round(amazon_score, 1),
'combined_score': round(combined, 1),
'verdict': 'HOT' if combined > 6 else 'WARM' if combined > 3 else 'COLD',
'cost': 0.010, # 1 TikTok + 1 Amazon search
}
products = ['LED sunset lamp', 'portable blender', 'cloud slides shoes']
print('\nTrend Validation Report')
print('=' * 65)
for p in products:
result = validate_trend_commercially(p)
print(f"[{result['verdict']:4s}] {result['product']:25s} | "
f"TT: {result['tiktok_score']}/10 AMZ: {result['amazon_score']}/10 | "
f"Combined: {result['combined_score']}/10")
time.sleep(0.5)
total_cost = len(products) * 0.010
print(f'\nTotal cost: ${total_cost:.3f}')Ejemplo en Python
import os, requests, time
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
TT_H = {'Authorization': f'Bearer {SCAVIO_KEY}', 'Content-Type': 'application/json'}
S_H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
def detect_trend(product):
# TikTok search
resp = requests.post('https://api.scavio.dev/api/v1/tiktok/search/videos', headers=TT_H,
json={'keyword': product, 'count': 10, 'cursor': 0})
videos = resp.json().get('data', {}).get('videos', [])
plays = sum(v.get('stats', {}).get('playCount', 0) for v in videos)
time.sleep(0.3)
# Amazon cross-check
resp2 = requests.post('https://api.scavio.dev/api/v1/search', headers=S_H,
json={'query': f'site:amazon.com {product}', 'country_code': 'us', 'num_results': 5})
amazon = len(resp2.json().get('organic_results', []))
verdict = 'HOT' if plays > 500000 and amazon >= 3 else 'WARM' if plays > 100000 else 'COLD'
print(f'[{verdict}] {product}: {plays:,} TT plays, {amazon} AMZ listings')
for p in ['LED sunset lamp', 'portable blender', 'cloud slides']:
detect_trend(p)
time.sleep(0.3)Ejemplo en JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function detectTrend(product) {
const tt = await fetch('https://api.scavio.dev/api/v1/tiktok/search/videos', {
method: 'POST',
headers: { Authorization: `Bearer ${SCAVIO_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ keyword: product, count: 10, cursor: 0 })
}).then(r => r.json());
const plays = (tt.data?.videos || []).reduce((s, v) => s + (v.stats?.playCount || 0), 0);
const amz = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: `site:amazon.com ${product}`, country_code: 'us', num_results: 5 })
}).then(r => r.json());
const listings = (amz.organic_results || []).length;
const verdict = plays > 500000 && listings >= 3 ? 'HOT' : plays > 100000 ? 'WARM' : 'COLD';
console.log(`[${verdict}] ${product}: ${plays.toLocaleString()} TT plays, ${listings} AMZ listings`);
}
(async () => { for (const p of ['LED sunset lamp', 'portable blender']) await detectTrend(p); })();Salida esperada
Found 20 product videos
1,234,567 plays | @cleanqueen | This cleaning gadget changed my life
892,345 plays | @organizewithme | Kitchen organization haul from Amazon
TikTok Product Trend Detection
============================================================
skincare routine product | 4,523,000 plays | 8.2% eng
cleaning gadget review | 3,891,000 plays | 6.5% eng
kitchen organization hack | 2,156,000 plays | 7.1% eng
Trend Validation Report
=================================================================
[HOT ] LED sunset lamp | TT: 7.2/10 AMZ: 8.0/10 | Combined: 7.6/10
[WARM] portable blender | TT: 4.5/10 AMZ: 6.0/10 | Combined: 5.3/10
[HOT ] cloud slides shoes | TT: 8.1/10 AMZ: 10.0/10 | Combined: 9.1/10
Total cost: $0.030Tutoriales relacionados
- Cómo examinar a los creadores de TikTok para establecer asociaciones con marcas
- Cómo realizar un seguimiento de una campaña de hashtag de TikTok a través de API
- Cómo validar la rentabilidad de los productos de Amazon con datos de búsqueda en vivo
- Cómo crear un agente de detección de tendencias utilizando YouTube y Google