Detecte la decadencia de la tendencia del producto monitoreando cómo la frescura y el volumen de los resultados de búsqueda cambian con el tiempo para una consulta de producto determinada. Cuando un producto es tendencia, los resultados de búsqueda están dominados por artículos recientes, reseñas y menciones sociales. A medida que el interés disminuye, deja de aparecer contenido nuevo y los resultados más antiguos suben en la clasificación. Este tutorial crea un detector de caída de tendencias que califica la frescura de los resultados diariamente y alerta cuando la puntuación de frescura cae por debajo de un umbral, lo que indica que el interés máximo de un producto ha pasado.
Requisitos previos
- Python 3.8+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Una lista de productos para monitorear la caída de la tendencia
Guia paso a paso
Paso 1: Definir productos a monitorear
Configure los productos y los parámetros de puntuación de frescura.
import os, requests, json, datetime, re
API_KEY = os.environ['SCAVIO_API_KEY']
PRODUCTS = [
'Rabbit R1',
'Humane AI Pin',
'Meta Ray-Ban smart glasses',
'Apple Vision Pro',
]
CURRENT_YEAR = 2026
HISTORY_FILE = 'trend_decay.json'Paso 2: Actualización del resultado de la puntuación
Busque cada producto y calcule una puntuación de frescura en función de cuántos resultados mencionan el año actual o el anterior.
def freshness_score(product: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': f'{product} review'}, timeout=15)
results = resp.json().get('organic_results', [])
fresh = 0
for r in results[:10]:
text = f"{r.get('title', '')} {r.get('snippet', '')}"
if str(CURRENT_YEAR) in text or str(CURRENT_YEAR - 1) in text:
fresh += 1
score = round(fresh / max(len(results[:10]), 1), 2)
return {'product': product, 'freshness': score, 'fresh_count': fresh, 'total': min(len(results), 10)}Paso 3: Seguimiento de puntuaciones a lo largo del tiempo
Guarde las puntuaciones de frescura diarias en un archivo histórico y calcule la dirección de la tendencia (mejorando, estable o decayendo).
def track_trends(products: list) -> list:
today = datetime.date.today().isoformat()
scores = [freshness_score(p) for p in products]
for s in scores:
s['date'] = today
history = []
try:
with open(HISTORY_FILE) as f:
history = json.load(f)
except FileNotFoundError:
pass
history.extend(scores)
with open(HISTORY_FILE, 'w') as f:
json.dump(history, f, indent=2)
return scores
scores = track_trends(PRODUCTS)
for s in scores:
print(f"{s['product']}: freshness={s['freshness']} ({s['fresh_count']}/{s['total']} fresh results)")Paso 4: Detectar deterioro y alertar
Compare la frescura actual con el promedio de 7 días para detectar deterioro. Alerta cuando la frescura baja más del 20%.
def detect_decay(product: str, threshold: float = 0.2) -> dict:
try:
with open(HISTORY_FILE) as f:
history = json.load(f)
except FileNotFoundError:
return {'product': product, 'status': 'insufficient_data'}
product_history = [h for h in history if h['product'] == product]
if len(product_history) < 3:
return {'product': product, 'status': 'insufficient_data'}
recent = product_history[-1]['freshness']
avg = sum(h['freshness'] for h in product_history[-7:]) / len(product_history[-7:])
decline = round(avg - recent, 2)
decaying = decline > threshold
return {
'product': product,
'current_freshness': recent,
'avg_freshness': round(avg, 2),
'decline': decline,
'decaying': decaying,
'status': 'DECAYING' if decaying else 'stable',
}
for p in PRODUCTS:
result = detect_decay(p)
print(f"{result['product']}: {result['status']}")Ejemplo en Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def freshness(product):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{product} review'}).json()
results = data.get('organic_results', [])[:10]
fresh = sum(1 for r in results if '2026' in f"{r.get('title', '')} {r.get('snippet', '')}")
return {'product': product, 'freshness': round(fresh / max(len(results), 1), 2)}
for p in ['Rabbit R1', 'Apple Vision Pro']:
print(freshness(p))Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function freshness(product) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform: 'google', query: `${product} review`})
});
const results = ((await r.json()).organic_results || []).slice(0, 10);
const fresh = results.filter(r => `${r.title} ${r.snippet}`.includes('2026')).length;
return {product, freshness: (fresh / Math.max(results.length, 1)).toFixed(2)};
}
freshness('Apple Vision Pro').then(console.log);Salida esperada
A trend decay detection system that monitors product freshness scores daily and alerts when interest is declining based on the absence of recent content in search results.