SearXNG requiere Docker, actualizaciones periódicas y pausas cuando los motores anteriores cambian su HTML. Este tutorial migra su agente de SearXNG a la API de búsqueda de Scavio. Mantiene el mismo formato de resultados que espera su agente pero elimina la carga de mantenimiento. La API cuesta $0,005/consulta frente a los costos del servidor para ejecutar SearXNG.
Requisitos previos
- Python 3.8+
- solicita biblioteca
- Una clave API de Scavio de scavio.dev
- Integración existente de SearXNG para reemplazar
Guia paso a paso
Paso 1: Asignar el formato de respuesta SearXNG al formato API
Compare la salida JSON de SearXNG con la respuesta de la API de Scavio para crear una capa de traducción.
import os, requests, json
API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
# SearXNG returns this format:
SEARXNG_FORMAT = {
'results': [
{'title': '...', 'url': '...', 'content': '...', 'engine': 'google'},
],
'number_of_results': 10,
}
def scavio_to_searxng_format(query):
"""Call Scavio API and return data in SearXNG format."""
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': query, 'country_code': 'us'}, timeout=10)
resp.raise_for_status()
data = resp.json()
results = []
for r in data.get('organic_results', []):
results.append({
'title': r.get('title', ''),
'url': r.get('link', ''),
'content': r.get('snippet', ''),
'engine': 'scavio',
'score': r.get('position', 0),
})
return {
'results': results,
'number_of_results': len(results),
'query': query,
}
# Test the translation
result = scavio_to_searxng_format('python web framework comparison 2026')
print(f'Query: {result["query"]}')
print(f'Results: {result["number_of_results"]}')
for r in result['results'][:3]:
print(f' [{r["engine"]}] {r["title"][:50]}')
print(f' {r["url"]}')Paso 2: Crear una función de reemplazo directo
Reemplace la llamada SearXNG con la llamada API, manteniendo la misma firma de función.
# BEFORE: SearXNG call
# def search(query, num_results=10):
# resp = requests.get('http://localhost:8888/search',
# params={'q': query, 'format': 'json', 'engines': 'google'})
# return resp.json()['results'][:num_results]
# AFTER: Scavio API call (same interface)
def search(query, num_results=10):
"""Drop-in replacement for SearXNG search."""
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': query, 'country_code': 'us'}, timeout=10)
resp.raise_for_status()
data = resp.json()
return [{
'title': r.get('title', ''),
'url': r.get('link', ''),
'content': r.get('snippet', ''),
'engine': 'scavio',
} for r in data.get('organic_results', [])[:num_results]]
# Your existing code works without changes:
results = search('best python web framework 2026', num_results=5)
for r in results:
print(f' {r["title"][:50]} ({r["engine"]})')
print(f' {r["url"]}')
print(f'\nNo Docker. No maintenance. $0.005/query.')Paso 3: Agregue una búsqueda específica de la plataforma para obtener resultados más completos
A diferencia de SearXNG, la API admite consultas específicas de la plataforma para Reddit, YouTube y más.
def search_platform(query, platform=None, num_results=5):
"""Extended search with platform support (not possible with SearXNG)."""
body = {'query': query, 'country_code': 'us'}
if platform:
body['platform'] = platform
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json=body, timeout=10)
resp.raise_for_status()
data = resp.json()
return [{'title': r.get('title', ''), 'url': r.get('link', ''),
'content': r.get('snippet', '')}
for r in data.get('organic_results', [])[:num_results]]
# SearXNG could only do web search. API does platform-specific:
print('=== Google Web ===')
for r in search_platform('FastAPI deployment', num_results=3):
print(f' {r["title"][:50]}')
print('\n=== Reddit ===')
for r in search_platform('FastAPI deployment', platform='reddit', num_results=3):
print(f' {r["title"][:50]}')
print('\n=== YouTube ===')
for r in search_platform('FastAPI deployment', platform='youtube', num_results=3):
print(f' {r["title"][:50]}')
print(f'\nSearXNG: $20-50/mo server + maintenance')
print(f'Scavio API: $0.005/query, zero maintenance')Ejemplo en Python
import os, requests
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
# Drop-in SearXNG replacement
def search(query, num_results=10):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': query, 'country_code': 'us'}, timeout=10).json()
return [{'title': r['title'], 'url': r['link'], 'content': r.get('snippet', '')}
for r in data.get('organic_results', [])[:num_results]]
for r in search('SearXNG alternative api', 5):
print(f'{r["title"][:50]}')Ejemplo en JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
// Drop-in SearXNG replacement
async function search(query, numResults = 10) {
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH,
body: JSON.stringify({ query, country_code: 'us' })
}).then(r => r.json());
return (data.organic_results || []).slice(0, numResults)
.map(r => ({ title: r.title, url: r.link, content: r.snippet }));
}
const results = await search('SearXNG alternative', 5);
results.forEach(r => console.log(r.title));Salida esperada
Query: python web framework comparison 2026
Results: 10
[scavio] FastAPI vs Django vs Flask: Python Web Framewor
https://...
=== Google Web ===
FastAPI Deployment Guide: Docker, AWS, and GCP
=== Reddit ===
r/Python - Best way to deploy FastAPI in production
=== YouTube ===
FastAPI Deployment Tutorial 2026 - Full Guide
SearXNG: $20-50/mo server + maintenance
Scavio API: $0.005/query, zero maintenance