mcpField
L
local-place-search

local-place-search

github.com/braveその他192410 回インストール11 週間前に更新
リポジトリ

local-place-search について

local-place-searchは、Brave Search APIで実在の場所を検索するスキルです。座標や地名を基点にした検索と、エリア内の一般的なスポットの閲覧に対応します。

主な機能

  1. 01座標または地名で検索
  2. 02クエリで店舗やスポットを検索
  3. 03クエリなしで周辺の場所を閲覧
  4. 04住所、通り、地理的エリアを取得
  5. 05連絡先、評価、営業時間を取得

活用シーン

  1. 01地図の表示範囲内でスポットを探す
  2. 02デバイスの位置から近くの店舗を検索
  3. 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 が返されます。

パラメーター型必須デフォルト説明
latitudefloat条件付き—緯度(-90.0~90.0)。longitude とともに指定する必要があります
longitudefloat条件付き—経度(-180.0~180.0)。latitude とともに指定する必要があります
locationstringいいえ—場所文字列。座標の代わりに指定できます。米国の場合:<city> <state> <country>(例:san francisco ca united states)。米国以外の場合:<city> <country>(例:tokyo japan)。大文字と小文字は区別されず、カンマは不要です。英語または最も一般的な現地語が最適です
検索
パラメーター型必須デフォルト説明
qstringいいえ—自由形式のクエリ(例:coffee shops、pizza)。完全に任意です。省略すると、指定したエリアの一般的な POI が返されます
追加オプション
パラメーター型必須デフォルト説明
radiusfloatいいえ—指定した座標周辺の検索半径のバイアス(メートル単位)。厳密な境界ではないため、結果が範囲外に及ぶ場合があります。上限はありません
countintいいえ20すべてのバケットにわたって返される項目の合計数(1~100)。results だけではありません。住所のクエリでは、上限全体が addresses/streets に使われることがあります
geolocstringいいえ—ユーザーの位置情報(<latitude>x<longitude> 形式。例:40.7128x-74.0060)。distance の計算に使用されます
countrystringいいえUS検索対象の国(2 文字の国コードまたは ALL)
search_langstringいいえen検索結果の言語(2 文字以上の言語コード)
ui_langstringいいえen-USUI の言語(ロケールコード。例:en-US)
unitsstringいいえmetric測定単位:metric または imperial
safesearchstringいいえstrictセーフサーチのレベル:off、moderate、または strict
spellcheckboolいいえtrueクエリにスペルチェックを適用するかどうか

レスポンス形式

最上位フィールド
フィールド型説明
typestring常に "locations" です
resultsarrayLocationResult オブジェクト(個々の POI)のリストです
citiesarray該当する都市。type: "city" — 「地理的な場所のフィールド」を参照してください
countriesarray該当する国。type: "country"
regionsarray該当する地域。type: "region"
neighborhoodsarray該当する近隣地区。type: "neighborhood"
addressesarraytype: "address" の AddressResult オブジェクトのリストです — 番地を含む特定の住所
streetsarraytype: "street" の AddressResult オブジェクトのリストです — 通り全体
mixedarraySERP 上で各バケットをどのように交互に配置するかを示す ResultReference の順序ヒントです
locationobject?解決された場所の情報です
location.coordinates[float, float]解決された中心点の [latitude, longitude] です
location.namestring解決された場所の名前(例:"Helsinki")です
location.countrystring2 文字の国コード(例:"FI")です

バケットが存在しない場合は、空として扱ってください。一般的な POI 形式のクエリでは、results のみが設定されるため、リッチな SERP を表示しないクライアントは、残りを無視できます。ただし、住所や通りの形式のクエリでは、results が空になり、一致する項目がすべて addresses/streets に格納されることがあります。

LocationResult のフィールド

results の各項目は LocationResult です。

フィールド型説明
typestring常に "location_result" です
titlestring事業者/POI の名前です
urlstring正規 URL です
descriptionstring?簡単な説明またはカテゴリラベル(例:"Coffee Shop")です
provider_urlstringプロバイダーのページ URL です
idstring?不透明な POI 識別子です(有効期間は約 8 時間で、local-pois と local-descriptions で使用できます)
coordinates[float, float]?[latitude, longitude] です
postal_addressobjectdisplayAddress と、任意の streetAddress、addressLocality、addressRegion、postalCode、country を含みます
contact.telephonestring?電話番号です
contact.emailstring?メールアドレスです
rating.ratingValuefloat?平均評価です
rating.bestRatingfloat?評価の最高値です
rating.reviewCountint?レビュー数です
rating.is_tripadvisorbool評価が Tripadvisor に由来するかどうかを示します
opening_hours.current_dayobject[]?本日の営業時間(abbr_name、full_name、opens、closes)です
opening_hours.daysobject[][]?曜日ごとの営業時間です
categoriesstring[]事業カテゴリです(デフォルトは [])
price_rangestring?価格の目安です。例:$、$$、$$ - $$$
serves_cuisinestring[]?料理の種類(レストラン)です
distance.valuefloat?検索場所からの距離です
distance.unitsstring?距離の単位です
icon_categorystring?アイコンカテゴリのスラッグです(例:cafe)
thumbnail.srcstring?サムネイル画像の URL です
thumbnail.originalstring?元画像の URL です
pictures.resultsobject[]?追加画像(src、original)です
profilesobject[]?外部プロフィール(name、url、long_name、img)です
timezonestring?IANA タイムゾーンです(例:America/Los_Angeles)
zoom_levelint推奨される地図のズームレベルです(デフォルトは 7)
地理的な場所のフィールド(cities、countries、regions、neighborhoods)

4 つのバケットは、type 識別子のみが異なり、共通の構造を持ちます。公開仕様では、それぞれ CityResult/CountryResult/RegionResult/NeighborhoodResult と名付けられています。

フィールド型説明
typestringバケット識別子:city、country、region、neighborhood のいずれかです
namestring場所の名前です
countrystringその場所の国コードです
coordinates[float, float][latitude, longitude] です
thumbnail.srcstringメイン画像の URL です
AddressResult のフィールド(addresses と streets)

どちらのバケットにも同じモデルが使用されます。addresses の項目は type: "address"(通り+番地)、streets の項目は type: "street"(通り全体)です。

フィールド型説明
typestring"address"(addresses 内)または "street"(streets 内)
namestring住所または通りの表示名
coordinates[float, float][latitude, longitude]
poisobject[]この住所または通りにある LocationResult オブジェクト
pois_nearbyobject[]近くにある LocationResult オブジェクト
zoom_levelint推奨される地図のズームレベル(デフォルトは 15)
distance.valuefloat?検索位置からの距離
distance.unitsstring?距離の単位
postal_addressobject?displayAddress、streetAddress、addressLocality、addressRegion、country
結果の混在順序(mixed)

mixed は、1 つの SERP 上で異なるバケットの項目をどのように並べるかをクライアントに示す、順序付きの ResultReference オブジェクトのリストです。

フィールド型説明
typestring項目を取得するバケット:results、cities、countries、regions、neighborhoods、addresses、または streets
indexint?そのバケット内の項目の 0 始まりのインデックス。all が true の場合は null になることがあります
allbooltrue の場合、指定したバケットの残りの項目をすべてこの位置に配置します

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)では、デフォルトのバイアスまたはより狭い半径が最適です。

コメント