google-hotels について
agent-browser で Google Hotels を検索し、価格、評価、設備、日付ごとの空室状況を調べるホテル検索スキルです。宿泊先の比較に使えますが、予約手続きは行いません。
主な機能
- 01場所やホテル名で検索
- 02指定日の価格と空室状況を確認
- 03評価、設備、料金を比較
- 04検索をセッションごとに分離
活用シーン
- 01異なるエリアのホテルを比較
- 02指定日のホテル料金を調査
- 03評価や設備から宿泊先を探す
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ skillhq/ hotel-search --skill google-hotelsインストール後、Claude Code で/google-hotelsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
README.md.github/workflows/publish.ymlreferences/interaction-patterns.md詳細
Google Hotels の検索
agent-browser を使用して Google Hotels を検索し、ホテルの料金、評価、設備、空室状況を確認します。
使用する場面
- ホテルや宿泊施設を検索、調査、比較したいとユーザーが尋ねた場合
- 都市、地区、またはランドマークの近くにあるホテルの料金を知りたい場合
- 特定の日程でホテルに空室があるか知りたい場合
- エリア内で評価が最も高い、または最も安いホテルを知りたい場合
使用しない場面
- 予約:このスキルでできるのは検索のみです。購入手続きは絶対に完了しないでください
- バケーションレンタル/Airbnb:Google Hotels に表示されるのはホテルであり、レンタル物件ではありません
- 航空券:flight-search スキルを使用してください
- 過去の料金:Google Hotels に表示されるのは現在の料金のみです
- 検索中は Google Hotels から絶対に離れないでください:検索の代替手段として Booking.com、Expedia、Hotels.com、その他の OTA に移動しないでください。例外:検索結果を提示した後、直接予約やプロモーションを確認するためにホテルの公式ウェブサイトを訪問してもかまいません(検索後を参照)。
セッション規則
分離のため、常に --session hotels を使用してください。
URL の高速な方法(推奨)
場所と日付をエンコードした URL を作成します。結果が直接読み込まれます。コマンドは合計3つです。
URL テンプレート
https://www.google.com/travel/search?q={QUERY}&qs=CAE4AA&ts={TS_PARAM}&ap=MAE
{QUERY} は場所またはホテル名、{TS_PARAM} は日付パラメーターを Base64 エンコードしたものです。
URL での日付のエンコード
Google Hotels は日付に protobuf エンコードされた ts パラメーターを使用します。バイト配列の構成は 2025~2030 年で固定です。次の bash 関数を使用して生成してください。
hotel_ts() {
local ci_y=$1 ci_m=$2 ci_d=$3 co_y=$4 co_m=$5 co_d=$6 nights=$7
local cyl=$(printf '%02x' $(( ($ci_y & 0x7f) | 0x80 )))
local cyh=$(printf '%02x' $(($ci_y >> 7)))
local col=$(printf '%02x' $(( ($co_y & 0x7f) | 0x80 )))
local coh=$(printf '%02x' $(($co_y >> 7)))
echo -n "08011a200a021a00121a12140a0708${cyl}${cyh}10$(printf '%02x' $ci_m)18$(printf '%02x' $ci_d)120708${col}${coh}10$(printf '%02x' $co_m)18$(printf '%02x' $co_d)18$(printf '%02x' $nights)32020801" \
| xxd -r -p | base64 | tr -d '\n='
}
# Usage: hotel_ts CHECKIN_YEAR MONTH DAY CHECKOUT_YEAR MONTH DAY NIGHTS
# Example: hotel_ts 2026 3 15 2026 3 20 5
# Output: CAEaIAoCGgASGhIUCgcI6g8QAxgPEgcI6g8QAxgUGAUyAggB
制約:年は 2025~2030、月は 1~12、日は 1~31、宿泊数は 1~127 です。これらの範囲で、現実的なホテル検索をすべて網羅できます。
場所の形式
| 形式 | 例 |
|---|---|
| 都市 | Hotels+in+Bangkok |
| 都市+国 | Hotels+in+Bangkok+Thailand |
| 地区 | Hotels+in+Shibuya+Tokyo |
| ランドマークの近く | Hotels+near+Eiffel+Tower |
| 地域 | Hotels+in+Amalfi+Coast |
| 空港 | Hotels+near+BKK+airport |
| 特定のホテル | Haus+im+Tal+Munich |
URL と対話型機能の比較
| 機能 | URL で指定可能? |
|---|---|
| 場所 | ✅ はい(q= を使用) |
| 日付 | ✅ はい(ts= を使用) |
| 宿泊人数/部屋数 | ❌ 対話形式で設定(デフォルト:1 部屋、2 名) |
| フィルター(星評価、料金、設備) | ❌ 対話形式で設定 |
例:3 月 15~20 日のバンコクのホテル
# Step 1: Generate ts parameter
ts=$(hotel_ts 2026 3 15 2026 3 20 5)
# Step 2: Open with location + dates — results load immediately
agent-browser --session hotels open "https://www.google.com/travel/search?q=Hotels+in+Bangkok&qs=CAE4AA&ts=${ts}&ap=MAE"
agent-browser --session hotels wait --load networkidle
agent-browser --session hotels snapshot -i
# Step 3: Extract results from snapshot, then close
agent-browser --session hotels close
例:日付を指定した特定のホテル
ts=$(hotel_ts 2026 3 9 2026 3 12 3)
agent-browser --session hotels open "https://www.google.com/travel/search?q=Haus+im+Tal+Munich&qs=CAE4AA&ts=${ts}&ap=MAE"
agent-browser --session hotels wait --load networkidle
agent-browser --session hotels snapshot -i
agent-browser --session hotels close
日付を指定しない場合(場所のみ)
ユーザーが日付を指定しない場合は、ts、qs、ap パラメーターを省略してください。
agent-browser --session hotels open "https://www.google.com/travel/search?q=Hotels+in+Bangkok"
agent-browser --session hotels wait --load networkidle
agent-browser --session hotels snapshot -i
検索結果には「~から」の料金が表示されます。ユーザーから後で日付が提示された場合は、対話形式で設定してください(詳細リファレンスを参照)。
カレンダーの操作、宿泊人数/部屋数の選択、フィルターなど、対話型ワークフローの詳細については、詳細リファレンスを参照してください。
結果の形式
結果は、情報をまとめた単一の表で提示してください。
| # | Hotel | Stars | Rating | Price/Night | Total | Via | Key Amenities |
|---|-------|-------|--------|-------------|-------|-----|---------------|
| 1 | Sukhothai Bangkok | ★★★★★ | 9.2 | $185 | $925 | Hotels.com | Pool, Spa, WiFi |
| 2 | Centara Grand | ★★★★★ | 8.8 | $165 | $825 | Booking.com | Pool, Gym, WiFi |
| 3 | Ibis Sukhumvit | ★★★ | 7.4 | $45 | $225 | Agoda | WiFi, Restaurant |
並列セッション
ユーザーが異なる検索条件の比較(例:「渋谷と新宿のホテルを比較して」)を明示的に求めた場合に限り、使用してください。
agent-browser --session shibuya open "https://www.google.com/travel/search?q=Hotels+in+Shibuya+Tokyo" &
agent-browser --session shinjuku open "https://www.google.com/travel/search?q=Hotels+in+Shinjuku+Tokyo" &
wait
agent-browser --session shibuya wait --load networkidle &
agent-browser --session shinjuku wait --load networkidle &
wait
# Set dates in both sessions, then snapshot both
agent-browser --session shibuya snapshot -i
agent-browser --session shinjuku snapshot -i
agent-browser --session shibuya close &
agent-browser --session shinjuku close &
wait
主なルール
| ルール | 理由 |
|---|---|
ts= を使う URL の高速な方法を優先する | 日付指定なら対話操作の 10 回以上ではなく、コマンド 3 つで済みます |
wait --load networkidle | 固定の wait 5000 より効率的です |
| 日付を指定できる場合は、必ず URL にエンコードする | hotel_ts を使用して ts パラメーターを生成します |
テキストには type ではなく fill を使用する | 既存のテキストを先に消去します |
| 場所を入力した後、2 秒待つ | オートコンプリートには API の往復通信が必要です |
| 候補をクリックし、Enter キーは絶対に使わない | オートコンプリートでは Enter キーが不安定です |
| 操作するたびにスナップショットを取り直す | DOM の変更により参照が無効になります |
| 「料金を表示」があるか確認する | 日付がまだ設定されていないことを意味します |
| 検索中は Google Hotels から絶対に離れない | 例外:結果を提示した後、ホテルの公式サイトで直接予約を確認する場合 |
| 「<」と「>」でカレンダーを移動する | カレンダーが違う月に開く場合があります。矢印を使って前後に移動してください |
トラブルシューティング
| 問題 | 解決方法 |
|---|---|
| 同意のポップアップ | 「Accept all」または「Reject all」をクリックします |
| URL の高速検索に失敗する | google.com/travel/hotels の対話型フローに切り替えます |
| 結果が表示されない/「View prices」と表示される | チェックイン日とチェックアウト日を設定します |
| カレンダーが誤った月に開く | 「<」の矢印で前の月へ、「>」で次の月へ移動します。移動後は必ず再度スナップショットを取得し、目的の月が表示されていることを確認します |
| カレンダーのオーバーレイでスナップショットを取得できない | Escape キーを押してカレンダーを閉じ、再度スナップショットを取得してから、日付選択をもう一度開いて試します |
| 料金が古い | 料金はリアルタイムの目安であることを伝えます |
| 通貨が一致しない | Google はブラウザーのロケールに応じた通貨を使用します。不一致があればその旨を伝えます |
| CAPTCHA | ユーザーに伝えます。解決しないでください。しばらく待ってから再試行します |
| リストではなく地図が表示される | 「List」または「View list」の切り替えボタンをクリックします |
| ホテルが見つからない | 表記を変えて試します:正式名称、短い名称、名称+都市名、名称+地区名 |
検索後:直接予約とお得な情報
検索結果を提示した後、よりお得な情報を確認するかどうか、必ずユーザーに尋ねてください。次のような言い方にします:
「[hotel name] の公式サイトで、プロモーションコードや会員料金を確認しましょうか? 公式サイトからの直接予約は、OTA より安いことがよくあります。」
提案するタイミング
- ユーザーがホテル名を指定して検索した場合は、必ず提案します
- 結果にユーザーが関心を持ちそうな明確な第一候補が 1 件ある場合は、必ず提案します
- 複数のホテルを比較している場合は、ユーザーが希望したホテルについて、求められたときに提案します
確認する内容
ホテルの公式サイトを新しいセッション(--session direct)で開き、次の項目を確認します:
- 公式サイトからの直接予約料金 — OTA(Booking.com、Expedia など)より 5~15%ほど安いことがよくあります
- プロモーションコード — バナー、ポップアップ、「offers」「deals」「promotions」ページを探します
- 会員料金・ロイヤルティ料金 — 「初回予約が X%オフになる会員登録」や、無料会員割引などを探します
- パッケージプラン — 朝食付き、無料キャンセル、駐車場付きなど
- 季節ごとのプロモーション — 祝日特別プラン、早期予約料金、直前割引など
# After Google Hotels search is done, visit hotel's direct site
agent-browser --session direct open "https://www.example-hotel.com"
agent-browser --session direct wait --load networkidle
agent-browser --session direct snapshot -i
# Look for: promo banners, "offers" or "deals" links, booking widget prices
agent-browser --session direct close
ホテルチェーンのロイヤルティプログラム
ホテルが大手チェーンに属している場合は、ロイヤルティプログラムについて伝えます。会員はより良い料金、客室のアップグレード、ポイントを利用できることがよくあります:
| チェーン | ブランド | ロイヤルティプログラム | 一般的な会員特典 |
|---|---|---|---|
| IHG | Holiday Inn, InterContinental, Crowne Plaza, Kimpton, Indigo | IHG One Rewards | 会員料金(最安値の場合が多い)、ポイント獲得、特典宿泊で 4 泊目無料 |
| Marriott | Marriott, Sheraton, Westin, W, Ritz-Carlton, Courtyard, Aloft | Marriott Bonvoy | 会員料金、モバイルチェックイン、ポイント/マイル |
| Hilton | Hilton, DoubleTree, Hampton, Conrad, Waldorf Astoria | Hilton Honors | 会員割引、特典宿泊で 5 泊目無料、デジタルキー |
| Accor | Sofitel, Novotel, ibis, Mercure, Moxy, Fairmont | ALL - Accor Live Limitless | 会員料金、ステータス特典 |
| Hyatt | Hyatt, Andaz, Park Hyatt, Thompson | World of Hyatt | 会員料金、無料宿泊特典、スイートへのアップグレード |
チェーンの特定方法
Google Hotels のスナップショットには、チェーン名が含まれていることがよくあります:
"Holiday Inn Express Bangkok Sukhumvit 11 by IHG"→ IHG"Courtyard by Marriott Bangkok"→ Marriott"Hilton Munich City"→ Hilton"Novotel Muenchen City"→ Accor- チェーン名の表記がない → 独立系の可能性が高い(公式サイトを直接確認します)
独立系ホテル
Haus im Tal のような独立系・ブティックホテルの場合:
- 公式サイトでプロモーションコードを確認します(バナーや専用の「Offers」ページに掲載されていることがよくあります)
- 「Book Direct」の特典(最低価格保証、無料特典など)を探します
- ニュースレターの登録割引があるか確認します
- サイトに何も掲載されていない場合は、ウェブ検索でホテル名+「promo code」を検索します
比較結果の提示
確認後、公式サイトと OTA の比較を提示します:
## Haus im Tal — Booking Comparison
| Source | Room Type | Price/Night | Total (3 nights) | Notes |
|--------|-----------|-------------|-------------------|-------|
| Booking.com | Downtown Cozy | €183 | €549 | Free cancellation |
| Hotel direct | Downtown Cozy | €175 | €525 | Use code HIT24 for 5% off |
| Hotel direct (with code) | Downtown Cozy | €166 | €499 | Best price |
ヒント:予約を完了することはできず、リンクと見つかったプロモーションコードを提示するだけであることを、必ずユーザーに伝えてください。
詳細リファレンス
以下をご覧ください:references/interaction-patterns.md:
- 注釈付きの詳細な手順(すべてのコマンドと想定される出力)
- ロケーションのオートコンプリートでの失敗パターンと復旧方法
- 日付選択カレンダーの操作
- 宿泊者と部屋の選択(最も複雑なウィジェット)
- 絞り込み(星評価、料金、アメニティ、キャンセル)
- さらに結果を表示するためのスクロール
- プロバイダーごとの料金比較を含むホテル詳細の掘り下げ
- 直接予約とプロモーション確認のワークフロー