mcpField
P
pp-booking-com

pp-booking-com

github.com/mvanhorn其他2.1k463 次安装今天更新
代码仓库

关于 pp-booking-com

pp-booking-com 是用于操作 Booking.com CLI 的技能,面向需要搜索住宿、比较酒店或处理已登录账户行程的 Agent。它通过本地价格历史支持日期和目的地价格分析,并可导出行程数据。

主要功能

  1. 01搜索住宿并查看酒店详情
  2. 02比较酒店价格、评分和设施
  3. 03分析日期与目的地价格历史
  4. 04跟踪降价及取消期限
  5. 05导出已完成行程数据

适用场景

  1. 01寻找住宿价格较低的入住日期
  2. 02比较两个候选酒店的条件
  3. 03追踪愿望单住宿的降价
  4. 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 已安装。**如果尚未安装,请先安装:

  1. 使用 Printing Press 安装程序安装。在 macOS/Linux 上,二进制文件默认安装到 $HOME/.local/bin;在 Windows 上,默认安装到 %LOCALAPPDATA%\Programs\PrintingPress\bin:
    npx -y @mvanhorn/printing-press-library install booking-com --cli-only
    
  2. 验证:booking-com-pp-cli --version
  3. 确保报告的安装目录位于将调用此技能的 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 cars
  • booking-com-pp-cli trips
  • booking-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需要身份验证
5API 错误(上游问题)
7触发速率限制(等待后重试)
10配置错误

参数解析

解析 $ARGUMENTS:

  1. 为空、help 或 --help → 显示 booking-com-pp-cli --help 输出
  2. 以 install 开头 → 以 mcp 结尾 → 安装 MCP;否则 → 参见上文的先决条件
  3. 其他任何内容 → 直接使用(作为 CLI 命令执行,并带上 --agent)

MCP 服务安装

从此 CLI 发布的公共库条目或预构建版本安装 MCP 二进制文件,然后进行注册:

claude mcp add booking-com-pp-mcp -- booking-com-pp-mcp

验证:claude mcp list

直接使用

  1. 检查是否已安装:which booking-com-pp-cli 如果未找到,提供安装选项(参见本技能顶部的先决条件)。
  2. 根据用户查询,从上文的独特功能和命令参考中选择最合适的命令。
  3. 使用 --agent 标志执行:
    booking-com-pp-cli <command> [subcommand] [args] --agent
    
  4. 如果有歧义,查看子命令帮助:booking-com-pp-cli <command> --help。

评论

支持 Markdown