Migre de Brave Search API a Scavio reemplazando la URL del punto final, cambiando de autenticación de parámetro de consulta a un encabezado x-api-key y actualizando su analizador de respuestas para que coincida con la estructura JSON de Scavio. La migración suele tardar menos de 30 minutos en la mayoría de las bases de código. Scavio cubre Google, Amazon, YouTube, Reddit y Walmart a través de una única clave API, lo que elimina la necesidad de cuentas de proveedores independientes. Este tutorial explica los cambios de código exactos necesarios tanto en Python como en JavaScript.
Requisitos previos
- Una base de código existente que utiliza Brave Search API
- Una clave API de Scavio de scavio.dev
- Python 3.8+ o Node.js 18+
- Familiaridad básica con las bibliotecas de solicitudes HTTP
Guia paso a paso
Paso 1: Mapear el formato de solicitud
Brave usa GET con parámetros de consulta y un encabezado de token de suscripción. Scavio usa POST con un cuerpo JSON y un encabezado x-api-key. Reemplace la llamada de solicitud.
import requests, os
# BEFORE: Brave Search
# resp = requests.get('https://api.search.brave.com/res/v1/web/search',
# headers={'X-Subscription-Token': BRAVE_KEY},
# params={'q': 'best crm 2026'})
# AFTER: Scavio
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': 'google', 'query': 'best crm 2026'})
data = resp.json()Paso 2: Actualizar análisis de respuesta
Brave devuelve resultados en web.results. Scavio los devuelve en resultados_orgánicos. Actualice su analizador en consecuencia.
# BEFORE: Brave response parsing
# results = data.get('web', {}).get('results', [])
# for r in results:
# title = r['title']
# url = r['url']
# snippet = r.get('description', '')
# AFTER: Scavio response parsing
results = data.get('organic_results', [])
for r in results:
title = r['title']
url = r['link']
snippet = r.get('snippet', '')
print(f'{title} - {url}')Paso 3: Construya un contenedor de compatibilidad
Si tiene muchos sitios de llamadas, cree una función contenedora que presente la interfaz anterior mientras llama a Scavio bajo el capó.
def brave_compatible_search(query: str, count: int = 10) -> dict:
"""Drop-in replacement for Brave Search API calls."""
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': 'google', 'query': query})
resp.raise_for_status()
scavio_results = resp.json().get('organic_results', [])[:count]
return {
'web': {
'results': [{
'title': r.get('title', ''),
'url': r.get('link', ''),
'description': r.get('snippet', ''),
} for r in scavio_results]
}
}Paso 4: Actualizar variables de entorno y probar
Reemplace la var de entorno BRAVE_API_KEY con SCAVIO_API_KEY y ejecute su conjunto de pruebas para verificar que los resultados se analicen correctamente.
# In your .env or environment:
# Remove: BRAVE_API_KEY=brv_xxx
# Add: SCAVIO_API_KEY=your_scavio_key
# Quick smoke test:
def test_migration():
result = brave_compatible_search('python web frameworks')
items = result['web']['results']
assert len(items) > 0, 'No results returned'
assert items[0]['title'], 'Missing title'
assert items[0]['url'].startswith('http'), 'Invalid URL'
print(f'Migration OK: {len(items)} results')
test_migration()Ejemplo en Python
import requests, os
def scavio_search(query, platform='google'):
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
json={'platform': platform, 'query': query})
resp.raise_for_status()
return resp.json().get('organic_results', [])
# Replaces: requests.get('https://api.search.brave.com/...')
results = scavio_search('best crm 2026')
for r in results[:5]:
print(f"{r['title']} -> {r['link']}")Ejemplo en JavaScript
async function scavioSearch(query, platform = 'google') {
const resp = 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, query})
});
const data = await resp.json();
return data.organic_results || [];
}
// Replaces: fetch('https://api.search.brave.com/...')
const results = await scavioSearch('best crm 2026');
results.slice(0, 5).forEach(r => console.log(`${r.title} -> ${r.link}`));Salida esperada
A fully migrated codebase where all Brave Search API calls now route through Scavio, with identical output format via a compatibility wrapper.