用 Python 调用 Booking.com API 获取酒店数据:从安装到安全优化,一篇就够

作者:API传播员 · 2025-11-11 · 阅读时间:6分钟

Booking.com API 仅对商业合作伙伴开放,个人需先通过官方通道申请权限。
本文假设你已拿到 BOOKING_API_KEY,以沙箱环境为例,手把手跑通「请求 → 解析 → 限流 → 安全」全流程,并附赠 AI 提效外挂,复制即可跑!


一、安装依赖 & 环境准备📦

pip install requests python-dotenv
用途
requests 发送 HTTP 请求
python-dotenv 安全加载 .env 中的 BOOKING_API_KEY

项目结构:

project/
├─ .env # 不提交 Git!
├─ booking_client.py # 封装 API 调用
├─ main.py # 入口脚本
└─ README.md # 自动生成的文档

二、验证并发起第一次 API 调用🔑

.env

BOOKING_API_KEY=your_sandbox_key_here
BASE_URL=https://distribution-xml.booking.com/2.4/json

booking_client.py

import os
import requests
from dotenv import load_dotenv

load_dotenv()

class BookingClient:
    def __init__(self):
        self.key = os.getenv("BOOKING_API_KEY")
        self.base = os.getenv("BASE_URL")
        self.session = requests.Session()
        self.session.headers.update({
            "Authorization": f"Bearer {self.key}",
            "User-Agent": "YourCompany/1.0 (+https://yourcompany.com)",
            "Accept-Encoding": "gzip",
            "Accept": "application/json"
        })

    def get_hotels(self, city, check_in, check_out, guests=2, limit=10):
        url = f"{self.base}/hotels"
        params = {
            "city": city,
            "checkin": check_in,
            "checkout": check_out,
            "guests": guests,
            "limit": limit
        }
        resp = self.session.get(url, params=params)
        resp.raise_for_status()
        return resp.json()

把「获取 token → 自动刷新」逻辑想封装成装饰器?用 代码生成 选择「OAuth2 自动刷新」模板,10 秒生成可运行代码。


三、速率限制 & 错误处理🛡️

Booking.com 沙箱默认 100 req/min,超出返回 429

booking_client.py(续)

from time import sleep

class BookingClient:
    ...
    def get_hotels_with_retry(self, city, check_in, check_out, guests=2, limit=10, retries=3):
        for attempt in range(retries):
            try:
                return self.get_hotels(city, check_in, check_out, guests, limit)
            except requests.HTTPError as e:
                if e.response.status_code == 429:
                    sleep(2 ** attempt)  # 指数退避
                    continue
                raise
        raise RuntimeError("重试次数耗尽")

想自动识别所有异常分支?用 代码审查助手 扫描 except 完整性,提前发现未处理状态码。


四、解析 & 使用数据📊

main.py

from booking_client import BookingClient
from pprint import pprint

client = BookingClient()
data = client.get_hotels_with_retry("New York", "2025-08-01", "2025-08-03")

hotels = data.get("result", [])
slim = [
    {
        "hotel_id": h["hotel_id"],
        "name": h["name"],
        "address": h.get("address", "N/A"),
        "price": h.get("min_price", {}).get("price", 0),
        "currency": h.get("min_price", {}).get("currency", "USD")
    }
    for h in hotels
]
pprint(slim)

输出示例:

[
 {'address': '123 Broadway, New York, NY 10007',
  'currency': 'USD',
  'hotel_id': '123456',
  'name': 'Hotel Broadway',
  'price': 180.0}
]

五、安全与效率最佳实践🔒

  1. 绝不硬编码密钥
    使用 .env + python-dotenv,Git 仓库忽略 .env

  2. 按需字段
    利用 fields=name,hotel_id,min_price 参数减少回包大小 → 延迟 ↓30%

  3. 本地缓存
    加装 redisdiskcache 把热门城市结果缓存 5 min,命中率 ≥60%

  4. 日志脱敏
    打印前 re.sub(r"key=\w+", "key=***", url)

想自动生成缓存装饰器?用 代码优化 一键帮你加 functools.lru_cache + 异步 asyncio 版本,性能翻倍。


六、AI 提效四连击🚀

步骤 AI 工具 产出
生成 SDK 代码生成 10 秒输出 Python/Java/TS 多语言客户端
文档自动化 代码文档生成器 自动把 docstring → Markdown + 可运行示例
代码审查 代码审查助手 提前发现未处理 KeyError、硬编码密钥
KPI 量化 开发任务管理系统KPI 把「平均响应时间」「缓存命中率」写进 OKR

七、Next Step🎯

  1. 申请官方 Partner → 拿到 BOOKING_API_KEY
  2. 克隆本文代码 → 跑通 get_hotels_with_retry
  3. 加装本地缓存 + 日志脱敏,性能 & 安全 UP
  4. 用 AI 提示词自动生成 SDK、文档、审查、KPI
  5. 上线前再读一遍 Terms,合规不踩雷

搞定!🎉 立刻把「实时酒店数据」塞进你的 Python 项目,下一单旅程说走就走!


原文链接: https://www.omi.me/blogs/api-guides/how-to-get-hotel-data-with-booking-com-api-in-python