La búsqueda secuencial en varias plataformas tarda entre 5 y 10 segundos, ya que cada llamada a la API espera a que se complete la anterior. La búsqueda en paralelo reduce esto a la latencia de la llamada más lenta (normalmente de 1 a 3 segundos). Este tutorial implementa la búsqueda multiplataforma paralela utilizando Python asyncio y JavaScript Promise.all, ambos llamando a la API de Scavio con la misma clave para todas las plataformas.
Requisitos previos
- Python 3.8+ con aiohttp o Node.js 18+
- Una clave API de Scavio de scavio.dev
Guia paso a paso
Paso 1: Configurar la búsqueda asíncrona en Python
Instale aiohttp y cree una función de búsqueda asíncrona.
pip install aiohttpPaso 2: Construir una función de búsqueda paralela (Python)
Busque en todas las plataformas simultáneamente usando asyncio.gather.
import asyncio, aiohttp, os
API_KEY = os.environ['SCAVIO_API_KEY']
URL = 'https://api.scavio.dev/api/v1/search'
async def search_platform(session, platform: str, query: str) -> dict:
async with session.post(URL, headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'platform': platform, 'query': query}) as resp:
data = await resp.json()
return {'platform': platform, 'results': data.get('organic', [])}
async def parallel_search(query: str, platforms: list = None) -> list:
if platforms is None:
platforms = ['google', 'reddit', 'youtube', 'amazon', 'walmart']
async with aiohttp.ClientSession() as session:
tasks = [search_platform(session, p, query) for p in platforms]
return await asyncio.gather(*tasks)
# Usage:
results = asyncio.run(parallel_search('wireless earbuds'))
for r in results:
print(f"{r['platform']}: {len(r['results'])} results")Paso 3: Crear una función de búsqueda paralela (JavaScript)
Busque en todas las plataformas simultáneamente usando Promise.all.
const URL = 'https://api.scavio.dev/api/v1/search';
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function parallelSearch(query, platforms = ['google', 'reddit', 'youtube', 'amazon', 'walmart']) {
const results = await Promise.all(
platforms.map(async platform => {
const resp = await fetch(URL, {
method: 'POST', headers: H,
body: JSON.stringify({platform, query})
});
const data = await resp.json();
return {platform, results: data.organic || []};
})
);
return results;
}
const results = await parallelSearch('wireless earbuds');
results.forEach(r => console.log(`${r.platform}: ${r.results.length} results`));Paso 4: Fusionar y deduplicar resultados
Combine resultados de todas las plataformas en una única lista clasificada.
def merge_results(parallel_results: list) -> list:
merged = []
seen_urls = set()
for pr in parallel_results:
for r in pr['results']:
url = r.get('link', r.get('url', ''))
if url not in seen_urls:
seen_urls.add(url)
merged.append({**r, 'source_platform': pr['platform']})
return merged
results = asyncio.run(parallel_search('wireless earbuds'))
merged = merge_results(results)
print(f'Total unique results: {len(merged)}')Ejemplo en Python
import asyncio, aiohttp, os
async def parallel_search(query, platforms=['google', 'reddit', 'youtube']):
async with aiohttp.ClientSession() as session:
async def search(p):
async with session.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'},
json={'platform': p, 'query': query}) as r:
return {'platform': p, 'results': (await r.json()).get('organic', [])}
return await asyncio.gather(*[search(p) for p in platforms])
results = asyncio.run(parallel_search('wireless earbuds'))Ejemplo en JavaScript
async function parallelSearch(query, platforms = ['google', 'reddit', 'youtube']) {
return Promise.all(platforms.map(async p => {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: p, query})
});
return {platform: p, results: (await r.json()).organic || []};
}));
}Salida esperada
Multi-platform search results returned in parallel, reducing total latency from sequential 5-10s to parallel 1-3s.