Muchas aplicaciones necesitan datos de múltiples plataformas de búsqueda: Google para el contexto web, Amazon para los precios de los productos, YouTube para el contenido de vídeo y Walmart para las alternativas minoristas. Administrar cuatro integraciones de API independientes, cada una con autenticación, límites de velocidad y esquemas de respuesta diferentes, es complejo y costoso. La API de Scavio proporciona un único punto final que unifica las cuatro plataformas bajo una interfaz consistente. Este tutorial crea una función de búsqueda unificada que consulta las cuatro plataformas y devuelve un conjunto de resultados normalizado.
Requisitos previos
- Python 3.10 o superior
- solicita biblioteca instalada
- Una clave API de Scavio
- Comprensión básica de la programación concurrente de Python
Guia paso a paso
Paso 1: Definir configuraciones de solicitud de plataforma
Cree un asistente que cree el cuerpo de solicitud correcto para cada plataforma a partir de una única cadena de consulta.
def platform_body(platform: str, query: str) -> dict:
base = {"platform": platform, "query": query}
if platform == "google":
return {"query": query, "country_code": "us"}
if platform == "amazon":
return {**base, "marketplace": "US"}
return basePaso 2: Distribuir solicitudes simultáneamente
Consulta las cuatro plataformas simultáneamente usando ThreadPoolExecutor para minimizar la latencia.
from concurrent.futures import ThreadPoolExecutor
PLATFORMS = ["google", "amazon", "youtube", "walmart"]
def search_all(query: str) -> dict:
def fetch(platform):
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json=platform_body(platform, query))
r.raise_for_status()
return r.json()
with ThreadPoolExecutor(max_workers=4) as ex:
futs = {p: ex.submit(fetch, p) for p in PLATFORMS}
return {p: f.result() for p, f in futs.items()}Paso 3: Extraer recuentos de resultados por plataforma
Cree un resumen que muestre cuántos resultados arrojó cada plataforma para la consulta.
def summarize(results: dict) -> dict:
return {
"google": len(results["google"].get("organic_results", [])),
"amazon": len(results["amazon"].get("products", [])),
"youtube": len(results["youtube"].get("videos", [])),
"walmart": len(results["walmart"].get("products", [])),
}Paso 4: Imprime un resumen unificado
Muestre los recuentos de resultados y el elemento principal de cada plataforma.
results = search_all("portable bluetooth speaker")
counts = summarize(results)
for platform, count in counts.items():
print(f"{platform}: {count} results")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 body(platform: str, query: str) -> dict:
if platform == "google": return {"query": query, "country_code": "us"}
if platform == "amazon": return {"platform": platform, "query": query, "marketplace": "US"}
return {"platform": platform, "query": query}
def search_all(query: str) -> dict:
def fetch(p):
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY}, json=body(p, query))
r.raise_for_status()
return r.json()
with ThreadPoolExecutor(max_workers=4) as ex:
futs = {p: ex.submit(fetch, p) for p in ["google", "amazon", "youtube", "walmart"]}
return {p: f.result() for p, f in futs.items()}
if __name__ == "__main__":
data = search_all("portable bluetooth speaker")
print(f"Google: {len(data['google'].get('organic_results', []))} results")
print(f"Amazon: {len(data['amazon'].get('products', []))} products")
print(f"YouTube: {len(data['youtube'].get('videos', []))} videos")
print(f"Walmart: {len(data['walmart'].get('products', []))} products")Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
function body(platform, query) {
if (platform === "google") return { query, country_code: "us" };
if (platform === "amazon") return { platform, query, marketplace: "US" };
return { platform, query };
}
async function fetchPlatform(platform, query) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify(body(platform, query))
});
return [platform, await res.json()];
}
async function searchAll(query) {
const platforms = ["google", "amazon", "youtube", "walmart"];
const results = await Promise.all(platforms.map(p => fetchPlatform(p, query)));
return Object.fromEntries(results);
}
searchAll("portable bluetooth speaker").then(data => {
console.log(`Google: ${data.google.organic_results?.length || 0} results`);
console.log(`Amazon: ${data.amazon.products?.length || 0} products`);
console.log(`YouTube: ${data.youtube.videos?.length || 0} videos`);
console.log(`Walmart: ${data.walmart.products?.length || 0} products`);
}).catch(console.error);Salida esperada
Google: 10 results
Amazon: 20 products
YouTube: 10 videos
Walmart: 16 products
Top Amazon: JBL Flip 6 Portable Speaker — $79.95
Top Walmart: Anker Soundcore 3 — $35.99