NewsNow 深度分析报告
一句话总结
精致的中文新闻热榜聚合工具,44 个数据源通过 Glob Import 零配置自动注册,一键部署到 Cloudflare/Vercel/Docker——28.4% 的 Fork/Star 比证明了”零成本 Serverless 部署”策略的成功。
值得关注的理由
- 极高的实际使用率:19K stars 中 Fork 率达 28.4%(行业均值 ~5-10%),说明大量用户实际部署了自己的实例,而非仅仅收藏
- 架构精巧值得学习:自定义 Rollup 插件实现
glob:./sources/*.ts语法,新增数据源零配置自动注册;两级缓存(interval + TTL)兼顾时效性和容错;前后端同构架构(Vite + Nitro) - 小而美的工程典范:6,012 行核心代码、44 个数据源平均仅 49 行/个、单人 17 个月打造——是独立开发者高效构建产品的优秀案例
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/ourongxing/newsnow |
| Star / Fork | 18,955 / 5,384 |
| 代码行数 | ~6,012 行核心代码(TypeScript 80%+, TSX 15%) |
| 项目年龄 | 17 个月(2024-09 创建) |
| 开发阶段 | 稳定维护(v0.0.39,爆发期已过,近期主要为依赖更新和数据源维护) |
| 贡献模式 | 独立开发(ourongxing 贡献 90.8%,18 位贡献者) |
| 热度定位 | 大众热门(19K stars,中文热榜工具赛道领先) |
| 质量评级 | 代码[B+] 文档[B] 测试[D] |
作者视角:为什么存在这个项目
创始人/作者背景
Ou(ourongxing),深圳独立开发者,596 followers,以 TypeScript 和 Lua 为主要技术栈。此前有 chatgpt-vercel(项目模式类似:开源 + Vercel 一键部署)等成功项目经验。他深谙”一键部署 → 高 Fork 率 → 快速传播”的开源产品增长飞轮。
问题判断
中文互联网的热点新闻分散在微博、知乎、抖音、哔哩哔哩等数十个平台,用户需要逐个打开查看。现有工具要么只提供 API 无前端(DailyHotApi),要么是商业产品(今日热榜),要么定位不同(RSSHub 是 RSS 订阅源而非热榜)。缺少一个开源、免费、UI 精致、可自部署的热榜聚合工具。
解法哲学
“精致但极简”:
- 做什么:44 个中文热门数据源(微博/知乎/抖音/哔哩哔哩/GitHub 等)、优雅的卡片式 UI、一键 Cloudflare/Vercel/Docker 部署、GitHub/Google 登录、MCP Server 支持
- 不做什么:不做 RSS 订阅、不做全文阅读、不做内容推荐算法——只做”热榜一览”这一件事
- 核心信条:新增数据源只需一个文件(平均 49 行),零配置自动注册
战略意图
个人独立开发者作品,无明显商业化意图。MIT 许可鼓励 Fork 和二次开发。MCP Server 集成暗示作者在探索 AI Agent 场景的扩展可能。
核心价值提炼
创新之处
| 创新点 | 新颖度 | 实用性 | 可迁移性 | 说明 |
|---|---|---|---|---|
| Glob Import 自动注册数据源 | 4/5 | 5/5 | 5/5 | 自定义 Rollup 插件,glob:./sources/*.ts 自动发现和注册 |
| 两级缓存策略 | 3/5 | 5/5 | 5/5 | interval 刷新间隔 + TTL 失效,失败降级返回旧缓存 |
| 中英文双语相对时间解析器 | 3/5 | 4/5 | 4/5 | 30+ 种格式(“3小时前”、“昨天”、“2 days ago”) |
| 热榜排名变化动画 | 2/5 | 4/5 | 3/5 | 可视化展示排名上升/下降趋势 |
| MCP Server 集成 | 3/5 | 3/5 | 4/5 | AI Agent 可直接查询热榜数据 |
可复用的模式与技巧
-
Glob Import 插件化注册模式:通过 Vite/Rollup 插件实现
glob:./sources/*.ts语法,新增模块只需放入指定目录即可自动注册,零配置。适用于任何需要插件化扩展的前后端项目。 -
两级缓存 + 降级策略:
interval(数据源自定义刷新间隔,2min~1h)+TTL(缓存过期时间),抓取失败时降级返回旧缓存而非报错。适用于任何依赖外部数据源的聚合服务。 -
Vite + Nitro 前后端同构:使用
vite-plugin-with-nitro将前端(React)和后端(H3/Nitro)统一在一个项目中,共享类型定义。适用于小型全栈 Serverless 应用。 -
声明式数据源定义:每个数据源文件导出
defineSource()返回标准化结构(id、name、type、interval、列表数据),44 个数据源平均仅 49 行。适用于任何需要标准化数据采集的场景。 -
拼音搜索支持:集成拼音库实现中文拼音搜索匹配,提升了用户搜索体验。
关键设计决策
-
Cloudflare Workers 优先:以 Cloudflare Workers 为首选部署目标(免费额度足够),KV 做缓存存储,D1 做用户数据。Trade-off:绑定了 Cloudflare 生态,但获得了零成本全球加速部署。
-
前后端同构而非分离:没有拆分为 API + SPA,而是用 Nitro 统一处理。Trade-off:不适合大型项目,但极度简化了部署流程(一个项目一键部署)。
-
直接爬取而非 API:大部分数据源通过 HTTP 请求直接爬取页面/API,而非使用官方 API。Trade-off:开发快、无需申请 API Key,但稳定性依赖于目标网站不改版。
竞品格局与定位
竞品对比矩阵
| 维度 | NewsNow | DailyHotApi | RSSHub | 今日热榜 |
|---|---|---|---|---|
| 定位 | 热榜聚合前端 + 后端 | 热榜 API(无前端) | RSS 订阅源聚合 | 商业热榜产品 |
| Stars | 19K | 3.7K | 42.9K | N/A |
| 前端 UI | 精致卡片式 | 无 | 无(需 RSS 阅读器) | 有 |
| 部署成本 | 零(Cloudflare 免费层) | 需服务器 | 需服务器/Docker | 免费+付费 |
| 数据源数 | 44 | ~30 | 2000+(但非热榜专用) | ~50 |
| MCP 支持 | 有 | 无 | 无 | 无 |
| 许可证 | MIT | MIT | MIT | 商业 |
差异化护城河
- “一键部署”体验:Cloudflare/Vercel 零成本部署 + GitHub 登录 + 卡片式 UI,是唯一同时具备精致前端和零成本 Serverless 部署的开源热榜工具
- 28.4% Fork 率验证:远超行业均值的 Fork 率证明了产品-市场匹配
- MCP Server 先发:在热榜聚合赛道率先支持 AI Agent 场景
竞争风险
- DailyHotApi 添加前端:如果 DailyHotApi 增加 Web UI,会直接竞争
- RSSHub 覆盖热榜场景:RSSHub 42.9K stars 的社区规模如果聚焦热榜,有碾压优势
- 数据源稳定性:直接爬取依赖目标网站不改版,维护成本随数据源增加线性增长
生态定位
NewsNow 填补了 “开源、免费、精致、可自部署的中文热榜聚合工具” 的空白。与 RSSHub 是互补关系(RSSHub 做 RSS 订阅,NewsNow 做热榜快览)。
套利机会分析
- 信息差: 部分存在——19K stars 在中文开发者圈已有知名度,但 Glob Import 自动注册、两级缓存降级等架构模式的可迁移价值尚未被广泛认知
- 技术借鉴: (1) Glob Import 插件化注册是前后端项目扩展性设计的精巧方案;(2) 两级缓存 + 降级策略是依赖外部数据源服务的通用模式;(3) Vite + Nitro 前后端同构是小型 Serverless 应用的最佳实践
- 生态位: 中文热榜聚合赛道的开源领导者,与 RSSHub 互补
- 趋势判断: 增长放缓但用户基数稳固。热榜聚合是持续需求,MCP 集成为 AI 场景打开新增长空间
风险与不足
- Bus Factor = 1:ourongxing 贡献 90.8% 代码,社区贡献主要集中在数据源修复和 i18n。
- 测试覆盖极低:仅
date.ts有实质测试,核心爬虫和缓存逻辑无测试,数据源失效只能靠用户反馈发现。 - 数据源稳定性风险:直接爬取而非使用 API,目标网站改版即导致数据源失效。Issue 中大量 “XXX 数据源无法使用” 报告证实了这一风险。
- 安全隐患:存在硬编码 Cookie、SQL 拼接(虽然 D1 有参数化,但部分路径不确定)等问题。
- 版本号停滞在 0.0.x:39 个版本全部是 0.0.x 补丁版本,暗示项目尚未建立正式的版本管理规划。
- 爆发期已过:2024 年 10 月单月 195 次提交是绝对高峰,之后进入低频维护模式。
行动建议
- 如果你要用它: 想要一个私人热榜聚合页面时的最佳选择。推荐 Cloudflare Workers 部署(零成本)。注意部分数据源可能因目标网站改版而失效,需要自行维护或等待社区修复。
- 如果你要学它: 重点关注 (1)
shared/sourceListVirtual.ts和构建插件 — Glob Import 自动注册机制;(2)server/sources/— 44 个数据源的声明式定义模式(每个平均 49 行);(3)server/cache.ts— 两级缓存 + 降级策略;(4)shared/date.ts— 中英文双语相对时间解析器(30+ 格式)。 - 如果你要 fork 它: (1) 添加核心爬虫的测试覆盖和数据源健康检查;(2) 扩展国际化数据源(当前以中文为主);(3) 改进数据源稳定性(对高频失效的数据源增加备用抓取策略);(4) 建立正式版本号管理(从 0.1.0 开始)。
知识入口
| 资源 | 链接 |
|---|---|
| DeepWiki | deepwiki.com/ourongxing/newsnow |
| Zread.ai | zread.ai/ourongxing/newsnow |
| 关联论文 | 无 |
| 在线 Demo | newsnow.busiyi.world |