news 2026/9/19 22:56:10

OpenCLI Homebrew 适配器实战:不登录、不打开浏览器,用三个命令查 Formula、Cask 与官方安装量排行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenCLI Homebrew 适配器实战:不登录、不打开浏览器,用三个命令查 Formula、Cask 与官方安装量排行

OpenCLI Homebrew 适配器实战:不登录、不打开浏览器,用三个命令查 Formula、Cask 与官方安装量排行

【免费下载链接】OpenCLIMake Any Website into CLI & Use your logged-in browser by AI agent.项目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI

本文讲解 OpenCLI 仓库中 Homebrew 适配器(docs/adapters/browser/homebrew.md)的完整用法与实现原理:通过homebrew formulahomebrew caskhomebrew popular三个只读命令,直接调用formulae.brew.sh/api的公开 JSON 端点,无需认证、无需浏览器即可获取 Formula/Cask 的元数据以及 Homebrew 官方统计的安装量排行。读完本文,你既能复制即用的命令示例与输出字段说明,也能从源码层面理解 token 校验、HTTP 错误处理与安装量数值强制转换等细节。

适配器定位:为什么 Homebrew 可以不需要浏览器

OpenCLI 的绝大多数适配器围绕"复用已登录浏览器"设计,但 Homebrew 属于例外:它在命令注册时声明browser: falsestrategy: Strategy.PUBLICaccess: 'read'(见 formula.js、cask.js、popular.js 中各自的cli({...})声明),即这是一个纯公开 API 的只读适配器。

从源码注释可以看出设计取舍(utils.js):

  • 端点为formulae.brew.sh/api下的公开、免认证 JSON 接口,以静态文件形式从 GitHub Pages 分发、每日重新生成;
  • Formula/Cask 的 token 遵循 Homebrew 自身的命名规则:小写 ASCII 加-_.+@(如gcc@13imagemagick@6c++0-adphp-cs-fixer);
  • 所有请求都不携带登录态,适配器只是给这些静态 JSON 加一层参数校验、字段规整和表格化输出。

命令在仓库中的登记信息(站点homebrew、各命令的 args 与 columns)可以在 cli-manifest.json 中检索到homebrew站点条目,适配器总览见 docs/adapters/index.md。

三个命令速览

文档将三个命令概括为"Inspect Homebrew formulae and casks, plus the official install-rank analytics, without auth or browser. Three commands.":

命令说明
opencli homebrew formula <name>查询单个 Homebrew core formula 的元数据
opencli homebrew cask <token>查询单个 Homebrew cask(macOS 应用包)的元数据
opencli homebrew popular查询安装量最高的 formula 或 cask(Homebrew 官方 analytics 排行)

对应的实现文件与注册信息一一对应:clis/homebrew/formula.jsclis/homebrew/cask.jsclis/homebrew/popular.js,共享逻辑集中在 utils.js。

命令用法与示例

查询 Formula 与 Cask 元数据

# Inspect a formula opencli homebrew formula wget opencli homebrew formula gcc@13 opencli homebrew formula imagemagick # Inspect a cask (macOS package) opencli homebrew cask firefox opencli homebrew cask visual-studio-code

formula命令的 positional 参数为name(formula 名称),cask命令的 positional 参数为token(cask token),二者在 cli-manifest.json 中均标记为required: truepositional: true

查询官方安装量排行

# 默认:formula / 30d / top 30 opencli homebrew popular # 切换类型与时间窗口 opencli homebrew popular --type cask --window 90d --limit 50 opencli homebrew popular --type formula --window 365d --limit 100 # JSON 输出 opencli homebrew popular -f json

popular命令的三个选项(默认值与来源均可在 popular.js 的args声明中确认):

选项说明
--typeformula(默认)或cask
--window30d(默认)/90d/365d
--limit最大行数(1-500,默认 30)

注意--window只有三个合法取值:源码中WINDOWS = ['30d', '90d', '365d']是一个硬编码的白名单(popular.js),因为 Homebrew analytics 端点只发布这三种窗口,传其他值会先被本地requireOneOf拦下并报ArgumentError,不会浪费一次 404 请求。

输出字段(Columns)逐列说明

命令输出列
formulaformula, tap, version, license, description, homepage, dependencies, deprecated, disabled, source, url
caskcask, tap, name, version, description, homepage, deprecated, disabled, download, url
popularrank, token, type, installs, percent, window, url

各列的取值来源可以从源码直接核对:

  • formula(formula.js):formula取 API 的name字段;versionversions.stabledependencies是依赖数组join(', ')后的逗号串;sourceurls.stable.url(源码 tarball 地址);url是拼接出的https://formulae.brew.sh/formula/<name>详情页;deprecated/disabled为布尔值。
  • cask(cask.js):与 formula 类似,但name可能是数组(cask 的友好名列表),源码会filter(Boolean).join(', ')拼成可读串;download取 API 的url字段,即实际的 .dmg/.pkg 下载地址。
  • popular(popular.js):rank优先取 API 的row.number,缺失时回退为i + 1token根据type分别取row.formularow.caskinstalls经过强制数值转换(见下节);url指向https://formulae.brew.sh/{cask|formula}/<token>

一个关键用法:popular输出的token列可以直接回灌到formula/cask命令——type=formula时喂给homebrew formula <token>type=cask时喂给homebrew cask <token>。这让"先排行、后详情"的两段式查询可以完全脚本化,例如opencli homebrew popular -f json解析出 token 后逐条查元数据。

实现细节:token 校验、HTTP 处理与数值规整

Homebrew 适配器最值得参考的是它对"公共静态 API"这一前提的防御式处理,全部集中在 utils.js。

token 正则与长度上限

requireToken使用正则/^[A-Za-z0-9][A-Za-z0-9._+@-]*$/校验 token(utils.js),且长度上限 100 字符。这与文档 Caveats 一节的描述一致:不合法输入会抛出ArgumentError,错误提示还附带示例(e.g. "wget", "gcc@13", "firefox")和允许的字符集说明。校验在本地完成,意味着非法输入不会发起任何网络请求。

统一的 fetch 封装与错误语义

brewFetch(utils.js)对三个命令共用,行为包括:

  • 固定User-Agentopencli-homebrew-adapter (+https://github.com/jackwener/opencli),并声明accept: application/json
  • 网络异常(DNS、超时等)包装为CommandExecutionError,并提示"检查 formulae.brew.sh 是否可达";
  • HTTP 404 抛EmptyResultError(资源不存在);HTTP 429 抛带"等待几秒后重试"建议的CommandExecutionError(Homebrew 会对突发流量限流);
  • 其余非 2xx 状态码以及 JSON 解析失败都归为CommandExecutionError,避免把上游的畸形响应静默吞掉。

安装量的字符串数字强转

Homebrew analytics 把安装量发布为带千分位逗号的字符串(如"139,972")。parseInstallCount(utils.js)先replace(/,/g, '')去掉逗号再转数字,非有限值返回null。这就是文档 Caveats 中"we coerce them to plain numbers"的落地实现——不经过这一步,installs列会输出带引号语义的字符串,无法排序或做数值比较。

行数截断与空结果

popular先取body.items全量数组,再slice(0, limit)截取前 N 行(popular.js);若items为空则抛EmptyResultError并说明type/window组合,而不是输出空表格。limitrequireBoundedInt保证为正整数且不超过 500。

已知限制(Caveats)

文档明确列出四条限制,结合源码可以确认其成因:

  • token 校验规则[A-Za-z0-9][A-Za-z0-9._+@-]*、最长 100 字符,非法输入报ArgumentError
  • --type--window只接受 Homebrew analytics 实际发布的值(formula/cask30d/90d/365d),其余取值报ArgumentError
  • analytics 的安装量是逗号格式字符串,适配器已强制转换为普通数字;
  • 端点是每日重新生成的静态 GitHub Pages JSON,数据最多滞后约 24 小时——用popular做决策时应记住这一点,它反映的是"截至上一次每日构建"的匿名聚合安装统计,不是实时计数。

前置条件与适用前提

  • 无浏览器依赖、无认证依赖:仅使用三个公开端点:
    • https://formulae.brew.sh/api/formula/<name>.json
    • https://formulae.brew.sh/api/cask/<token>.json
    • https://formulae.brew.sh/api/analytics/(install|cask-install)/<window>.json
  • 基础 URL 常量BREW_BASE = 'https://formulae.brew.sh/api'定义在 utils.js。
  • 网络需能访问formulae.brew.sh;受网络限制时命令会给出明确的可达性提示,被限流时提示等待重试。
  • 命令声明为access: 'read',纯查询、无副作用,适合放进 Agent 工具链或 CI 脚本中做软件包元数据查询。

小结

Homebrew 适配器是 OpenCLI 中典型的"公开 API 型"命令组:不依赖已登录浏览器,靠严格的本地参数校验(token 正则、枚举白名单、有界整数)、统一的 HTTP 错误映射(404/429/5xx)和数值规整(千分位安装量转数字),把三个静态 JSON 端点包装成可直接表格化、可 JSON 化、可被popular → formula/casktoken 回灌串联使用的命令行工具。源码集中在 clis/homebrew/ 四个文件(formula.jscask.jspopular.jsutils.js),若要编写类似的公共数据源适配器,这是一个紧凑且完整的参考实现。

【免费下载链接】OpenCLIMake Any Website into CLI & Use your logged-in browser by AI agent.项目地址: https://gitcode.com/gh_mirrors/ope/OpenCLI

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 22:54:14

MySQL 8.0 + Workbench Windows 实操指南:绕过 caching_sha2_password 坑

1. 这不是“点下一步”的安装指南&#xff0c;而是你真正能跑通 MySQL 8.0 Workbench 的实操现场如果你搜过“mysql安装教程8.0”&#xff0c;大概率已经看过十几篇开头写着“双击exe→一路Next→完成&#xff01;”的教程&#xff0c;然后在配置环节卡住&#xff1a;服务起不…

作者头像 李华
网站建设 2026/9/19 22:53:51

weworkhook使用全解析:手动输入经纬度、地图选点与开关功能详解

weworkhook使用全解析&#xff1a;手动输入经纬度、地图选点与开关功能详解 【免费下载链接】weworkhook 企业微信打卡助手&#xff0c;在Android设备上安装Xposed后hook企业微信获取GPS的参数达到修改定位的目的。注意运行环境仅支持Android设备且已经ROOTXposed框架 &#xf…

作者头像 李华
网站建设 2026/9/19 22:53:01

图灵图案(Turing Patterns):反应扩散系统在 Canvas 中的生成艺术

图灵图案&#xff08;Turing Patterns&#xff09;&#xff1a;反应扩散系统在 Canvas 中的生成艺术1952 年&#xff0c;计算机科学之父艾伦图灵&#xff08;Alan Turing&#xff09;在其生前发表的最后一篇划时代生物数学论文《形态发生学的化学基础&#xff08;The Chemical …

作者头像 李华
网站建设 2026/9/19 22:51:42

React Native动画在OpenHarmony的适配与优化

1. React Native动画系统与OpenHarmony适配概述在跨平台应用开发领域&#xff0c;React Native凭借其出色的性能和开发效率已经成为主流选择之一。而OpenHarmony作为新兴的操作系统平台&#xff0c;为开发者提供了全新的生态机会。将React Native的动画系统移植到OpenHarmony平…

作者头像 李华
网站建设 2026/9/19 22:48:26

茶叶泡袋打印机安装配置与优化指南

1. 项目背景与设备定位优品科技茶叶泡袋打印机是专为茶叶行业设计的智能化包装设备&#xff0c;它解决了传统茶叶分装过程中效率低下、标识不规范、人工成本高等痛点。这款设备采用热转印技术&#xff0c;能在食品级滤纸泡袋上清晰打印生产日期、批次号、品牌LOGO等关键信息&am…

作者头像 李华
网站建设 2026/9/19 22:45:22

从 JSON 到图表:last30days-skill 30 天舆情数据可视化完整指南

从 JSON 到图表&#xff1a;last30days-skill 30 天舆情数据可视化完整指南 【免费下载链接】last30days-skill AI agent skill that researches any topic across Reddit, X, YouTube, HN, Polymarket, and the web - then synthesizes a grounded summary 项目地址: https:…

作者头像 李华