feat(vrbo): add VRBO vacation-rental search skill via Patchright#19
Open
fyodoriv wants to merge 1 commit into
Open
feat(vrbo): add VRBO vacation-rental search skill via Patchright#19fyodoriv wants to merge 1 commit into
fyodoriv wants to merge 1 commit into
Conversation
VRBO sits behind Akamai Bot Manager (429 to plain HTTP, @playwright/mcp, and curl). Add a Patchright-driven skill mirroring the southwest/amex-travel pattern: headed browser, homepage warm-up + retry, hard-429 + soft-interstitial detection, lazy-render scroll/poll, and SERP price parsing (per-night + all-in total, taxes-included flag). No login required (public search results). Complements the Airbnb MCP for whole-home and group stays — professionally managed mountain-town condos are often on VRBO but not Airbnb. Wired into compare-hotels (source table + workflow). Follows CONTRIBUTING: skill under plugins/.../skills/vrbo with required frontmatter (category/summary/api_key, no colons/quotes/backticks), row added to scripts/skill-meta.tsv, README + llms.txt regenerated via gen-skill-tables. scripts/smoke-test.sh --quick passes all checks applicable to this change. Tests: 17 stdlib-unittest cases cover the pure logic (URL build, block detection, price parse, skeleton filter, enrichment) — no browser/network. Writing them caught a missing 'import re' the one successful live run never exercised. Run: python3 -m unittest discover -s skills/vrbo/tests Proven against live Canmore inventory; Akamai is IP-rate-limited so the browser path runs best from a residential connection (documented in SKILL.md).
8714505 to
3e06d35
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why this is needed
The toolkit has hotel and Airbnb coverage but no VRBO source. VRBO carries professionally-managed condos and cabins (especially in resort/mountain towns) that often aren't on Airbnb, so for whole-home and group stays there's a real gap. VRBO can't be added the easy way: it sits behind Akamai Bot Manager — plain HTTP,
@playwright/mcp, andcurlall get a429 Too Many Requests("Provisioned request rate has been exceeded"), and there's no public API.This adds a
vrboskill that beats that wall the same way the existingsouthwest/chase-travel/amex-travelskills beat theirs: Patchright (undetected Playwright fork), run headed, with a homepage warm-up + retry. No login required — VRBO search results are public.What's included
plugins/travel-hacking-toolkit/skills/vrbo/—SKILL.md,scripts/search_vrbo.py(Patchright search + 3-layer extraction: embedded state blob →data-stidlodging cards → anchor fallback),Dockerfile+scripts/entrypoint.sh(headed via Xvfb), mirroring the existing portal-skill layout.pricePerNight+priceTotalwith apriceIncludesTaxesflag (the SERP total includes taxes & fees — verified against live data).compare-hotels— VRBO wired into the source table + workflow alongside the Airbnb MCP.unittestcases covering the pure logic (URL building, block detection, price parsing, skeleton filter, enrichment). No browser/network.Compliance with CONTRIBUTING.md
plugins/travel-hacking-toolkit/skills/vrbo/with the required frontmatter (category,summary,api_key) and no colons / quotes / backticks in values.scripts/skill-meta.tsv;README.md+llms.txtregenerated viascripts/gen-skill-tables.sh(not hand-edited).bash scripts/smoke-test.sh --quickpasses every check applicable to this change. The only two red checks are pre-existing onmain, not introduced here — stale data files (points-valuations/sweet-spots/transfer-bonusespast their TTL) and atimeout: command not foundshim that only fails on macOS (Ubuntu CI hastimeout). Both reproduce identically on a cleanmaincheckout with no VRBO changes.Test results
Writing the tests caught a real bug — a missing
import rethe price-parser needed but that the one successful live run had never exercised (later runs were blocked before reaching it). Fixed in this PR.Manual verification (browser path)
The browser-driven path can't be unit-tested without a live residential connection (Akamai IP-rate-limits datacenter / CI / VPN IPs). Verified manually:
returned real Canmore inventory with names, all-in prices (incl. taxes & fees), and booking URLs. The
SKILL.md"Known fragility" section documents the IP-rate-limit reality.Notes for the maintainer
Dockerfileis included so the skill matches thesouthwest/amex-travelpattern and can be built locally, but I have no ghcr.io push access — sodocker_imageis intentionally left out of the frontmatter andsetup.sh, keeping the smoke-test image-existence check green. If you want to publishghcr.io/borski/vrbo, I'm happy to add the frontmatter + setup entries in a follow-up.unittestandpytest. They're additive — the repo'ssmoke-testremains the CI gate; I did not add a workflow.🤖 Written by an agent, not Fyodor. Ping me if this looks off.