ScavioScavio
ProduitTarifsDocumentation
ConnexionCommencer
  1. Accueil
  2. Tutoriels
  3. Comment ajouter un repli SearXNG à votre pipeline de recherche
Tutoriel

Comment ajouter un repli SearXNG à votre pipeline de recherche

Ajoutez un repli SearXNG gratuit à votre pipeline de recherche avec basculement automatique vers Scavio lorsque des données structurées sont nécessaires. Code Python inclus.

Obtenez une clé API gratuiteDocumentation API

SearXNG vous offre des résultats de recherche auto-hébergés gratuits mais renvoie du HTML non structuré sans JSON cohérent. Une approche hybride utilise SearXNG pour les requêtes à faible priorité et bascule vers Scavio à $0.005/requête lorsque vous avez besoin de données structurées, de fonctionnalités SERP ou d'une disponibilité garantie. Ce tutoriel construit un pipeline de repli qui essaie d'abord SearXNG puis passe à Scavio lorsque SearXNG renvoie des résultats incomplets.

Prérequis

  • Python 3.8+
  • librairie requests
  • Une clé API Scavio depuis scavio.dev
  • Instance SearXNG (locale ou distante) avec le format JSON activé

Parcours

Étape 1: Configurer les clients SearXNG et Scavio

Mettez en place les deux backends de recherche avec une interface unifiée.

Python
import os, requests, time

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
SCAVIO_H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
SEARXNG_URL = os.environ.get('SEARXNG_URL', 'http://localhost:8080')

def search_searxng(query):
    try:
        r = requests.get(f'{SEARXNG_URL}/search',
            params={'q': query, 'format': 'json', 'engines': 'google'},
            timeout=5)
        r.raise_for_status()
        data = r.json()
        return [{'title': r['title'], 'link': r['url'], 'snippet': r.get('content', '')}
                for r in data.get('results', [])[:10]]
    except Exception as e:
        print(f'SearXNG failed: {e}')
        return None

def search_scavio(query):
    r = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SCAVIO_H, json={'query': query, 'country_code': 'us'})
    return r.json()

print('Clients configured.')

Étape 2: Construire le routeur de repli

Essayez d'abord SearXNG. Si les résultats sont manquants ou incomplets, passez à Scavio.

Python
def search_with_fallback(query, need_structured=False, min_results=5):
    cost = 0.0
    source = 'searxng'
    if not need_structured:
        results = search_searxng(query)
        if results and len(results) >= min_results:
            return {'results': results, 'source': source, 'cost': cost}
        print(f'SearXNG returned {len(results) if results else 0} results, falling back to Scavio')

    source = 'scavio'
    cost = 0.005
    data = search_scavio(query)
    return {
        'results': data.get('organic_results', []),
        'source': source,
        'cost': cost,
        'serp_features': {
            'ai_overview': bool(data.get('ai_overview')),
            'answer_box': bool(data.get('answer_box')),
            'paa': len(data.get('related_questions', []))
        }
    }

r = search_with_fallback('best python web framework 2026')
print(f'Source: {r["source"]}, Results: {len(r["results"])}, Cost: ${r["cost"]:.3f}')

Étape 3: Ajouter des vérifications de santé et des métriques

Suivez la disponibilité de SearXNG et le taux de repli pour estimer les coûts.

Python
from collections import Counter

stats = Counter()

def tracked_search(query, **kwargs):
    r = search_with_fallback(query, **kwargs)
    stats[r['source']] += 1
    stats['total_cost'] += r['cost']
    return r

queries = ['python web framework', 'best serp api', 'tiktok analytics tool',
           'react vs vue 2026', 'llm agent search']
for q in queries:
    r = tracked_search(q)
    print(f'  {q[:35]:35} -> {r["source"]:8} ({len(r["results"])} results)')

print(f'\nSearXNG hits: {stats["searxng"]}, Scavio fallbacks: {stats["scavio"]}')
print(f'Total cost: ${stats["total_cost"]:.3f}')
print(f'Savings vs all-Scavio: ${len(queries) * 0.005 - stats["total_cost"]:.3f}')

Étape 4: Forcer Scavio pour les requêtes structurées

Certaines requêtes ont toujours besoin de données SERP structurées. Acheminez-les directement.

Python
STRUCTURED_PATTERNS = ['price', 'cost', 'pricing', 'buy', 'vs ', 'compare']

def smart_search(query):
    need_structured = any(p in query.lower() for p in STRUCTURED_PATTERNS)
    r = tracked_search(query, need_structured=need_structured)
    if need_structured:
        print(f'  [STRUCTURED] {query[:40]} -> Scavio (SERP features: {r.get("serp_features", {})})')
    else:
        print(f'  [BASIC] {query[:40]} -> {r["source"]}')
    return r

smart_search('python tutorial')
smart_search('scavio vs serpapi pricing')
smart_search('buy noise canceling headphones')
print(f'Total cost: ${stats["total_cost"]:.3f}')

Exemple Python

Python
import os, requests

SCAVIO_H = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
SEARXNG = os.environ.get('SEARXNG_URL', 'http://localhost:8080')

def search(query, force_scavio=False):
    if not force_scavio:
        try:
            r = requests.get(f'{SEARXNG}/search', params={'q': query, 'format': 'json'}, timeout=5)
            results = r.json().get('results', [])[:10]
            if len(results) >= 5:
                print(f'{query}: {len(results)} results via SearXNG (free)')
                return results
        except: pass
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SCAVIO_H, json={'query': query, 'country_code': 'us'}).json()
    print(f'{query}: {len(data.get("organic_results", []))} results via Scavio ($0.005)')
    return data.get('organic_results', [])

search('python api tutorial')
search('serp api pricing comparison', force_scavio=True)

Exemple JavaScript

JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
const SEARXNG = process.env.SEARXNG_URL || 'http://localhost:8080';

async function search(query, forceScavio = false) {
  if (!forceScavio) {
    try {
      const r = await fetch(`${SEARXNG}/search?q=${encodeURIComponent(query)}&format=json`,
        { signal: AbortSignal.timeout(5000) });
      const data = await r.json();
      if (data.results?.length >= 5) {
        console.log(`${query}: ${data.results.length} via SearXNG (free)`);
        return data.results.slice(0, 10);
      }
    } catch {}
  }
  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());
  console.log(`${query}: ${(data.organic_results||[]).length} via Scavio ($0.005)`);
  return data.organic_results || [];
}
search('python tutorial').then(() => search('serp api pricing', true)).catch(console.error);

Sortie attendue

JSON
  python web framework               -> searxng  (8 results)
  best serp api                       -> scavio   (10 results)
  tiktok analytics tool               -> searxng  (7 results)
  react vs vue 2026                   -> searxng  (9 results)
  llm agent search                    -> scavio   (10 results)

SearXNG hits: 3, Scavio fallbacks: 2
Total cost: $0.010
Savings vs all-Scavio: $0.015

Tutoriels associés

  • Comment comparer les modèles de tarification des API SERP de manière programmatique
  • Comment optimiser le budget de recherche de votre agent IA
  • Comment construire un tableau de bord SEO personnalisé avec une API de recherche

Questions fréquentes

La plupart des développeurs terminent ce tutoriel en 15 à 30 minutes. Vous aurez besoin d'une clé API Scavio (l'offre gratuite suffit) et d'un environnement Python ou JavaScript fonctionnel.

Python 3.8+. librairie requests. Une clé API Scavio depuis scavio.dev. Instance SearXNG (locale ou distante) avec le format JSON activé. Une clé API Scavio vous donne 50 crédits gratuits à l'inscription.

Oui. L'offre gratuite comprend 50 crédits à l'inscription, ce qui est largement suffisant pour terminer ce tutoriel et prototyper une solution fonctionnelle.

Scavio dispose d'un package natif LangChain (langchain-scavio), d'un serveur MCP et d'une API REST simple qui fonctionne avec tout client HTTP. Ce tutoriel utilise the raw REST API, mais vous pouvez l'adapter à votre framework de prédilection.

Ressources connexes

Best Of

Meilleures alternatives d'API de recherche auto-hébergées ou hébergées 2026

Read more
Best Of

Meilleures API de recherche pour agents avec offres gratuites (2026)

Read more
Use Case

Recherche hybride SearXNG + API

Read more
Glossary

Comparaison des niveaux gratuits d'API de recherche

Read more
Comparison

Scavio vs SearXNG (self-hosted)

Read more
Comparison

Self-Hosted Search (SearXNG, YaCy) vs Commercial Search APIs (Scavio, Tavily, SerpAPI)

Read more

Commencer

Ajoutez un repli SearXNG gratuit à votre pipeline de recherche avec basculement automatique vers Scavio lorsque des données structurées sont nécessaires. Code Python inclus.

Obtenez une clé API gratuiteLire la documentation
ScavioScavio

API de recherche en temps réel pour agents IA. Recherchez sur toutes les plateformes, pas seulement Google.

Produit

  • Fonctionnalités
  • Tarifs
  • Tableau de bord
  • Affiliés

Développeurs

  • Documentation
  • Référence API
  • Démarrage rapide
  • Intégration MCP
  • SDK Python

Alternatives

  • Alternative à Tavily
  • Alternative à SerpAPI
  • Alternative à Firecrawl
  • Alternative à Exa

Outils

  • Formateur JSON
  • cURL vers code
  • Compteur de jetons
  • Tous les outils

© 2026 Scavio. Tous droits réservés.

Featured on TAAFT
Conditions d'utilisationPolitique de confidentialité