La comparación de precios en Amazon y Walmart ayuda a los compradores a ahorrar dinero y ayuda a los vendedores a identificar oportunidades de precios. Consultar ambas plataformas manualmente es lento y los datos se vuelven obsoletos rápidamente. Este tutorial crea una herramienta de comparación de precios automatizada utilizando la API de Scavio que busca el mismo producto en Amazon y Walmart, normaliza los precios, compara artículos similares en todas las plataformas y genera una comparación lado a lado que muestra qué plataforma ofrece la mejor oferta.
Requisitos previos
- Python 3.10 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Productos para comparar entre plataformas
Guia paso a paso
Paso 1: Consulta ambas plataformas simultáneamente
Busque en Amazon y Walmart la misma consulta de producto simultáneamente para minimizar la latencia.
from concurrent.futures import ThreadPoolExecutor
def search_platform(platform: str, query: str) -> list[dict]:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query, "marketplace": "US"}
)
r.raise_for_status()
return r.json().get("products", [])
def compare(query: str) -> dict:
with ThreadPoolExecutor(max_workers=2) as ex:
a_fut = ex.submit(search_platform, "amazon", query)
w_fut = ex.submit(search_platform, "walmart", query)
return {"amazon": a_fut.result(), "walmart": w_fut.result()}Paso 2: Analizar y normalizar precios
Extraiga precios de ambas plataformas y conviértalos a valores flotantes para compararlos.
def parse_price(price_str: str) -> float | None:
if not price_str:
return None
return float(price_str.replace("$", "").replace(",", ""))
def normalize_product(product: dict, platform: str) -> dict:
return {
"platform": platform,
"title": product.get("title", ""),
"price": parse_price(product.get("price", "")),
"price_raw": product.get("price", ""),
"rating": product.get("rating"),
"url": product.get("url", product.get("link", "")),
}Paso 3: Encuentra el mejor precio en todas las plataformas
Combine resultados normalizados de ambas plataformas y ordénelos por precio para encontrar la mejor oferta.
def best_deals(query: str, top_n: int = 10) -> list[dict]:
data = compare(query)
items = []
for p in data["amazon"][:10]:
items.append(normalize_product(p, "amazon"))
for p in data["walmart"][:10]:
items.append(normalize_product(p, "walmart"))
return sorted(items, key=lambda x: x["price"] or float("inf"))[:top_n]Paso 4: Tabla de comparación de resultados
Imprima una tabla comparativa formateada que muestre los mejores precios de cada plataforma.
def print_comparison(query: str) -> None:
deals = best_deals(query)
print(f"Price comparison: {query}\n" + "-" * 60)
print(f"{'Platform':<10} {'Price':<10} {'Rating':<8} {'Title'}")
for d in deals:
price = f"${d['price']:.2f}" if d['price'] else 'N/A'
print(f"{d['platform']:<10} {price:<10} {d['rating'] or 'N/A':<8} {d['title'][:40]}")Ejemplo en Python
import os
import requests
from concurrent.futures import ThreadPoolExecutor
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def search(platform: str, query: str) -> list[dict]:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"platform": platform, "query": query, "marketplace": "US"})
r.raise_for_status()
return r.json().get("products", [])
def compare(query: str) -> None:
with ThreadPoolExecutor(max_workers=2) as ex:
a = ex.submit(search, "amazon", query)
w = ex.submit(search, "walmart", query)
items = []
for p in a.result()[:5]:
price = float(p.get("price", "0").replace("$", "").replace(",", "") or 0)
items.append({"src": "amazon", "price": price, "title": p.get("title", ""), "rating": p.get("rating")})
for p in w.result()[:5]:
price = float(p.get("price", "0").replace("$", "").replace(",", "") or 0)
items.append({"src": "walmart", "price": price, "title": p.get("title", ""), "rating": p.get("rating")})
items.sort(key=lambda x: x["price"] or float("inf"))
print(f"{'Source':<10} {'Price':<10} {'Rating':<8} {'Title'}")
for i in items:
print(f"{i['src']:<10} ${i['price']:<9.2f} {i['rating'] or 'N/A':<8} {i['title'][:40]}")
if __name__ == "__main__":
compare("AirPods Pro")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 search(platform, query) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ platform, query, marketplace: "US" })
});
const data = await res.json();
return (data.products || []).slice(0, 5).map(p => ({
src: platform,
title: p.title,
price: p.price ? parseFloat(p.price.replace(/[$,]/g, "")) : null,
rating: p.rating
}));
}
async function compare(query) {
const [amazon, walmart] = await Promise.all([
search("amazon", query), search("walmart", query)
]);
const all = [...amazon, ...walmart].sort((a, b) => (a.price || Infinity) - (b.price || Infinity));
console.log(`Price comparison: ${query}`);
all.forEach(i => console.log(`${i.src.padEnd(10)} $${i.price?.toFixed(2) || 'N/A'.padEnd(9)} ${i.title?.slice(0, 40)}`));
}
compare("AirPods Pro").catch(console.error);Salida esperada
Source Price Rating Title
amazon $189.00 4.7 Apple AirPods Pro (2nd Generation)
walmart $189.00 4.7 Apple AirPods Pro 2nd Gen with USB-C
amazon $199.99 4.6 Apple AirPods Pro with MagSafe Case
walmart $199.00 4.5 Apple AirPods Pro 2 Wireless Earbuds
amazon $234.99 4.8 Apple AirPods Pro Premium Bundle