web-search

À UTILISER pour la recherche web. Retourne des résultats classés avec extraits, URLs et miniatures. Prend en charge les filtres de fraîcheur, SafeSearch, Goggles pour le classement personnalisé et la pagination. Endpoint de recherche principal.

npx skills add https://github.com/brave/brave-search-skills --skill web-search

Recherche Web

Clé API requise : Obtiens-en une sur https://api.search.brave.com

Plan : Inclus dans le plan Search. Voir https://api-dashboard.search.brave.com/app/subscriptions/subscribe

Démarrage rapide (cURL)

Recherche basique

curl -s "https://api.search.brave.com/res/v1/web/search?q=python+web+frameworks" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"

Avec paramètres

curl -s "https://api.search.brave.com/res/v1/web/search" \
  -H "Accept: application/json" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "q=rust programming tutorials" \
  --data-urlencode "country=US" \
  --data-urlencode "search_lang=en" \
  --data-urlencode "count=10" \
  --data-urlencode "safesearch=moderate" \
  --data-urlencode "freshness=pm"

Endpoint

GET https://api.search.brave.com/res/v1/web/search
POST https://api.search.brave.com/res/v1/web/search

Remarque : Les méthodes GET et POST sont toutes deux supportées. POST est utile pour les requêtes longues ou les Goggles complexes.

Authentification : En-tête X-Subscription-Token: <API_KEY>

En-têtes optionnels :

  • Accept-Encoding: gzip — Activer la compression gzip

Quand utiliser la recherche Web

Fonctionnalité Recherche Web (celle-ci) Contexte LLM (llm-context) Réponses (answers)
Sortie Résultats structurés (liens, extraits, métadonnées) Contenu de page pré-extrait pour les LLM Réponses IA complètes avec citations
Types de résultats Web, actualités, vidéos, discussions, FAQ, infobox, lieux, enrichis Extraits de texte, tableaux, code Réponse synthétisée + liste de sources
Fonctionnalités uniques Goggles, données structurées (schemas), callbacks enrichis Contrôle du budget de tokens, modes seuil Recherche multi-itérations, streaming, compatible SDK OpenAI
Vitesse Rapide (~0,5–1 s) Rapide (<1 s) Plus lent (~30–180 s)
Optimal pour UI de recherche, extraction de données, classement personnalisé Pipelines RAG, agents IA, ancrage Interfaces de chat, recherche approfondie

Paramètres

Paramètre Type Requis Défaut Description
q string Oui - Requête de recherche (1–400 caractères, max 50 mots)
country string Non US Pays de recherche (code pays 2 lettres ou ALL)
search_lang string Non en Préférence de langue (code langue 2+ caractères)
ui_lang string Non en-US Langue de l'UI (ex. « en-US »)
count int Non 20 Max résultats par page (1–20)
offset int Non 0 Décalage de page pour pagination (0–9)
safesearch string Non moderate Filtre de contenu adulte (off/moderate/strict)
freshness string Non - Filtre temporel (pd/pw/pm/py ou plage de dates)
text_decorations bool Non true Inclure marqueurs de surlignage
spellcheck bool Non true Correction automatique de requête
result_filter string Non - Filtrer types de résultats (séparés par virgules)
goggles string Non - Filtre de classement personnalisé (URL ou inline)
extra_snippets bool Non - Obtenir jusqu'à 5 extraits supplémentaires par résultat
operators bool Non true Appliquer opérateurs de recherche
units string Non - Unités de mesure (metric/imperial)
enable_rich_callback bool Non false Activer callback de données tierces enrichies
include_fetch_metadata bool Non false Inclure fetched_content_timestamp sur résultats

Valeurs de Freshness

Valeur Description
pd Jour passé (24 heures)
pw Semaine passée (7 jours)
pm Mois passé (31 jours)
py Année passée (365 jours)
YYYY-MM-DDtoYYYY-MM-DD Plage de dates personnalisée

Valeurs de Result Filter

Types de filtre : discussions, faq, infobox, news, query, videos, web, locations

# Uniquement résultats web et vidéo
curl "...&result_filter=web,videos"

En-têtes de localisation (Optionnels)

Pour des résultats conscients de la localisation, ajoute ces en-têtes. Lat/Long suffit quand les coordonnées sont connues — les autres en-têtes ne sont nécessaires qu'en secours quand les coordonnées ne sont pas disponibles.

En-tête Type Description
X-Loc-Lat float Latitude de l'utilisateur (-90,0 à 90,0)
X-Loc-Long float Longitude de l'utilisateur (-180,0 à 180,0)
X-Loc-Timezone string Fuseau horaire IANA (ex. « America/San_Francisco »)
X-Loc-City string Nom de la ville
X-Loc-State string Code état/région (ISO 3166-2)
X-Loc-State-Name string Nom complet état/région (ex. « California »)
X-Loc-Country string Code pays 2 lettres
X-Loc-Postal-Code string Code postal (ex. « 94105 »)

Priorité : X-Loc-Lat + X-Loc-Long prennent le dessus. Quand fournis, les services en aval résolvent la localisation directement à partir des coordonnées et les en-têtes textuels (City, State, Country, Postal-Code) ne sont pas utilisés pour la résolution de localisation. Fournis les en-têtes textuels uniquement quand tu n'as pas de coordonnées. Envoyer les deux ne causera aucun problème — lat/long gagne simplement.

Format de réponse

Champs de réponse

Champ Type Description
type string Toujours "search"
query.original string Requête de recherche originale
query.altered string? Requête corrigée par vérification d'orthographe (si modifiée)
query.cleaned string? Requête nettoyée/normalisée
query.spellcheck_off bool? Si vérification d'orthographe était désactivée
query.more_results_available bool Si plus de pages existent
query.show_strict_warning bool? True si safesearch strict a bloqué résultats adultes
query.search_operators object? Opérateurs de recherche appliqués (applied, cleaned_query, sites)
web.type string Toujours "search"
web.results[].title string Titre de page
web.results[].url string URL de page
web.results[].description string? Texte d'extrait/description
web.results[].age string? Âge lisible (ex. « Il y a 2 jours »)
web.results[].language string? Code langue du contenu
web.results[].meta_url object Composants d'URL (scheme, netloc, hostname, path)
web.results[].thumbnail object? Miniature (src, original)
web.results[].thumbnail.original string? URL image taille complète originale
web.results[].thumbnail.logo bool? Si la miniature est un logo
web.results[].profile object? Identité de l'éditeur (name, url, long_name, img)
web.results[].page_age string? ISO datetime de publication (ex. "2025-04-12T14:22:41")
web.results[].extra_snippets list[str]? Jusqu'à 5 extraits supplémentaires
web.results[].deep_results object? Liens additionnels (buttons, links) de la page
web.results[].schemas list? Données structurées schema.org brutes
web.results[].product object? Info produit et avis
web.results[].recipe object? Détails recette (ingrédients, temps, notes)
web.results[].article object? Métadonnées article (auteur, éditeur, date)
web.results[].book object? Info livre (auteur, ISBN, note)
web.results[].software object? Info produit logiciel
web.results[].rating object? Notes agrégées
web.results[].faq object? FAQ trouvée sur la page
web.results[].movie object? Info film (réalisateurs, acteurs, genre)
web.results[].video object? Métadonnées vidéo (durée, vues, créateur)
web.results[].location object? Détails localisation/restaurant
web.results[].qa object? Info question/réponse
web.results[].creative_work object? Données créations artistiques
web.results[].music_recording object? Données musique/chanson
web.results[].organization object? Info organisation
web.results[].review object? Données avis
web.results[].content_type string? Classification type contenu
web.results[].fetched_content_timestamp int? Timestamp fetch (avec include_fetch_metadata=true)
web.mutated_by_goggles bool Si résultats réclassés par Goggles
web.family_friendly bool Si résultats sont familiaux
mixed object? Ordre d'affichage préféré (voir Réponse mixte ci-dessous)
discussions.results[] array? Clusters discussions forum
discussions.results[].data.forum_name string? Nom forum/communauté
discussions.results[].data.num_answers int? Nombre réponses/commentaires
discussions.results[].data.question string? Question discussion
discussions.results[].data.top_comment string? Extrait commentaire top voté
faq.results[] array? Entrées FAQ
news.results[] array? Articles actualités
videos.results[] array? Résultats vidéos
infobox.results[] array? Entrées graphe de connaissances
locations.results[] array? Résultats POI locaux
rich.hint.vertical string? Type résultat enrichi
rich.hint.callback_key string? Clé callback pour données enrichies

Exemple JSON

{
  "type": "search",
  "query": {
    "original": "python frameworks",
    "altered": "python web frameworks",
    "spellcheck_off": false,
    "more_results_available": true
  },
  "web": {
    "type": "search",
    "results": [
      {
        "title": "Top Python Web Frameworks",
        "url": "https://example.com/python-frameworks",
        "description": "A comprehensive guide to Python web frameworks...",
        "age": "2 days ago",
        "language": "en",
        "meta_url": {
          "scheme": "https",
          "netloc": "example.com",
          "hostname": "example.com",
          "path": "/python-frameworks"
        },
        "thumbnail": {
          "src": "https://...",
          "original": "https://original-image-url.com/img.jpg"
        },
        "extra_snippets": ["Additional excerpt 1...", "Additional excerpt 2..."]
      }
    ],
    "family_friendly": true
  },
  "mixed": {
    "type": "mixed",
    "main": [
      {"type": "web", "index": 0, "all": false},
      {"type": "web", "index": 1, "all": false},
      {"type": "videos", "all": true}
    ],
    "top": [],
    "side": []
  },
  "videos": { "...": "..." },
  "news": { "...": "..." },
  "rich": {
    "type": "rich",
    "hint": {
      "vertical": "weather",
      "callback_key": "<callback_key_hex>"
    }
  }
}

Réponse mixte

L'objet mixed définit l'ordre d'affichage préféré des résultats à travers les types. Il contient trois tableaux :

Tableau Objectif
main Liste des résultats primaires (séquence ordonnée de résultats à afficher)
top Résultats à afficher au-dessus des résultats principaux
side Résultats à afficher à côté des résultats principaux (ex. infobox)

Chaque entrée est une ResultReference avec type (ex. "web", "videos"), index (dans le tableau de résultats correspondant), et all (true pour inclure tous les résultats de ce type à cette position).

Opérateurs de recherche

Opérateur Syntaxe Description
Site site:example.com Limiter résultats à un domaine spécifique
Extension fichier ext:pdf Résultats avec extension fichier spécifique
Type fichier filetype:pdf Résultats créés dans type fichier spécifique
Dans titre intitle:python Pages avec terme dans titre
Dans corps inbody:tutorial Pages avec terme dans corps
Dans page inpage:guide Pages avec terme dans titre ou corps
Langue lang:es Pages dans langue spécifique (ISO 639-1)
Localisation loc:us Pages d'un pays spécifique (ISO 3166-1 alpha-2)
Inclure +term Forcer inclusion d'un terme
Exclure -term Exclure pages contenant le terme
Correspondance exacte "exact phrase" Correspondre phrase exacte en ordre
AND term1 AND term2 Les deux termes requis (majuscules)
OR / NOT term1 OR term2, NOT term Opérateurs logiques (majuscules)

Définis operators=false pour désactiver l'analyse des opérateurs.

Goggles (Classement personnalisé) — Unique à Brave

Les Goggles te permettent de réclasser les résultats de recherche — amplifier sources de confiance, supprimer spam SEO, ou construire scopes de recherche ciblés.

Méthode Exemple
Hébergée --data-urlencode "goggles=https://raw.githubusercontent.com/brave/goggles-quickstart/main/goggles/rust_programming.goggle"
Inline --data-urlencode 'goggles=$discard\n$site=example.com'

Les Goggles hébergés doivent être sur GitHub/GitLab, inclure en-têtes ! name:, ! description:, ! author:, et être enregistrés sur https://search.brave.com/goggles/create. Les règles inline ne nécessitent aucune inscription.

Syntaxe : $boost=N / $downrank=N (1–10), $discard, $site=example.com. Combiner avec virgules : $site=example.com,boost=3. Séparer règles avec \n (%0A).

Liste blanche : $discard\n$site=docs.python.org\n$site=developer.mozilla.orgListe noire : $discard,site=pinterest.com\n$discard,site=quora.com

Ressources : Discover · Syntaxe · Quickstart

Enrichissements de données enrichies

Pour requêtes sur météo, actions, sports, devises, etc., utilise le workflow callback enrichi :

# 1. Rechercher avec callback enrichi activé
curl -s "https://api.search.brave.com/res/v1/web/search?q=weather+san+francisco&enable_rich_callback=true" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"

# Réponse inclut : "rich": {"hint": {"callback_key": "abc123...", "vertical": "weather"}}

# 2. Obtenir données enrichies avec la clé callback
curl -s "https://api.search.brave.com/res/v1/web/rich?callback_key=abc123..." \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"

Types enrichis supportés : Calculator, Definitions, Unit Conversion, Unix Timestamp, Package Tracker, Stock, Currency, Cryptocurrency, Weather, American Football, Baseball, Basketball, Cricket, Football/Soccer, Ice Hockey, Web3, Translator

Endpoint Callback enrichi

GET https://api.search.brave.com/res/v1/web/rich
Paramètre Type Requis Description
callback_key string Oui Clé callback du champ rich.hint.callback_key de la recherche web

Cas d'usage

  • Intégration de recherche généraliste : Ensemble de résultats le plus riche (web, actualités, vidéos, discussions, FAQ, infobox, lieux) en un appel. Pour ancrage RAG/LLM, préfère llm-context.
  • Extraction de données structurées : Produits, recettes, notes, articles via schemas et champs typés sur résultats.
  • Recherche personnalisée avec Goggles : Unique à Brave. Amplifier/ignorer sites avec règles inline ou Goggles hébergés pour classement entièrement personnalisé.

Notes

  • Pagination : Utilise offset (0–9) avec count pour parcourir résultats
  • Count : Max 20 pour recherche web ; résultats réels peuvent être moins que demandé

Skills similaires