OpenCLI Product Hunt 适配器全解析:用命令行与 AI Agent 追踪每日新品发布
2026/9/20 10:13:37 网站建设 项目流程
  • 开发工具
  • CLI
  • 人工智能
  • AI 应用
  • 浏览器控制
  • GUI 自动化

【免费下载链接】OpenCLI

Make Any Website into CLI & Use your logged-in browser by AI agent.

项目地址:https://gitcode.com/gh_mirrors/ope/OpenCLI
点击查看免费下载

Product Hunt 是开发者追踪新产品发布的首选平台,本指南以 OpenCLI 仓库中docs/adapters/browser/producthunt.md为核心,系统讲解producthunt适配器的四个命令(poststodayhotbrowse)的用法、参数与前置条件,并深入其源码实现(clis/producthunt/下的命令文件与共享工具),揭示「公开 RSS 抓取」与「浏览器拦截渲染后页面」两种采集策略的底层原理。读完本文,你将能够在终端中一键获取 Product Hunt 的最新、今日与分类热门产品数据,并理解 OpenCLI 如何让任意网站变成 CLI 与 AI Agent 可用的数据源。

适配器概览

Product Hunt 适配器在 OpenCLI 中属于「公开 / 浏览器」双模式适配器,其目标域名为www.producthunt.com,定义于 适配器文档。它的设计核心是:

  • 无浏览器命令poststoday直接读取 Product Hunt 公开的 Atom RSS 订阅源,无需登录与浏览器环境;
  • 浏览器命令hotbrowse通过 Chrome 与 Browser Bridge 扩展 拦截渲染后的真实页面,抓取带投票数、评论数的卡片数据。

从源码角度,该适配器由 6 个文件构成,位于 clis/producthunt/ 目录:posts.jstoday.jshot.jsbrowse.js四个命令实现,以及utils.js(共享工具:分类 slug 常量、RSS 解析、投票数识别)与utils.test.js(单元测试)。

命令总览

适配器文档给出了完整的命令清单,四个命令各司其职:

命令说明
opencli producthunt posts最新 Product Hunt 发布(可选分类过滤)
opencli producthunt today今日 Product Hunt 发布(feed 中最近一天)
opencli producthunt hot今日 Product Hunt 热门发布,带投票数
opencli producthunt browse <category>某分类下最好的产品

对应的源码声明位于各命令文件的开头,例如posts.js中声明site: 'producthunt'name: 'posts'access: 'read'domain: 'www.producthunt.com'(见 clis/producthunt/posts.js),四个命令共享同一站点命名空间,通过opencli producthunt <command>统一路由。

使用示例

以下示例完整继承自适配器文档,并补充了源码中确认的参数细节:

# 今日热门发布,带投票数 opencli producthunt hot --limit 10 # 最新发布(RSS 订阅源) opencli producthunt posts --limit 20 # 按分类过滤最新发布 opencli producthunt posts --category developer-tools --limit 10 # 仅看今日发布 opencli producthunt today --limit 10 # 浏览某个分类下的最佳产品 opencli producthunt browse vibe-coding --limit 10 opencli producthunt browse ai-agents --limit 10 opencli producthunt browse developer-tools --limit 10 # JSON 输出 opencli producthunt hot -f json

关于--limit参数的取值范围,四个命令的源码实现一致:默认值为 20,且会执行Math.min(Number(args.limit) || 20, 50)钳制到最多 50 条(见 posts.js、hot.js、today.js、browse.js)。因此传入--limit 100也只会返回 50 条,这是硬性上限。

-f json是 OpenCLI 命令体系的通用输出格式开关,用于将结果以结构化 JSON 输出,便于管道处理或交给 AI Agent 消费。

分类 Slug 对照表

browseposts --category共用一套分类 slug。适配器文档列出了常用分类,源码中则将其固化为常量PRODUCTHUNT_CATEGORY_SLUGS,定义于 clis/producthunt/utils.js:

ai-agentsai-coding-agentsai-code-editorsai-chatbotsai-workflow-automationvibe-codingdeveloper-toolsproductivitydesign-creativemarketing-salesno-code-platformsllmsfinancesocial-communityengineering-development

这 15 个 slug 同时被posts命令的--category参数帮助文本引用(见 posts.js),并在测试中被断言包含developer-toolsai-agents(见 utils.test.js),保证命令间分类口径一致。browse命令的category参数是位置参数且必填positional: true, required: true),传入时会自动转为小写(见 browse.js)。

前置条件

适配器文档明确了各命令的环境要求:

  • poststoday— 无需浏览器,直接走公开 RSS 订阅源;
  • hotbrowse— 需要 Chrome 正在运行,并安装 Browser Bridge 扩展。

Browser Bridge 是 OpenCLI 连接浏览器的轻量桥梁,由 Chrome 扩展加微守护进程组成(零配置、自动启动),其完整安装流程见 docs/guide/browser-bridge.md。典型步骤包括:

  1. 下载预构建的opencli-extension-v{version}.zip,解压后在chrome://extensions开启开发者模式并「加载已解压的扩展程序」;
  2. 或用开发者模式直接加载仓库中的extension/目录;
  3. 通过opencli doctor验证扩展与守护进程的连通性。

由于浏览器命令复用 Chrome 的登录会话,运行前需确保已在 Chrome 中登录目标站点。对于hot/browse这类公共信息抓取场景,虽然通常无需登录,但浏览器环境仍是必须的,因为其数据来自渲染后的真实页面。

两种采集策略的底层原理

四个命令在源码中分别标注了不同的Strategy,这是理解适配器行为差异的关键。OpenCLI 的Strategy枚举定义于 src/registry.ts,其中PUBLIC = 'public'INTERCEPT = 'intercept'分别对应无浏览器直连与浏览器拦截两种模式。

PUBLIC 策略:poststoday

poststoday均声明为Strategy.PUBLIC(见 posts.js、today.js),意味着它们直接通过 HTTP 请求获取公开数据,无需浏览器。

两个命令共用utils.js中的fetchFeed(category)函数:当传入分类 slug 时请求https://www.producthunt.com/feed?category=<slug>,否则请求https://www.producthunt.com/feed,并携带自定义 User-Agentopencli/1.0(见 utils.js)。随后parseFeed(xml)用正则按<entry>块解析 Atom 订阅源,提取:

  • name<title>标签文本;
  • author<name>标签文本;
  • date<published>时间戳的前 10 位,即YYYY-MM-DD
  • url<link>标签的href属性;
  • tagline:从<content>的 HTML 内容中剥离标签、压缩空白,并去掉 "Discussion" 与 "Link" 等尾部噪声后截取前 120 字符(见 utils.js)。

posts的差异在于支持--category过滤;today则实现了一个巧妙的「今日」语义:先取出 feed 中所有日期并按字典序排序,取最新日期作为「今天」,再过滤出该日期的帖子(见 today.js)。源码注释特别说明:Product Hunt 使用太平洋时区(PST),feed 中的日期与 UTC 本地日期最多可能相差 1 天,因此「最新一天」而非「本地今天」才是准确的「今日」语义。

INTERCEPT 策略:hotbrowse

hotbrowse声明为Strategy.INTERCEPT(见 hot.js、browse.js),需要浏览器环境。其执行流程为:

  1. page.installInterceptor('producthunt.com')安装域名拦截器;
  2. page.goto(...)导航到目标页面(hot为首页https://www.producthunt.combrowsehttps://www.producthunt.com/categories/<slug>);
  3. page.waitForCapture(5)等待渲染捕获;
  4. 在页面上下文中执行page.evaluate注入的 DOM 采集脚本,返回结构化数据。

hot的采集逻辑(见 hot.js)比较有代表性:它选择所有a[href^="/products/"]且不含/reviews的链接作为候选卡片,通过「向上遍历最多 6 层父节点,寻找同时包含 reviews 链接或纯数字节点(投票数)的容器」来定位完整卡片;随后对卡片内所有按钮、链接、段落中的纯数字文本进行收集,作为投票数候选。在utils.jspickVoteCount中,这些候选会按启发式打分排序:位于按钮内 +4 分、class/role 含vote/upvote+3 分、含button+1 分,且明确排除 reviews 链接内的数字(见 utils.js)——这能避免把「评论数」误当成「投票数」。最终结果按投票数降序排列并输出rank/name/votes/url四列。

browse的采集逻辑(见 browse.js)则面向分类页:它通过a.flex-col类名定位产品卡片链接,从卡片的div子节点提取产品名(同样去除 "Launched this month/week/year" 噪声),从span.text-secondary提取 tagline,并向上查找/reviews链接获取评论数。输出列为rank/name/tagline/reviews/url。需要注意的是,源码注释明确指出browse展示的是某分类的全时段最佳产品(按评论分数排序),而非当日投票数。

异常处理:两个浏览器命令在采集结果为空时都会抛出CliError,例如NO_DATA及提示「Product Hunt 可能更改了页面布局」(见 hot.js);browse在分类无效时还会提示可用的分类 slug 前 5 个作为排查参考(见 browse.js)。这体现了 OpenCLI 对站点结构变动(页面重构导致选择器失效)的显式容错设计——从源码结构看,这类适配器依赖 DOM 结构与 class 名,站点改版时需要同步更新选择器。

测试验证与可靠性

clis/producthunt/utils.test.js使用 Vitest 对核心解析逻辑进行了覆盖,可作为理解适配器行为的权威参考(见 clis/producthunt/utils.test.js):

  • parseFeed解析:用一段内嵌的样例 Atom feed 验证条目数、rank 顺序、name/author/date/url 字段提取,以及 tagline 对 HTML 标签和 "Discussion" 链接的剥离;
  • 空 feed 处理<feed></feed>返回空数组;
  • pickVoteCount打分:验证「投票按钮内的数字优先于普通数字徽章」、以及「忽略 reviews 链接内的数字」两个关键启发式规则;
  • 分类 slug 共享:断言常量包含developer-toolsai-agents

这些测试把「正则解析」「DOM 数值识别」这类易碎逻辑固化下来,任何改动都能被即时回归验证。

实战组合建议

将上述命令与 OpenCLI 的通用能力结合,可以形成实用的工作流:

  1. 日常监控:用opencli producthunt today --limit 10快速扫一眼今日发布,或用opencli producthunt hot -f json拿到结构化热门榜单,交给 AI Agent 做摘要;
  2. 赛道调研:针对vibe-codingai-agentsdeveloper-tools等分类,用opencli producthunt browse <slug> --limit 20获取该赛道的历史最佳产品,研究其定位与 tagline 写法;
  3. 定时追踪posts --category <slug>可按分类订阅最新发布流,配合外部定时任务即可实现发布提醒。

需要留意两点限制:--limit最大 50;browsehot依赖浏览器环境且对 Product Hunt 页面结构敏感,若返回NO_DATA错误,可先用opencli doctor检查 Browser Bridge 连通性,再确认页面结构是否变动。

小结

Product Hunt 适配器是 OpenCLI「任何网站都能变成 CLI」理念的一个典型样本:对公开数据走轻量的 RSS 直连(PUBLIC策略),对需要渲染或结构化深度的数据走浏览器拦截(INTERCEPT策略),并在utils.js中沉淀出可测试的解析与打分逻辑。以 适配器文档 为入口,配合 clis/producthunt/ 源码与 utils.test.js 测试,你可以完整掌握它的用法与原理,也可以以此为模板编写自己的站点适配器。

  • 开发工具
  • CLI
  • 人工智能
  • AI 应用
  • 浏览器控制
  • GUI 自动化

【免费下载链接】OpenCLI

Make Any Website into CLI & Use your logged-in browser by AI agent.

项目地址:https://gitcode.com/gh_mirrors/ope/OpenCLI
点击查看免费下载

相关推荐

上一篇:快速上手指南:终极免费PCB可视化BOM管理工具
下一篇:从触发到安装包:看懂 WSABuilds 的 GitHub Actions 自动化构建

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询