用 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}
]
五、安全与效率最佳实践🔒
-
绝不硬编码密钥
使用.env+python-dotenv,Git 仓库忽略.env -
按需字段
利用fields=name,hotel_id,min_price参数减少回包大小 → 延迟 ↓30% -
本地缓存
加装redis或diskcache把热门城市结果缓存 5 min,命中率 ≥60% -
日志脱敏
打印前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🎯
- 申请官方 Partner → 拿到
BOOKING_API_KEY - 克隆本文代码 → 跑通
get_hotels_with_retry - 加装本地缓存 + 日志脱敏,性能 & 安全 UP
- 用 AI 提示词自动生成 SDK、文档、审查、KPI
- 上线前再读一遍 Terms,合规不踩雷
搞定!🎉 立刻把「实时酒店数据」塞进你的 Python 项目,下一单旅程说走就走!
原文链接: https://www.omi.me/blogs/api-guides/how-to-get-hotel-data-with-booking-com-api-in-python
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)