:把 Yahoo(Bing 驅(qū)動)搜索結(jié)果變成可腳本化的 CLI 命令)
OpenCLI Yahoo Search 適配器實戰(zhàn)把 YahooBing 驅(qū)動搜索結(jié)果變成可腳本化的 CLI 命令【免費下載鏈接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.項目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI本篇指南聚焦 OpenCLI 倉庫中的 Yahoo Search 適配器對應文檔 docs/adapters/browser/yahoo.md講解如何通過opencli yahoo search命令在瀏覽器會話中完成 Yahoo 搜索、結(jié)果提取與分頁輸出并深入到 search.js 源碼層剖析其 DOM 提取、RU重定向 URL 解碼與參數(shù)校驗的實現(xiàn)細節(jié)。讀完本文你將掌握該命令的完整參數(shù)體系、瀏覽器模式前置條件、JSON 等機器友好輸出方式以及它當前的能力邊界。命令概覽Yahoo 適配器是一個公開Public模式的瀏覽器命令托管域名為search.yahoo.com。當前倉庫只注冊了一個命令命令說明opencli yahoo search keyword搜索 Yahoo由 Bing 提供搜索能力并從頁面中提取排名結(jié)果該命令以只讀access: read方式訪問 Yahoo不涉及任何寫操作符合把任意網(wǎng)站變成確定性 CLI的設(shè)計理念——同一命令、同一輸出結(jié)構(gòu)可管道化、可腳本化、可接入 CI。適配器的命令注冊信息可以在 clis/yahoo/search.js 中看到其strategy為Strategy.PUBLIC、browser為true輸出列固定為rank / title / url / snippet四列。前置條件瀏覽器模式與 Browser BridgeYahoo 搜索結(jié)果依賴瀏覽器渲染因此該命令必須運行在瀏覽器模式下。根據(jù) docs/guide/browser-bridge.md 的說明OpenCLI 通過Browser Bridge Chrome 擴展 微守護進程連接你的 ChromeStandalone 模式需要本地有 Chrome 正在運行Standalone 模式會自動啟動瀏覽器會話Browser Bridge 擴展模式安裝擴展后復用 Chrome 的登錄態(tài)命令運行前請確保已在 Chrome 中完成目標網(wǎng)站的登錄。連接鏈路為opencli (Node.js) ←WebSocket:localhost:19825→ micro-daemon ←Chrome API→ Chrome Browser守護進程在首次瀏覽器命令時自動啟動并持續(xù)常駐。可用opencli doctor校驗擴展與守護進程的連通性用opencli daemon stop優(yōu)雅關(guān)閉。由于 Yahoo 命令復用瀏覽器會話結(jié)果中的地域/語言偏好會受瀏覽器會話當前區(qū)域設(shè)置影響。參數(shù)詳解keyword、limit 與 pageopencli yahoo search支持三個參數(shù)其聲明位于 clis/yahoo/search.js參數(shù)類型默認值取值范圍說明keyword位置參數(shù)必填—非空字符串搜索關(guān)鍵詞源碼會先經(jīng)requireSearchQuery去除首尾空白并拒絕空串--limitint71 ~ 7每頁返回的結(jié)果條數(shù)Yahoo 每頁約 7 條結(jié)果因此上限為 7--pageint11 ~ 100頁碼第 2 頁起通過b偏移參數(shù)翻頁參數(shù)在發(fā)起導航之前就會完成校驗requireBoundedInteger實現(xiàn)在 clis/_shared/search-adapter.js要求--limit必須是 1~7 的整數(shù)、--page必須是 1~100 的正整數(shù)keyword為空會拋出ARGUMENT類型錯誤并且不會觸發(fā)任何頁面導航——這是共享搜索適配器層的通用行為保證無效輸入零副作用。使用示例原文檔給出的四個典型用法如下全部可直接運行# 基礎(chǔ)搜索 opencli yahoo search machine learning # 限制結(jié)果條數(shù) opencli yahoo search machine learning --limit 5 # 翻頁第二頁 opencli yahoo search machine learning --page 2 # JSON 輸出 opencli yahoo search machine learning -f json在此基礎(chǔ)上結(jié)合 OpenCLI 全局輸出格式約定見 docs/guide/getting-started.md你還可以這樣組合# 默認表格輸出富終端表格 opencli yahoo search opencli -f table # YAML適合人讀 opencli yahoo search opencli -f yaml # Markdown直接嵌入文檔 opencli yahoo search opencli -f md # CSV導入表格工具 opencli yahoo search opencli -f csv # 管道給 jq 做二次加工 opencli yahoo search opencli -f json | jq .[] | {title, url}所有內(nèi)置命令均支持-f/--format其中-f json是接入 LLM 與自動化流水線最常用的形態(tài)JSON 結(jié)構(gòu)直接保留了rank / title / url / snippet四個字段字段名與命令聲明的輸出列一一對應。源碼級原理結(jié)果如何被提取DOM 提取與去重導航完成后適配器向頁面注入一段提取腳本buildExtractorJs見 clis/yahoo/search.js其邏輯為用document.querySelectorAll(.algo)選中 Yahoo 結(jié)果卡片節(jié)點對每個卡片依次讀取h3標題、.compTitle a鏈接、.compText摘要通過seen對象對 href 去重保證同一條結(jié)果只出現(xiàn)一次達到limit上限后立即break避免提取多余節(jié)點。提取結(jié)果以[title, href, snippet]三元組數(shù)組的形式返回。從源碼結(jié)構(gòu)看.algo、.compTitle、.compText這些選擇器直接依賴 Yahoo 當前的 DOM 結(jié)構(gòu)若 Yahoo 改版可能影響提取穩(wěn)定性。RU 重定向 URL 解碼Yahoo 會把搜索結(jié)果包裝在https://r.search.yahoo.com/.../RUurl/RK.../RS...形式的重定向鏈接中。適配器通過decodeYahooUrlclis/yahoo/search.js自動解碼檢測 href 中是否同時包含RU與/RK用正則RU([^/])\/RK捕獲真實目標 URL并做decodeURIComponent解碼用toHttpsUrlclis/_shared/search-adapter.js以https://search.yahoo.com為基準解析并只放行 http/https 協(xié)議——例如RUjavascript:alert(1)這類非 Web 協(xié)議目標會被過濾掉防止輸出惡意鏈接。分頁與排名計算分頁通過 Yahoo 的b偏移參數(shù)實現(xiàn)clis/yahoo/search.js第 N 頁使用b(N-1)*71。每條結(jié)果的rank按index 1 (pageNum - 1) * 7計算因此第 2 頁第一條結(jié)果的 rank 為 8與 Yahoo 實際排名連續(xù)銜接。等待與錯誤處理導航后適配器會等待.algo選擇器出現(xiàn)超時 10 秒超時則額外等待 3 秒兜底再嘗試提取提取結(jié)果必須是以數(shù)組形式出現(xiàn)的 payloadrequireRows會拒絕形如{ rows: [] }的畸形結(jié)構(gòu)并拋出COMMAND_EXEC類型錯誤若最終沒有任何有效結(jié)果則拋出EMPTY_RESULTemptySearchResults而不會靜默返回空數(shù)組。測試覆蓋邊界行為有據(jù)可依倉庫為 Yahoo 適配器提供了完整的單元測試 clis/yahoo/search.test.js用 mock 頁面對象驗證了以下關(guān)鍵行為命令注冊信息正確site: yahoo、browser: true、strategy: public、四列輸出空關(guān)鍵詞、--limit 8、--page 0均在導航前被拒絕ARGUMENT且page.goto不被調(diào)用對RUhttps%3A%2F%2Fgithub.com%2Fjackwener%2FOpenCLI/RK...形式的重定向 URL 能正確解碼出真實地址并正確計算第 2 頁 rank8RUjavascript:alert(1)這類危險目標會被過濾最終因無有效結(jié)果拋出EMPTY_RESULT畸形提取 payload{ rows: [] }會以COMMAND_EXEC類型錯誤失敗而非靜默返回[]。這些測試印證了typed error 優(yōu)于靜默失敗的工程約定也說明你可以在不依賴真實網(wǎng)絡(luò)的情況下把該適配器當作可組合的command.func(page, kwargs)單元來使用。當前限制與注意事項原文檔明確列出的限制如下使用時需要留意必須瀏覽器模式無法在純 API非瀏覽器模式下運行每頁結(jié)果少Yahoo 每頁約 7 條遠少于其他搜索引擎需要更多結(jié)果時請配合--page翻頁后續(xù)頁質(zhì)量第 2 頁及之后可能出現(xiàn)低相關(guān)度或不那么匹配的結(jié)果URL 重定向Yahoo 用RU.../RK包裝鏈接適配器已自動解碼無需手動處理地域/語言過濾未暴露當前沒有獨立的 region/language 參數(shù)結(jié)果受瀏覽器會話的區(qū)域與語言設(shè)置影響。另外補充兩點來自源碼的事實Yahoo 搜索結(jié)果由 Bing 提供結(jié)果在初始 HTML 中服務端渲染完成這正是 DOM 提取可行的基礎(chǔ)--page上限為 100超過該值會直接報參數(shù)錯誤。小結(jié)opencli yahoo search是 OpenCLI 瀏覽器類適配器的一個典型樣本公開策略 瀏覽器渲染 DOM 提取 參數(shù)嚴格校驗 類型化錯誤。無論是把它接入搜索聚合腳本、喂給 AI Agent 做信息采集還是作為學習如何寫一個搜索適配器的參考實現(xiàn)都可以從 clis/yahoo/search.js 及其測試 clis/yahoo/search.test.js 中找到完整的答案。若需要從遠程機器驅(qū)動本地瀏覽器會話可參考 Remote Orchestration 的 SSH 反向隧道方案。【免費下載鏈接】OpenCLIMake Any Website into CLI Use your logged-in browser by AI agent.項目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考