用 Node.js 调用 Booking.com API 获取酒店数据:从安装到缓存、合规一次搞定!
作者:API传播员 · 2025-11-12 · 阅读时间:6分钟
文章目录
Booking.com API 仅向商业合作伙伴开放,个人/小规模项目需先通过官方合作通道申请权限。
本文假设你已拿到BOOKING_API_KEY,我们以沙箱环境为例,完整走通「安装 → 请求 → 缓存 → 合规」全流程,并赠送 AI 提效外挂,复制即可跑!🚀
一. 安装必备依赖📦
npm install axios dotenv node-cache
| 包 | 用途 |
|---|---|
axios |
发送 HTTP 请求 |
dotenv |
安全加载环境变量 |
node-cache |
内存缓存,减少重复调用 |
二. 环境变量与目录结构🔐
project/
├─ .env # 绝不提交到 Git!
├─ src/
│ ├─ booking.js # API 逻辑模块
│ ├─ cache.js # 缓存封装
│ └─ index.js # 入口
└─ package.json
.env 示例:
BOOKING_API_KEY=your_sandbox_key_here
BASE_URL=https://distribution-xml.booking.com/2.4
CACHE_TTL=300
三. 构造请求 + 代码模块化🛠️
官方文档要求:必须携带
Authorization: Bearer <key>且User-Agent含公司名。
src/booking.js
require('dotenv').config();
const axios = require('axios');
const cache = require('./cache');
const instance = axios.create({
baseURL: process.env.BASE_URL,
timeout: 8000,
headers: {
'Authorization': Bearer ${process.env.BOOKING_API_KEY},
'User-Agent': 'YourCompany/1.0 (+https://yourcompany.com)',
'Accept-Encoding': 'gzip',
'Accept': 'application/json'
}
});
/** 获取城市酒店列表
* @param {string} city - 城市英文名
* @param {string} inDate - YYYY-MM-DD
* @param {string} outDate- YYYY-MM-DD
* @param {number} guests- 成人数量
*/
async function fetchHotelData(city, inDate, outDate, guests = 2) {
const cacheKey = hotels:${city}:${inDate}:${outDate}:${guests};
if (cache.has(cacheKey)) return cache.get(cacheKey);
const { data } = await instance.get('/json/hotels', {
params: { city, checkin: inDate, checkout: outDate, guests }
});
// 只保留前端需要的字段,减少传输体积
const slim = data.result.map(h => ({
hotel_id: h.hotel_id,
name: h.name,
address: h.address,
price: h.min_price?.price || 0,
currency: h.min_price?.currency || 'USD'
}));
cache.set(cacheKey, slim);
return slim;
}
module.exports = { fetchHotelData };
四. 缓存封装⚡️
src/cache.js
const NodeCache = require('node-cache');
const cache = new NodeCache({ stdTTL: Number(process.env.CACHE_TTL) });
module.exports = cache;
缓存命中率 ≥60%,即可把平均响应时间从 1.2s → 0.2s
想自动分析缓存收益?用 代码优化 一键生成「命中-失效率」日志报表。
五. 错误处理 & 日志🩺
const pino = require('pino')();
const { fetchHotelData } = require('./src/booking');
(async ()=>{
try {
const hotels = await fetchHotelData('New York', '2025-08-01', '2025-08-03');
pino.info({ count: hotels.length }, 'Hotels fetched');
} catch (err) {
// 统一错误格式
if (err.response?.status === 404) {
pino.warn({ city: 'New York' }, 'City not found in inventory');
} else if (err.response?.status === 429) {
pino.error('Rate limit hit, backing off...');
// TODO: 指数退避
} else {
pino.error(err.message);
}
}
})();
六. 限速 & 重试机制🚦
Booking.com 对沙箱限 100 req/min,生产更高。
使用 axios-retry 自动退避:
npm install axios-retry
在 booking.js 顶部追加:
const axiosRetry = require('axios-retry');
axiosRetry(instance, {
retries: 3,
retryDelay: axiosRetry.exponentialDelay,
retryCondition: (err) => err.response?.status >= 429
});
七. 合规性 & 文档📄
- 合法用途 – 仅用于获批的商业场景,禁止爬取做竞品数据库
- 隐私 – 不得存储客人信用卡信息(PCI DSS)
- User-Agent – 必须包含公司域名,方便官方追踪异常
- 文档 – 使用 代码文档生成器 自动输出函数说明 & 示例,JSDoc 注释秒变 Markdown,团队协作不迷路。
八. AI 提效四连击🚀
| 步骤 | AI 工具 | 产出 |
|---|---|---|
| 生成 SDK | 代码生成 | 一键生成 TypeScript 接口定义 |
| 代码审查 | 代码审查助手 | 提前发现未处理 reject、硬编码密钥 |
| 性能调优 | 代码优化 | 自动合并重复查询,缓存命中率 +25% |
| KPI 量化 | 开发任务管理系统KPI | 把「平均响应时间」「错误率」写进 OKR |
九. 总结 & Next Step✅
- 申请官方 Partner 账号 → 获取
BOOKING_API_KEY - 复制本文代码 → 跑通
fetchHotelData - 加入缓存 + 限速重试,性能 & 稳定性 UP
- 用 AI 提示词自动生成文档、审查、优化、KPI
- 上线前再读一遍 Terms of Service,合规不踩雷
搞定!🎉 立刻把「实时酒店数据」塞进你的 Node.js 项目,下一单旅程说走就走!
原文链接: https://www.omi.me/blogs/api-guides/how-to-fetch-hotel-data-using-booking-com-api-in-node-js
热门推荐
一个账号试用1000+ API
助力AI无缝链接物理世界 · 无需多次注册
3000+提示词助力AI大模型
和专业工程师共享工作效率翻倍的秘密
热门API
- 1. AI文本生成
- 2. AI图片生成_文生图
- 3. AI图片生成_图生图
- 4. AI图像编辑
- 5. AI视频生成_文生视频
- 6. AI视频生成_图生视频
- 7. AI语音合成_文生语音
- 8. AI文本生成(中国)
最新文章
- 如何使用 node.js 和 express 创建 rest api
- 「Flask + Python」RESTful API 极速上手:从 Hello World 到 Docker 容器化 + Auth0 鉴权(含 AI 提效外挂)
- 「API 设计」7 步全流程指南:从需求到最佳实践,一篇就够!
- 「电子签名 API」18 强全景速通:功能、集成、KPI、代码一次给全!
- 2025年暑假大学生AI副业+联盟营销指南:自动化文章与链接实现月入过万
- 如何在Python中使用ChatGPT API?
- FastAPI 异步编程:提升 API 性能
- 什么是 LangChain
- Google News API 的热门话题与趋势分析
- GraphQL API渗透测试指南
- GitHub Copilot API接入指南
- Bun API 入门指南 – Apidog