From e8f2b6172d9f7c4655162c779d7240febc8dfab5 Mon Sep 17 00:00:00 2001 From: only-cli Date: Sat, 22 Aug 2026 12:29:56 -0400 Subject: [PATCH] feat: add docs search to the cloud provider CLIs All three providers render their own docs search client-side, so distilling the search page yields only nav chrome. Microsoft Learn is the exception underneath: its public RSS search endpoint serves real results as a feed, which the engine already renders (same route as Stack Overflow). AWS and Google Cloud expose search only as JSON (#3), so until the engine renders JSON their search goes through DuckDuckGo HTML with a baked-in site: filter, the same endpoint the duckduckgo.com CLI already relies on. Bing was tried first for that job and rejected: it silently drops the site: operator on some queries. Verified live: the Learn RSS endpoint returns titled results for "app service deploy"; the DuckDuckGo route returns real docs.aws.amazon.com pages for "lambda timeout" (it can answer with a rate-limit challenge under rapid-fire automated use, noted in README). --- README.md | 8 ++++---- clis/cloud.google.com.json | 3 ++- clis/docs.aws.amazon.com.json | 3 ++- clis/learn.microsoft.com.json | 3 ++- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index b5c65fb..194dc0f 100644 --- a/README.md +++ b/README.md @@ -87,11 +87,11 @@ Works on any mostly-static site with no per-site setup: news sites, blogs, docum | Stack Overflow | stackoverflow.com (via Atom feeds) | `question `, `tag `, `user `, `recent` | | Yahoo Finance | finance.yahoo.com | `quote `, `news `, `history `, `lookup `, `markets`, `gainers`, `losers`, `trending` | | YouTube | youtube.com | `video `, `channel ` | -| AWS docs | docs.aws.amazon.com | `guide `, `page `, `cli ` | -| Google Cloud docs | cloud.google.com (via docs.cloud.google.com) | `docs `, `page `, `gcloud ` | -| Microsoft Learn | learn.microsoft.com | `azure `, `doc `, `cli ` | +| AWS docs | docs.aws.amazon.com (search via DuckDuckGo) | `guide `, `page `, `cli `, `search ` | +| Google Cloud docs | cloud.google.com (via docs.cloud.google.com, search via DuckDuckGo) | `docs `, `page `, `gcloud `, `search ` | +| Microsoft Learn | learn.microsoft.com (search via its RSS API) | `azure `, `doc `, `cli `, `search ` | -A few of these (X, Stack Overflow, YouTube) read pages that look login-gated or JS-only from the outside, by finding the server-rendered HTML, feed, or inline data the page already ships without a login. Not supported yet: pages that only render with JavaScript, sites behind logins, and sites with hard bot challenges that expose no feed. +A few of these (X, Stack Overflow, YouTube, Microsoft Learn search) read pages that look login-gated or JS-only from the outside, by finding the server-rendered HTML, feed, or inline data the page already ships without a login. AWS and Google Cloud render docs search purely client-side with no feed, so their `search` goes through DuckDuckGo with a baked-in `site:` filter instead. Not supported yet: pages that only render with JavaScript, sites behind logins, and sites with hard bot challenges that expose no feed. Want a website on that list? Open a pull request, or an issue naming the site — see [CONTRIBUTING.md](CONTRIBUTING.md). diff --git a/clis/cloud.google.com.json b/clis/cloud.google.com.json index 43730b1..f2efb78 100644 --- a/clis/cloud.google.com.json +++ b/clis/cloud.google.com.json @@ -3,6 +3,7 @@ "commands": { "docs": { "open": "https://docs.cloud.google.com/{product}/docs", "args": ["product"] }, "page": { "open": "https://docs.cloud.google.com/{product}/docs/{page}", "args": ["product", "page"] }, - "gcloud": { "open": "https://docs.cloud.google.com/sdk/gcloud/reference/{command}", "args": ["command"] } + "gcloud": { "open": "https://docs.cloud.google.com/sdk/gcloud/reference/{command}", "args": ["command"] }, + "search": { "open": "https://html.duckduckgo.com/html/?q=site%3Acloud.google.com+{query}", "args": ["query"] } } } diff --git a/clis/docs.aws.amazon.com.json b/clis/docs.aws.amazon.com.json index 3571ec1..b9aec73 100644 --- a/clis/docs.aws.amazon.com.json +++ b/clis/docs.aws.amazon.com.json @@ -3,6 +3,7 @@ "commands": { "guide": { "open": "https://docs.aws.amazon.com/{service}/latest/userguide/{page}.html", "args": ["service", "page"] }, "page": { "open": "https://docs.aws.amazon.com/{service}/latest/{guide}/{page}.html", "args": ["service", "guide", "page"] }, - "cli": { "open": "https://docs.aws.amazon.com/cli/latest/reference/{command}/", "args": ["command"] } + "cli": { "open": "https://docs.aws.amazon.com/cli/latest/reference/{command}/", "args": ["command"] }, + "search": { "open": "https://html.duckduckgo.com/html/?q=site%3Adocs.aws.amazon.com+{query}", "args": ["query"] } } } diff --git a/clis/learn.microsoft.com.json b/clis/learn.microsoft.com.json index 39bc73a..7e1e551 100644 --- a/clis/learn.microsoft.com.json +++ b/clis/learn.microsoft.com.json @@ -3,6 +3,7 @@ "commands": { "azure": { "open": "https://learn.microsoft.com/en-us/azure/{page}", "args": ["page"] }, "doc": { "open": "https://learn.microsoft.com/en-us/{path}", "args": ["path"] }, - "cli": { "open": "https://learn.microsoft.com/en-us/cli/azure/{command}", "args": ["command"] } + "cli": { "open": "https://learn.microsoft.com/en-us/cli/azure/{command}", "args": ["command"] }, + "search": { "open": "https://learn.microsoft.com/api/search/rss?search={query}&locale=en-us", "args": ["query"] } } }