local-place-search

Par brave · brave-search-skills

À UTILISER POUR trouver des lieux dans le monde physique : commerces, points d'intérêt, adresses postales, villes et rues. Les résultats incluent l'adresse, les coordonnées géographiques, la note, les horaires d'ouverture et le téléphone, ce qui évite tout appel complémentaire pour les informations de base. Autonome — aucun ID de POI ni recherche web préalable n'est nécessaire ; les IDs retournés sont compatibles avec local-pois et local-descriptions. Recherche par coordonnées ou par chaîne de localisation, ou omettez les deux pour une recherche globale. Omettez la requête pour parcourir une zone. Maximum 100 résultats.

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

Recherche de lieux (API Search)

Nécessite une clé API : Obtenir une à https://api.search.brave.com

Plan : Inclus dans le plan Search (avec l'option locations). Voir https://api-dashboard.search.brave.com/app/subscriptions/subscribe

Autonome : Contrairement à local-pois et local-descriptions, cet endpoint ne nécessite pas d'identifiants POI d'une recherche web préalable. Vous fournissez directement un lieu et une requête optionnelle.

Démarrage rapide (cURL)

Recherche par requête + coordonnées

curl -s "https://api.search.brave.com/res/v1/local/place_search" \
  -H "Accept: application/json" \
  -H "Accept-Encoding: gzip" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "q=coffee shops" \
  --data-urlencode "latitude=37.7749" \
  --data-urlencode "longitude=-122.4194" \
  --data-urlencode "radius=5000"

Recherche par requête + chaîne de lieu

curl -s "https://api.search.brave.com/res/v1/local/place_search" \
  -H "Accept: application/json" \
  -H "Accept-Encoding: gzip" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "q=sushi restaurants" \
  --data-urlencode "location=tokyo japan" \
  --data-urlencode "country=JP" \
  --data-urlencode "search_lang=en"

Parcourir les POI généraux (sans requête)

curl -s "https://api.search.brave.com/res/v1/local/place_search" \
  -H "Accept: application/json" \
  -H "Accept-Encoding: gzip" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
  -G \
  --data-urlencode "latitude=48.8566" \
  --data-urlencode "longitude=2.3522" \
  --data-urlencode "radius=3000" \
  --data-urlencode "country=FR"

Endpoint

GET https://api.search.brave.com/res/v1/local/place_search

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

Paramètres

Lieu (optionnel mais recommandé)

Fournir une ancre géographique améliore la précision. Vous pouvez utiliser des coordonnées (latitude + longitude) ou une chaîne location. Omettre les deux est autorisé quand une q est fournie — les résultats sont issus mondialement et peuvent être moins précis. Omettre les trois (q, latitude/longitude, et location) renvoie HTTP 422.

Paramètre Type Requis Par défaut Description
latitude float Conditionnel Latitude (-90,0 à 90,0). Requis avec longitude
longitude float Conditionnel Longitude (-180,0 à 180,0). Requis avec latitude
location string Non Chaîne de lieu, alternative aux coordonnées. US : <city> <state> <country> (ex. san francisco ca united states). Non-US : <city> <country> (ex. tokyo japan). Insensible à la casse, pas de virgules nécessaires. L'anglais ou la langue locale la plus courante fonctionne mieux

Recherche

Paramètre Type Requis Par défaut Description
q string Non Requête en texte libre (ex. coffee shops, pizza). Entièrement optionnel — si omis, retourne les POI généraux dans la zone donnée

Options supplémentaires

Paramètre Type Requis Par défaut Description
radius float Non Biais de rayon de recherche autour des coordonnées fournies, en mètres. Pas une limite stricte — les résultats peuvent s'étendre au-delà. Aucune limite supérieure
count int Non 20 Total d'éléments retournés sur tous les buckets (1–100), pas seulement results — une requête d'adresse peut dépenser tout le budget sur addresses/streets
geoloc string Non Géolocalisation de l'utilisateur en tant que <latitude>x<longitude> (ex. 40.7128x-74.0060), utilisée pour calculer distance
country string Non US Pays de recherche (code pays sur 2 lettres ou ALL)
search_lang string Non en Langue pour les résultats de recherche (code langue de 2+ caractères)
ui_lang string Non en-US Langue UI (code locale, ex. en-US)
units string Non metric Unités de mesure : metric ou imperial
safesearch string Non strict Niveau de safe search : off, moderate, ou strict
spellcheck bool Non true S'il faut appliquer la correction orthographique à la requête

Format de réponse

Champs de niveau supérieur

Champ Type Description
type string Toujours "locations"
results array Liste d'objets LocationResult (POI individuels)
cities array Villes correspondantes, type: "city" — voir Champs de lieu géographique
countries array Pays correspondants, type: "country"
regions array Régions correspondantes, type: "region"
neighborhoods array Quartiers correspondants, type: "neighborhood"
addresses array Liste d'objets AddressResult avec type: "address" — emplacements rue + numéro spécifiques
streets array Liste d'objets AddressResult avec type: "street" — rues entières
mixed array Indices d'ordonnancement ResultReference décrivant comment entrelacer les buckets sur un SERP
location object? Info du lieu résolu
location.coordinates [float, float] [latitude, longitude] du centre résolu
location.name string Nom du lieu résolu (ex. "Helsinki")
location.country string Code pays sur 2 lettres (ex. "FI")

Traitez un bucket manquant comme vide. Pour les requêtes de style POI typiques, seul results est rempli, donc les clients qui ne restituent pas des SERP riches peuvent ignorer le reste — sauf pour les requêtes en forme d'adresse ou de rue, qui peuvent retourner results vide et placer chaque correspondance dans addresses/streets.

Champs LocationResult

Chaque élément de results est un LocationResult :

Champ Type Description
type string Toujours "location_result"
title string Nom de l'entreprise/POI
url string URL canonique
description string? Courte description ou libellé de catégorie (ex. "Coffee Shop")
provider_url string URL de page du fournisseur
id string? Identifiant POI opaque (valide ~8 heures, utilisable avec local-pois et local-descriptions)
coordinates [float, float]? [latitude, longitude]
postal_address object displayAddress, plus optionnellement streetAddress, addressLocality, addressRegion, postalCode, country
contact.telephone string? Numéro de téléphone
contact.email string? Adresse e-mail
rating.ratingValue float? Note moyenne
rating.bestRating float? Note maximale possible
rating.reviewCount int? Nombre d'avis
rating.is_tripadvisor bool Si la note provient de Tripadvisor
opening_hours.current_day object[]? Heures d'aujourd'hui (abbr_name, full_name, opens, closes)
opening_hours.days object[][]? Heures pour chaque jour de la semaine
categories string[] Catégories d'entreprise (par défaut [])
price_range string? Indicateur de prix, ex. $, $$, $$ - $$$
serves_cuisine string[]? Types de cuisine (restaurants)
distance.value float? Distance depuis le lieu de recherche
distance.units string? Unité de distance
icon_category string? Slug de catégorie d'icône (ex. cafe)
thumbnail.src string? URL d'image miniature
thumbnail.original string? URL d'image originale
pictures.results object[]? Images supplémentaires (src, original)
profiles object[]? Profils externes (name, url, long_name, img)
timezone string? Fuseau horaire IANA (ex. America/Los_Angeles)
zoom_level int Niveau de zoom de carte suggéré (par défaut 7)

Champs de lieu géographique (cities, countries, regions, neighborhoods)

Les quatre buckets partagent une même structure, différant seulement par l'identifiant type. La spec publiée les nomme CityResult / CountryResult / RegionResult / NeighborhoodResult.

Champ Type Description
type string Identifiant du bucket : city, country, region, ou neighborhood
name string Nom du lieu
country string Code pays du lieu
coordinates [float, float] [latitude, longitude]
thumbnail.src string URL d'image primaire

Champs AddressResult (addresses et streets)

Le même modèle est utilisé pour les deux buckets. Les éléments de addresses ont type: "address" (rue + numéro) ; les éléments de streets ont type: "street" (rue entière).

Champ Type Description
type string "address" (dans addresses) ou "street" (dans streets)
name string Nom d'affichage de l'adresse ou de la rue
coordinates [float, float] [latitude, longitude]
pois object[] Objets LocationResult situés à cette adresse/rue
pois_nearby object[] Objets LocationResult situés à proximité
zoom_level int Niveau de zoom de carte suggéré (par défaut 15)
distance.value float? Distance depuis le lieu de recherche
distance.units string? Unité de distance
postal_address object? displayAddress, streetAddress, addressLocality, addressRegion, country

Ordonnancement mixte (mixed)

mixed est une liste ordonnée d'objets ResultReference indiquant aux clients comment entrelacer les éléments des différents buckets sur un seul SERP.

Champ Type Description
type string Bucket dont extraire : results, cities, countries, regions, neighborhoods, addresses, ou streets
index int? Index de base 0 de l'élément au sein de ce bucket. Peut être null quand all est true
all bool Quand true, tous les éléments restants du bucket nommé doivent être placés à cette position

Les clients qui restituent seulement des POI peuvent ignorer mixed entièrement et lire results directement.

Exemple de réponse

{
  "type": "locations",
  "results": [
    {
      "type": "location_result",
      "title": "Blue Bottle Coffee",
      "url": "https://yelp.com/biz/blue-bottle-coffee-sf",
      "provider_url": "",
      "id": "loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=",
      "description": "Coffee Shop",
      "postal_address": {
        "type": "PostalAddress",
        "displayAddress": "315 Linden St, San Francisco, CA 94102"
      },
      "contact": { "telephone": "+15106533394" },
      "rating": {
        "ratingValue": 4.3,
        "bestRating": 5.0,
        "reviewCount": 1024,
        "is_tripadvisor": true
      },
      "opening_hours": {
        "current_day": [
          { "abbr_name": "Tue", "full_name": "Tuesday", "opens": "07:00", "closes": "18:00" }
        ],
        "days": [
          [{ "abbr_name": "Mon", "full_name": "Monday", "opens": "07:00", "closes": "18:00" }]
        ]
      },
      "coordinates": [37.7763, -122.4215],
      "categories": [],
      "serves_cuisine": ["Cafe", "Coffee Shop"],
      "price_range": "$$",
      "icon_category": "cafe",
      "thumbnail": {
        "src": "https://example.com/thumb.jpg",
        "original": "https://example.com/original.jpg"
      },
      "zoom_level": 7
    }
  ],
  "cities": [],
  "countries": [],
  "regions": [],
  "neighborhoods": [],
  "addresses": [],
  "streets": [],
  "mixed": [
    { "type": "results", "index": 0, "all": false }
  ],
  "location": {
    "coordinates": [37.7749, -122.4194],
    "name": "San Francisco",
    "country": "US"
  }
}

Pour une requête qui correspond à un nom de ville, la réponse ajoute une entrée city dans cities :

{
  "cities": [
    {
      "type": "city",
      "name": "San Francisco",
      "country": "US",
      "coordinates": [37.7749, -122.4194],
      "thumbnail": { "src": "https://example.com/sf.jpg" }
    }
  ],
  "mixed": [
    { "type": "cities", "index": 0, "all": false }
  ]
}

Enrichir les résultats avec les détails POI et les descriptions

Les valeurs id POI de results peuvent être transmises aux endpoints frères pour des données plus riches :

# Obtenir les détails complets du POI (heures, avis, photos, mentions de résultats web)
curl -s "https://api.search.brave.com/res/v1/local/pois" -G \
  --data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"

# Obtenir les descriptions générées par IA
curl -s "https://api.search.brave.com/res/v1/local/descriptions" -G \
  --data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=" \
  -H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"

Cas d'usage

  • Exploration basée sur carte : Rechercher des POI dans une fenêtre de carte visible en utilisant des coordonnées + rayon. Aucune requête préalable nécessaire.
  • Applications géolocalisées : Construire des fonctionnalités « À proximité » — transmettre les coordonnées GPS de l'appareil et une requête pour trouver des entreprises pertinentes.
  • Planification de voyage : Rechercher des attractions, restaurants et hôtels par chaîne de lieu (ex. paris france) sans avoir besoin de coordonnées exactes.

Notes

  • Trouve des lieux, pas des pages : Cet endpoint recherche dans un index géographique de lieux physiques. Utilisez la recherche web pour la récupération d'informations générales.
  • Choisir un rayon : Un rayon plus serré (sous ~20 km) donne des résultats plus focalisés. Augmentez-le pour atteindre des lieux spécifiques ou bien connus plus loin ; pour les recherches de catégories courantes (ex. restaurants), le biais par défaut ou plus serré fonctionne mieux.

Skills similaires