local-place-search について
local-place-searchは、Brave Search APIで実在の場所を検索するスキルです。座標や地名を基点にした検索と、エリア内の一般的なスポットの閲覧に対応します。
主な機能
- 01座標または地名で検索
- 02クエリで店舗やスポットを検索
- 03クエリなしで周辺の場所を閲覧
- 04住所、通り、地理的エリアを取得
- 05連絡先、評価、営業時間を取得
活用シーン
- 01地図の表示範囲内でスポットを探す
- 02デバイスの位置から近くの店舗を検索
- 03都市を指定して飲食店や観光先を計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ brave/ brave-search-skills --skill local-place-searchインストール後、Claude Code で/local-place-searchを入力して読み込まれたか確認します。
詳細
場所検索(Search API)
API キーが必要です:https://api.search.brave.com で取得してください。
プラン:
locationsオプションを使用する場合、Search プランに含まれています。https://api-dashboard.search.brave.com/app/subscriptions/subscribe を参照してください。単独で使用可能:
local-poisやlocal-descriptionsとは異なり、このエンドポイントでは、事前のウェブ検索で取得した POI ID は不要です。場所と任意のクエリを直接指定します。
クイックスタート(cURL)
クエリと座標で検索
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"
クエリと場所文字列で検索
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"
一般的な POI を閲覧(クエリなし)
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"
エンドポイント
GET https://api.search.brave.com/res/v1/local/place_search
認証:X-Subscription-Token: <API_KEY> ヘッダー
パラメーター
場所(任意ですが推奨)
地理的な基準点を指定すると、精度が向上します。座標(latitude と longitude)または location 文字列を使用できます。q を指定する場合は、どちらも省略できます。その場合、結果は全世界から取得されるため、精度が低くなる可能性があります。3 つすべて(q、latitude/longitude、location)を省略すると、HTTP 422 が返されます。
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
latitude | float | 条件付き | — | 緯度(-90.0~90.0)。longitude とともに指定する必要があります |
longitude | float | 条件付き | — | 経度(-180.0~180.0)。latitude とともに指定する必要があります |
location | string | いいえ | — | 場所文字列。座標の代わりに指定できます。米国の場合:<city> <state> <country>(例:san francisco ca united states)。米国以外の場合:<city> <country>(例:tokyo japan)。大文字と小文字は区別されず、カンマは不要です。英語または最も一般的な現地語が最適です |
検索
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
q | string | いいえ | — | 自由形式のクエリ(例:coffee shops、pizza)。完全に任意です。省略すると、指定したエリアの一般的な POI が返されます |
追加オプション
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
radius | float | いいえ | — | 指定した座標周辺の検索半径のバイアス(メートル単位)。厳密な境界ではないため、結果が範囲外に及ぶ場合があります。上限はありません |
count | int | いいえ | 20 | すべてのバケットにわたって返される項目の合計数(1~100)。results だけではありません。住所のクエリでは、上限全体が addresses/streets に使われることがあります |
geoloc | string | いいえ | — | ユーザーの位置情報(<latitude>x<longitude> 形式。例:40.7128x-74.0060)。distance の計算に使用されます |
country | string | いいえ | US | 検索対象の国(2 文字の国コードまたは ALL) |
search_lang | string | いいえ | en | 検索結果の言語(2 文字以上の言語コード) |
ui_lang | string | いいえ | en-US | UI の言語(ロケールコード。例:en-US) |
units | string | いいえ | metric | 測定単位:metric または imperial |
safesearch | string | いいえ | strict | セーフサーチのレベル:off、moderate、または strict |
spellcheck | bool | いいえ | true | クエリにスペルチェックを適用するかどうか |
レスポンス形式
最上位フィールド
| フィールド | 型 | 説明 |
|---|---|---|
type | string | 常に "locations" です |
results | array | LocationResult オブジェクト(個々の POI)のリストです |
cities | array | 該当する都市。type: "city" — 「地理的な場所のフィールド」を参照してください |
countries | array | 該当する国。type: "country" |
regions | array | 該当する地域。type: "region" |
neighborhoods | array | 該当する近隣地区。type: "neighborhood" |
addresses | array | type: "address" の AddressResult オブジェクトのリストです — 番地を含む特定の住所 |
streets | array | type: "street" の AddressResult オブジェクトのリストです — 通り全体 |
mixed | array | SERP 上で各バケットをどのように交互に配置するかを示す ResultReference の順序ヒントです |
location | object? | 解決された場所の情報です |
location.coordinates | [float, float] | 解決された中心点の [latitude, longitude] です |
location.name | string | 解決された場所の名前(例:"Helsinki")です |
location.country | string | 2 文字の国コード(例:"FI")です |
バケットが存在しない場合は、空として扱ってください。一般的な POI 形式のクエリでは、results のみが設定されるため、リッチな SERP を表示しないクライアントは、残りを無視できます。ただし、住所や通りの形式のクエリでは、results が空になり、一致する項目がすべて addresses/streets に格納されることがあります。
LocationResult のフィールド
results の各項目は LocationResult です。
| フィールド | 型 | 説明 |
|---|---|---|
type | string | 常に "location_result" です |
title | string | 事業者/POI の名前です |
url | string | 正規 URL です |
description | string? | 簡単な説明またはカテゴリラベル(例:"Coffee Shop")です |
provider_url | string | プロバイダーのページ URL です |
id | string? | 不透明な POI 識別子です(有効期間は約 8 時間で、local-pois と local-descriptions で使用できます) |
coordinates | [float, float]? | [latitude, longitude] です |
postal_address | object | displayAddress と、任意の streetAddress、addressLocality、addressRegion、postalCode、country を含みます |
contact.telephone | string? | 電話番号です |
contact.email | string? | メールアドレスです |
rating.ratingValue | float? | 平均評価です |
rating.bestRating | float? | 評価の最高値です |
rating.reviewCount | int? | レビュー数です |
rating.is_tripadvisor | bool | 評価が Tripadvisor に由来するかどうかを示します |
opening_hours.current_day | object[]? | 本日の営業時間(abbr_name、full_name、opens、closes)です |
opening_hours.days | object[][]? | 曜日ごとの営業時間です |
categories | string[] | 事業カテゴリです(デフォルトは []) |
price_range | string? | 価格の目安です。例:$、$$、$$ - $$$ |
serves_cuisine | string[]? | 料理の種類(レストラン)です |
distance.value | float? | 検索場所からの距離です |
distance.units | string? | 距離の単位です |
icon_category | string? | アイコンカテゴリのスラッグです(例:cafe) |
thumbnail.src | string? | サムネイル画像の URL です |
thumbnail.original | string? | 元画像の URL です |
pictures.results | object[]? | 追加画像(src、original)です |
profiles | object[]? | 外部プロフィール(name、url、long_name、img)です |
timezone | string? | IANA タイムゾーンです(例:America/Los_Angeles) |
zoom_level | int | 推奨される地図のズームレベルです(デフォルトは 7) |
地理的な場所のフィールド(cities、countries、regions、neighborhoods)
4 つのバケットは、type 識別子のみが異なり、共通の構造を持ちます。公開仕様では、それぞれ
CityResult/CountryResult/RegionResult/NeighborhoodResult と名付けられています。
| フィールド | 型 | 説明 |
|---|---|---|
type | string | バケット識別子:city、country、region、neighborhood のいずれかです |
name | string | 場所の名前です |
country | string | その場所の国コードです |
coordinates | [float, float] | [latitude, longitude] です |
thumbnail.src | string | メイン画像の URL です |
AddressResult のフィールド(addresses と streets)
どちらのバケットにも同じモデルが使用されます。addresses の項目は type: "address"(通り+番地)、streets の項目は type: "street"(通り全体)です。
| フィールド | 型 | 説明 |
|---|---|---|
type | string | "address"(addresses 内)または "street"(streets 内) |
name | string | 住所または通りの表示名 |
coordinates | [float, float] | [latitude, longitude] |
pois | object[] | この住所または通りにある LocationResult オブジェクト |
pois_nearby | object[] | 近くにある LocationResult オブジェクト |
zoom_level | int | 推奨される地図のズームレベル(デフォルトは 15) |
distance.value | float? | 検索位置からの距離 |
distance.units | string? | 距離の単位 |
postal_address | object? | displayAddress、streetAddress、addressLocality、addressRegion、country |
結果の混在順序(mixed)
mixed は、1 つの SERP 上で異なるバケットの項目をどのように並べるかをクライアントに示す、順序付きの ResultReference オブジェクトのリストです。
| フィールド | 型 | 説明 |
|---|---|---|
type | string | 項目を取得するバケット:results、cities、countries、regions、neighborhoods、addresses、または streets |
index | int? | そのバケット内の項目の 0 始まりのインデックス。all が true の場合は null になることがあります |
all | bool | true の場合、指定したバケットの残りの項目をすべてこの位置に配置します |
POI のみを表示するクライアントは、mixed を完全に無視して、results を直接読み取ることができます。
レスポンスの例
{
"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"
}
}
都市名に一致するクエリの場合、レスポンスの 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 }
]
}
POI の詳細情報と説明で結果を補完する
results の POI の id を関連するエンドポイントに渡すと、より詳細なデータを取得できます。
# Get full POI details (hours, reviews, photos, web result mentions)
curl -s "https://api.search.brave.com/res/v1/local/pois" -G \
--data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
# Get AI-generated descriptions
curl -s "https://api.search.brave.com/res/v1/local/descriptions" -G \
--data-urlencode "ids=loc4CQWMJWLD4VBEBZ62XQLJTGK6YCJEEJDNAAAAAAA=" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}"
ユースケース
- 地図ベースの探索:座標と半径を使って、表示中の地図のビューポート内にある POI を検索します。事前にクエリを指定する必要はありません。
- 位置情報対応アプリ:「近くの」機能を構築できます。デバイスの GPS 座標とクエリを渡して、関連するビジネスを検索します。
- 旅行の計画:正確な座標がなくても、場所を表す文字列(例:
paris france)で観光スポット、レストラン、ホテルを検索できます。
注意事項
- ページではなく場所を検索:このエンドポイントは、実在する場所の地理インデックスを検索します。一般的な情報検索にはウェブ検索を使用してください。
- 半径の選択:半径を狭く(約 20 km 未満に)すると、より絞り込まれた結果が得られます。特定の場所や有名な場所がさらに遠くにある場合は半径を広げてください。一般的なカテゴリ検索(例:
restaurants)では、デフォルトのバイアスまたはより狭い半径が最適です。