关于 pp-booking-com
pp-booking-com 是用于操作 Booking.com CLI 的技能,面向需要搜索住宿、比较酒店或处理已登录账户行程的 Agent。它通过本地价格历史支持日期和目的地价格分析,并可导出行程数据。
主要功能
- 01搜索住宿并查看酒店详情
- 02比较酒店价格、评分和设施
- 03分析日期与目的地价格历史
- 04跟踪降价及取消期限
- 05导出已完成行程数据
适用场景
- 01寻找住宿价格较低的入住日期
- 02比较两个候选酒店的条件
- 03追踪愿望单住宿的降价
- 04整理过往行程以供报销
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mvanhorn/ printing-press-library --skill pp-booking-com安装后在 Claude Code 中输入/pp-booking-com确认已加载。
详细介绍
Booking.com — Printing Press CLI
前提条件:安装 CLI
此技能由 booking-com-pp-cli 二进制文件驱动。**调用此技能中的任何命令前,必须确认 CLI 已安装。**如果尚未安装,请先安装:
- 使用 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到
$HOME/.local/bin;在 Windows 上,默认安装到%LOCALAPPDATA%\Programs\PrintingPress\bin:npx -y @mvanhorn/printing-press-library install booking-com --cli-only - 验证:
booking-com-pp-cli --version - 确保报告的安装目录位于将调用此技能的 Agent/运行时的
$PATH中。
如果 npx 安装失败(没有 Node、离线等),请改用直接通过 Go 安装的方式(需要 Go 1.26.6 或更高版本):
go install github.com/mvanhorn/printing-press-library/library/travel/booking-com/cmd/booking-com-pp-cli@latest
如果安装后 --version 报告“command not found”,说明运行时无法在 $PATH 中找到二进制文件目录。验证成功前,不要执行此技能中的命令。
何时使用此 CLI
当 Agent 需要搜索 Booking.com、深入查看酒店详情、比较候选项,或使用用户已登录的 Booking 账户(行程、愿望清单、Genius 奖励)时,请使用此 CLI。它适用于扫描最低价格日期、追踪降价以及规划多段行程——这些任务会累积多次调用的结果,并能从本地 SQLite 历史记录中受益。相比通用网页抓取工具,应优先使用它,因为它通过 Surf+Chrome TLS 处理 Booking 的 AWS WAF 通行验证、/dml/graphql 的 CSRF/Cookie 组合,以及已登录页面的 Chrome Cookie 导入。
独特功能
其他任何用于此 API 的工具都不具备这些功能。
持续累积的本地状态
-
prices cheapest— 扫描某家酒店的候选入住日期,为固定住宿晚数返回本地price_history中每晚总价最低的日期。向用户推荐日期前,先使用此功能。它省去了 Booking 手动逐日点击的操作,并通过一次调用展示该住宿的季节性最低价格。
booking-com-pp-cli prices cheapest --slug auliviaopera --country fr --window 2026-06-01..2026-08-31 --nights 3 --agent -
prices cheapest-destination— 扫描某个目的地的候选入住日期,并在最高价格上限内返回价格最低的(住宿,日期)组合。当 Agent 遇到日期灵活、住宿选择也灵活的旅行者时,请使用此功能。它返回受预算约束的帕累托前沿,而不是每个日期各自的排名列表。
booking-com-pp-cli prices cheapest-destination --query Paris --window 2026-06-01..2026-08-31 --nights 3 --max-price 250 --agent -
watch run— 追踪一组(酒店,入住日期,退房日期)元组,并仅显示最新价格比其滚动中位数低到可配置百分比的项目。将此功能安排为每晚运行。大多数日子都不会有结果;当已关注的住宿降价幅度足以采取行动时,它就会带来惊喜。
booking-com-pp-cli watch run --min-pct 7 --agent -
destinations price-band— 汇总某个目的地已同步住宿的price_history,按月输出每晚价格的中位数、最低值和最高值,以及贡献数据的住宿数量。规划月份灵活的行程时请使用此功能。无需手动搜索,即可得知最便宜的月份以及“应避开此月”的提示。
booking-com-pp-cli destinations price-band --query Paris --year 2026 --nights 3 --agent -
search—sync填充本地住宿库后,FTS5 会使用 BM25 对名称、描述和设施字符串中的自由文本查询进行排序,无需网络调用。多次调用
sync构建语料库后,Agent 无需再次访问网络,就能回答涉及多个目的地住宿的问题。booking-com-pp-cli search "boutique near louvre with rooftop" --agent
原生 Agent 管道
-
wishlist drops— 将已认证的心愿单与本地 price_history 合并,并显示最新观测价格比上一次观测低 N% 的已保存住宿。周日早上使用。返回值得立即预订的少量心愿单项目,而不是让用户逐一查看 30-40 个已保存的住宿。
booking-com-pp-cli wishlist drops --since 168h --min-pct 5 --agent -
compare— 并行获取两家酒店的详情和评价,并输出一组配对数据(价格、评分、设施 Δ、距离、免费取消、早餐、近期评价数量)。当 Agent 已将选项缩小到两家酒店时,使用此工具,而不是重新呈现两家酒店的详情页并让用户逐一阅读。
booking-com-pp-cli compare auliviaopera plazaathenee --checkin 2026-07-15 --checkout 2026-07-18 --agent -
trips deadlines— 遍历已认证的即将到来的行程,从每个行程详情中提取免费取消截止时间,并返回截止时间在可配置时间范围内的行程。Booking 会因错过取消截止时间而处罚用户。每周一早上运行此工具,在截止时间到期前及时发现。
booking-com-pp-cli trips deadlines --within 168h --agent -
trips export— 遍历已认证的过往行程列表,打开每个行程详情,并生成确定性的 CSV(确认信息、住宿、入住日期、退房日期、货币、总额、地址),可直接粘贴到费用管理系统中。周一早上使用,为上周的报销做准备。一次调用即可替代逐一点击每个过往行程。
booking-com-pp-cli trips export --state past --since 2026-01-01 --format csv -
reviews stats— 对已同步评价执行本地 SQL 分组统计;按评分区间、语言和旅行者类型分桶,计算数量和评分中位数。纯机械处理,不使用 NLP。当 Agent 要根据旅行者类型匹配住宿时,使用此工具。它会返回分桶分布,免去 Agent 阅读 1000 条评价。
booking-com-pp-cli reviews stats --slug auliviaopera --country fr --by score-band,language,traveler-type --agent
可达性缓解
-
trip plan— 给定多个目的地和日期区间,以及总预算,为每个区间挑选价格最低的住宿,使各区间每晚总价之和符合预算;如果贪心算法超出预算,则使用有界组合回退方案。对于多城市欧洲行程,Agent 可以通过一次往返就回答预算约束问题,无需让用户逐个区间反复调整。
booking-com-pp-cli trip plan --leg Rome:2026-07-10:2026-07-13 --leg Florence:2026-07-13:2026-07-16 --leg Venice:2026-07-16:2026-07-20 --budget 1800 --filters free_cancellation,breakfast,score>=8 --agent -
genius impact— 对已吸收的搜索运行两次:一次使用已认证的 Cookie(应用 Genius 价格),另一次匿名运行;然后比较各住宿的价格,显示 Genius 节省金额。当 Agent 帮助用户评估是否值得争取 Booking Genius 等级时使用。它会报告真实搜索中实际解锁的折扣。
booking-com-pp-cli genius impact --query Paris --checkin 2026-07-15 --checkout 2026-07-18 --adults 2 --agent -
deals mobile-rates— 在桌面端调用的基础上,使用 Chrome 移动端 UA 重新运行已吸收的搜索,并进行比较,以显示 Booking 向桌面端用户隐藏的仅限移动端折扣。当 Agent 寻找优惠时,在推荐桌面端报价之前使用此工具。同一家酒店在相同日期的移动端价格可能低 5-15 个百分点。
booking-com-pp-cli deals mobile-rates --query Paris --checkin 2026-07-15 --checkout 2026-07-18 --agent
HTTP 传输
此 CLI 使用兼容 Chrome 的 HTTP 传输来访问面向浏览器的端点。正常的 API 调用无需常驻的浏览器进程。
发现信号
此 CLI 根据浏览器观察到的流量上下文生成。
- 捕获覆盖范围:14 条网络记录中包含 1 个 API 条目
- 协议:ssr_html(95% 置信度)、rest_graphql(70% 置信度)
- 身份验证信号:无;cookie — cookies:aws-waf-token、bkng、bkng_sso_session、cgumid、bkng_prue
- 生成提示:requires_browser_http、requires_browser_cookie_for_auth_endpoints、has_ssr_html_primary_surface、has_csrf_token_for_graphql、supports_offset_pagination
- 候选命令构想:search — SSR /searchresults.html 返回 25 个可从 HTML 解析的住宿卡片。;hotel get — SSR /hotel//.html 返回完整的酒店 JSON-LD。;reviews list — /reviewlist.html 是一个单独的分页界面。;destinations autocomplete — 首页的自动补全下拉框会触发目的地解析器。;trips list — secure.booking.com/mytrips.html 使用 cookie 身份验证并渲染用户专属界面。;wishlist get — www.booking.com/mywishlist.html?wl_id= 使用 cookie 身份验证加载。;rewards get — secure.booking.com/rewards_and_wallet.html 从已验证身份的页眉链接进入。;profile get — secure.booking.com/mysettings.html 从已验证身份的页眉链接进入(显示了“Matt Van Horn,Genius 3 级”)。
- 注意事项:ssr_dominant:所有观察到的用户可见页面均由服务器渲染。初始搜索、酒店详情、行程和心愿单的数据都通过 HTML 提供,而非 XHR/GraphQL。/dml/graphql 端点确实存在,但本次捕获未对其进行调用;文档记录了它,以供未来地图标记和评论分页工作使用。;empty_authenticated_state:捕获期间,用户的行程和心愿单均为空,因此无法直接观察已填充卡片的响应结构。架构字段是根据 Booking.com 文档、社区封装以及空状态标记推断得出的。
命令参考
account — 位于 secure.booking.com/mysettings.html 的已验证身份账户/个人资料页面。返回显示名称、Genius 等级、账户邮箱(已隐藏)、语言、货币和国家/地区。
booking-com-pp-cli account— 读取已验证身份用户的显示名称、Genius 等级(例如 Level 3)、首选语言和首选货币。
attractions — 位于 www.booking.com/attractions/searchresults/<country>/<city>.html 的景点、旅游和体验项目。返回活动卡片,其中包含价格、时长、评分和用于查询详情的产品 slug。
booking-com-pp-cli attractions get— 获取完整的景点详情(描述、包含项目、时长选项、集合地点、取消政策、评论……booking-com-pp-cli attractions search— 搜索城市中的景点。返回从 SSR 提取的活动卡片,其中包含价格、评分和产品 slug。使用……
cars — 位于 www.booking.com/cars/index.html 的租车首页。Booking.com 租车服务由 Rentalcars 提供支持,并使用自行提交的搜索表单;不支持结果页深层链接 URL。此资源会展示首页和供应商首页(Hertz、Sixt、Avis 等)上的热门优惠,让 Agent 能够推荐取车地点和已知供应商,而不声称可以提供我们无法交付的搜索结果。
booking-com-pp-cli cars— 读取租车首页:精选优惠、支持的供应商,以及支持的城市级取车地点……
destinations — Booking.com 目的地查询。将自由文本目的地字符串(城市、地区、街区、地标)解析为稳定的 dest_id 和 dest_type,供其他命令使用。
booking-com-pp-cli destinations— 通过提交包含ss=<text>的搜索并解析目的地上下文,触发 Booking.com 的目的地解析器……
flights — 位于 flights.booking.com/flights/<ORIG>-<DEST>/ 的航班搜索。Booking 的航班搜索由 Etraveli 提供支持,但提供简洁的 SSR URL 模式。返回航班卡片,其中包含承运航空公司、出发/到达时间、中途停留、时长和价格。
booking-com-pp-cli flights <origin> <destination>— 搜索两个 IATA 机场代码之间的航班。返回从 SSR 提取的航班卡片,其中包含承运航空公司、时间、中途停留信息和……
hotels — 酒店/住宿搜索和详情。hotels list 解析 SSR /searchresults.html 页面(通过 offset 分页,每页 25 条卡片)。hotels get 解析单个 /hotel/<country>/<slug>.html 详情页面,包括 JSON-LD Hotel 架构。
booking-com-pp-cli hotels get— 获取指定国家代码和住宿 slug 的完整酒店详情。解析 Booking.com 的 JSON-LD Hotel 架构,以……booking-com-pp-cli hotels list— 按目的地、日期、客人数和筛选条件搜索 Booking.com 酒店。返回从 SSR 提取的住宿卡片。可组合……
map — 搜索结果集中的地图视图酒店标记。使用 Booking.com 的内部 GraphQL 端点(/dml/graphql,操作为 MapMarkersDesktop),并使用从搜索结果 HTML 中提取的 CSRF 令牌。
booking-com-pp-cli map— 获取指定目的地和日期范围的地图标记数据:每个住宿的纬度、经度、价格摘要和评分……
reviews — 酒店评价。Booking.com 会在酒店详情 HTML 中呈现首批评价;后续页面位于 /reviewlist.html,并以酒店 slug 为索引。
booking-com-pp-cli reviews— 获取酒店的分页评价。返回评价文本、评分、旅行者类型、语言、入住日期和评价者所在国家……
rewards — 在 secure.booking.com/rewards_and_wallet.html 查看已认证用户的 Genius 忠诚度和 Rewards Wallet 状态。返回 Genius 等级(1-3)、已解锁的折扣等级、可用额度和待处理的代金券。
booking-com-pp-cli rewards— 获取已认证用户的 Genius 等级、累计入住次数、当前额度余额、待处理的代金券,以及……
trips — 已认证用户的 My Trips 页面,位于 secure.booking.com/mytrips.html。列出即将到来的和过去的预订,包括确认号码、入住/退房日期、住宿名称和总价。需要导入 cookie。
booking-com-pp-cli trips— 列出已认证用户即将到来的和过去的 Booking.com 预订。读取 SSR HTML,因此不会……
wishlist — 已认证用户在 www.booking.com/mywishlist.html?wl_id=<id> 中的 Saved 愿望清单。用户的愿望清单 ID 会通过会话 cookie 从服务器解析。返回已保存的住宿及其最近查看时的价格快照。
booking-com-pp-cli wishlist— 获取已认证用户的愿望清单。返回每个已保存住宿的名称、slug、国家、最近查看时的价格,以及……
新鲜度约定
此打印 CLI 仅对已注册的、由存储支持的读取命令路径管理有界新鲜度。在 --data-source auto 模式下,这些路径会检查 sync_state,并可能在读取本地数据前执行有界刷新。--data-source local 从不刷新。--data-source live 从 API 读取,且不会修改本地存储。设置 BOOKING_COM_NO_AUTO_REFRESH=1 可跳过新鲜度钩子,而不更改数据源选择。
覆盖的路径:
booking-com-pp-cli carsbooking-com-pp-cli tripsbooking-com-pp-cli wishlist
当 JSON 输出使用生成的来源信息封装时,新鲜度元数据会显示在 meta.freshness 中。请将其视为相应命令路径的当前缓存新鲜度,而非历史数据已完整回填或已通过 API 特定方式补充信息的保证。
查找合适的命令
知道要做什么,但不知道该用哪个命令时,可以直接询问 CLI:
booking-com-pp-cli which "<capability in your own words>"
which 会根据自然语言功能查询,从此 CLI 精选的功能索引中匹配最合适的命令。退出代码 0 表示至少找到一个匹配项;退出代码 2 表示没有足够可信的匹配项——请改用 --help 或缩小查询范围。
示例
今夏在巴黎找最便宜的一周住宿
booking-com-pp-cli prices cheapest-destination --query Paris --window 2026-06-01..2026-08-31 --nights 7 --max-price 200 --agent --select '[].property_name,[].checkin,[].price'
遍历夏季的所有 7 晚时段,返回每晚低于 $200 的最便宜住宿和日期组合;使用 --select 将响应缩减为 Agent 所需的三个字段。
周日早晨的心愿单降价摘要
booking-com-pp-cli wishlist drops --since 168h --min-pct 5 --agent
遍历用户的心愿单,仅返回最近一周内最新价格较上次观察价格至少低 5% 的商品。
详细对比两家酒店
booking-com-pp-cli compare auliviaopera plazaathenee --checkin 2026-07-15 --checkout 2026-07-18 --agent
并排对比两家以 slug 标识的酒店的设施、价格、评分、距离、免费取消政策和近期评价数。
未来一周的免费取消提醒
booking-com-pp-cli trips deadlines --within 168h --agent
遍历已通过身份验证的即将开始的行程,找出未来一周内有免费取消截止日期的行程,并按紧迫程度排序。
在预算范围内规划意大利 3 城行程
booking-com-pp-cli trip plan --leg Rome:2026-07-10:2026-07-13 --leg Florence:2026-07-13:2026-07-16 --leg Venice:2026-07-16:2026-07-20 --budget 1800 --filters free_cancellation,breakfast,score>=8 --agent
并行搜索每一段行程,并为每段挑选价格最低的酒店组合,确保每晚总价不超出预算。
身份验证设置
公开搜索、酒店详情、评价、目的地和地图标记可通过 Surf 匿名运行;Surf 使用 Chrome TLS 指纹,无需 clearance cookie 即可通过 Booking.com 的 AWS WAF 挑战。需要身份验证的命令(行程、心愿单、奖励、个人资料)需要已登录的 Chrome 会话:运行一次 booking-com-pp-cli auth login --chrome,CLI 会导入 booking.com 会话 cookie,后续经过身份验证的调用便会通过 Surf 重放这些 cookie。
运行 booking-com-pp-cli doctor 验证设置。
Agent 模式
向任意命令添加 --agent。该选项会展开为:--json --compact --no-input --no-color --yes。
-
可用于管道 — JSON 输出到 stdout,错误输出到 stderr
-
可筛选 —
--select保留指定字段的子集。点分路径可深入嵌套结构;数组会逐元素遍历。在冗长 API 中,这对控制上下文大小至关重要:booking-com-pp-cli account --agent --select id,name,status -
可预览 —
--dry-run显示请求但不发送 -
适合离线使用 — 有本地 SQLite 存储时,同步/搜索命令可以使用该存储
-
非交互式 — 从不提示输入,每项输入都通过标志指定
-
明确重试 — 仅当已存在的创建操作也应视为成功时,才使用
--idempotent
响应封装
从本地存储或 API 读取数据的命令会将输出封装在来源信息中:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
解析 .results 获取数据,并查看 .meta.source 判断数据来自实时来源还是本地来源。只有当 stdout 是终端,且未设置机器可读格式标志(--json、--csv、--compact、--quiet、--plain、--select)时,才会将便于阅读的 N results (live) 摘要输出到 stderr;通过管道传输的/Agent 消费者以及显式指定格式的运行会在 stdout 输出纯 JSON。
Agent 反馈
当你(或 Agent)发现此 CLI 有什么不妥时,请记录下来:
booking-com-pp-cli feedback "the --since flag is inclusive but docs say exclusive"
booking-com-pp-cli feedback --stdin < notes.txt
booking-com-pp-cli feedback list --json --limit 10
条目会本地存储在 ~/.booking-com-pp-cli/feedback.jsonl。除非设置了 BOOKING_COM_FEEDBACK_ENDPOINT,并且传入了 --send 或设置了 BOOKING_COM_FEEDBACK_AUTO_SEND=true,否则不会通过 POST 发送。默认行为仅在本地存储。
写下令你意外的地方,而不是编写 Bug 报告。简短、具体、一行即可:这才是能不断积累价值的部分。
输出交付
每个命令都接受 --deliver <sink>。输出会发送到指定目标,同时输出到 stdout,或取代 stdout 输出,让 Agent 无需手动通过管道传输即可路由命令结果。支持三种目标:
| 目标 | 效果 |
|---|---|
stdout | 默认;仅写入 stdout |
file:<path> | 将输出原子性地写入 <path>(临时文件 + 重命名) |
webhook:<url> | 将输出正文 POST 到该 URL(使用 --compact 时为 application/json 或 application/x-ndjson) |
不支持的方案会被拒绝,并返回列出受支持方案的结构化错误。Webhook 请求失败时会返回非零状态码,并在 stderr 记录 URL 和 HTTP 状态码。
命名配置
配置是保存的一组标志值,可在多次调用中重复使用。当定时运行的 Agent 每次都以相同配置调用同一命令时,可以使用配置——这是 HeyGen 的“Beacon”模式。
booking-com-pp-cli profile save briefing --json
booking-com-pp-cli --profile briefing account
booking-com-pp-cli profile list --json
booking-com-pp-cli profile show briefing
booking-com-pp-cli profile delete briefing --yes
显式标志始终优先于配置值;配置值优先于默认值。agent-context 会在 available_profiles 下列出所有可用配置,方便自省 Agent 在运行时发现它们。
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 成功 |
| 2 | 用法错误(参数错误) |
| 3 | 未找到资源 |
| 4 | 需要身份验证 |
| 5 | API 错误(上游问题) |
| 7 | 触发速率限制(等待后重试) |
| 10 | 配置错误 |
参数解析
解析 $ARGUMENTS:
- 为空、
help或--help→ 显示booking-com-pp-cli --help输出 - 以
install开头 → 以mcp结尾 → 安装 MCP;否则 → 参见上文的先决条件 - 其他任何内容 → 直接使用(作为 CLI 命令执行,并带上
--agent)
MCP 服务安装
从此 CLI 发布的公共库条目或预构建版本安装 MCP 二进制文件,然后进行注册:
claude mcp add booking-com-pp-mcp -- booking-com-pp-mcp
验证:claude mcp list
直接使用
- 检查是否已安装:
which booking-com-pp-cli如果未找到,提供安装选项(参见本技能顶部的先决条件)。 - 根据用户查询,从上文的独特功能和命令参考中选择最合适的命令。
- 使用
--agent标志执行:booking-com-pp-cli <command> [subcommand] [args] --agent - 如果有歧义,查看子命令帮助:
booking-com-pp-cli <command> --help。