Una sola fuente de revisión puede estar sesgada o tener una cobertura limitada. Agregar reseñas de Amazon (compradores verificados) y Google (reseñas editoriales y de usuarios de toda la web) brinda una imagen más representativa de la recepción del producto. Este tutorial crea un canal de agregación de reseñas utilizando la API de Scavio que recopila reseñas de múltiples fuentes, normaliza las calificaciones de estrellas en una escala de 5 puntos y calcula una puntuación agregada ponderada.
Requisitos previos
- Python 3.8 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Comprensión estadística básica
Guia paso a paso
Paso 1: Obtener reseñas de Amazon
Consulte el punto final de Scavio Amazon para obtener un producto y extraiga su conjunto de reseñas y calificación promedio.
def amazon_reviews(asin: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": "amazon", "query": asin, "marketplace": "US"})
r.raise_for_status()
data = r.json()
return {"rating": data.get("product", {}).get("rating"), "reviews": data.get("reviews", [])}Paso 2: Obtener señales de revisión de Google
Busque en Google reseñas de productos y extraiga fragmentos que contengan menciones de calificación.
def google_review_signals(product_name: str) -> list[str]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": f"{product_name} review rating", "country_code": "us"})
r.raise_for_status()
results = r.json().get("organic_results", [])
return [r.get("snippet", "") for r in results if r.get("snippet")]Paso 3: Calcular la calificación agregada
Promedie las calificaciones de estrellas de las reseñas de Amazon para producir una puntuación ponderada.
def aggregate_rating(reviews: list[dict]) -> float | None:
ratings = [r["rating"] for r in reviews if r.get("rating")]
if not ratings:
return None
return round(sum(ratings) / len(ratings), 2)Paso 4: Construir el informe agregado
Combine la calificación de Amazon y el recuento de reseñas con las señales de reseñas de Google en un informe de producto unificado.
def aggregate_report(product: str, asin: str) -> dict:
amazon = amazon_reviews(asin)
signals = google_review_signals(product)
agg = aggregate_rating(amazon["reviews"])
return {
"product": product,
"amazon_avg_rating": amazon.get("rating"),
"review_count": len(amazon["reviews"]),
"aggregate_score": agg,
"google_signals": signals[:3],
}Ejemplo en Python
import os
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def call(body):
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY}, json=body)
r.raise_for_status()
return r.json()
def aggregate(product: str, asin: str) -> dict:
amazon_data = call({"platform": "amazon", "query": asin, "marketplace": "US"})
google_data = call({"query": f"{product} review", "country_code": "us"})
reviews = amazon_data.get("reviews", [])
ratings = [r["rating"] for r in reviews if r.get("rating")]
avg = round(sum(ratings) / len(ratings), 2) if ratings else None
return {
"amazon_rating": amazon_data.get("product", {}).get("rating"),
"computed_avg": avg,
"review_count": len(reviews),
"google_snippets": [r.get("snippet") for r in google_data.get("organic_results", [])[:3] if r.get("snippet")]
}
if __name__ == "__main__":
import json
print(json.dumps(aggregate("Sony WH-1000XM5", "B09XS7JWHH"), indent=2))Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function call(body) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify(body)
});
return res.json();
}
async function aggregate(product, asin) {
const [amazon, google] = await Promise.all([
call({ platform: "amazon", query: asin, marketplace: "US" }),
call({ query: `${product} review`, country_code: "us" })
]);
const reviews = amazon.reviews || [];
const ratings = reviews.map(r => r.rating).filter(Boolean);
const avg = ratings.length ? Math.round(ratings.reduce((a, b) => a + b) / ratings.length * 100) / 100 : null;
return { amazonRating: amazon.product?.rating, computedAvg: avg, reviewCount: reviews.length };
}
aggregate("Sony WH-1000XM5", "B09XS7JWHH").then(console.log).catch(console.error);Salida esperada
{
"product": "Sony WH-1000XM5",
"amazon_avg_rating": "4.8",
"review_count": 47,
"aggregate_score": 4.72,
"google_signals": [
"The WH-1000XM5 earns our top rating for premium noise-canceling headphones...",
"5/5 stars. Sony has once again set the bar for consumer audio..."
]
}