早上想看「今天网上在聊什么」,得先开微博刷热搜,再切知乎看热榜,然后头条、V2EX、掘金各来一遍——五个 App、十几分钟,真正读进去的内容没几条。

NewsNow 干的就是这件事:把几十个平台的热门内容汇到同一个页面,一屏扫完。它开源、TypeScript 写的,可以直接扔到 Cloudflare Pages 上跑,不买服务器。

我按它的官方文档在自己号上跑了一遍,把能踩的坑都记在这儿。

40+ 数据源汇到一屏

先看它长什么样

打开首页不是「新闻门户」那种信息瀑布,而是暗色三栏:每一栏绑一个源,顶上写源名和更新时间,下面一条条只有标题和相对时间。顶部三个 Tab——关注、最热、实时——切换的是排序和更新策略,不是频道。

这个设计取舍很明确:它不打算让你在站内读完新闻,只负责告诉你「哪儿有值得点开的东西」。想看全文,点标题跳回原站。

项目 2024 年 9 月开源,现在 ★22099 / ⑂5998,TypeScript 写的,MIT 协议。仓库主页是 newsnext/newsnow。

暗色三栏,只剩标题

45 个源,具体是哪些

宣传里常写「聚合多个平台」,听着很虚。直接翻它的 server/sources 目录,一共 45 个源文件,覆盖得比想象中宽:

类别 具体源
社区论坛 V2EX、知乎、贴吧、虎扑、豆瓣、LinuxDo、虫部落、靠谱
科技数码 IT之家、少数派、36氪、掘金、酷安、PCbeta、果核剥壳、Solidot、FreeBuf、GitHub、Product Hunt、Hacker News
财经 财联社、华尔街见闻、金十数据、格隆汇、雪球、法布财经、MktNews
资讯门户 今日头条、腾讯新闻、澎湃、凤凰、参考消息、联合早报、Sputnik
视频娱乐 哔哩哔哩、抖音、快手、爱奇艺、腾讯视频、Steam、懂球帝
生活消费 什么值得买
AI AIHot

想加自己的源也不难,shared/sources 放类型定义、server/sources 放抓取逻辑,目录结构是刻意做干净的。不过说实话,官方现在已经不收 PR 了——README 里明说下一代 NewsNext 在路上,老仓库只维护不扩功能。

几个容易被忽略的机制

30 分钟缓存。默认每条内容缓存半小时,避免每次刷新都去敲源站的接口。登录用户可以手动强制刷新,跳过缓存。

自适应抓取间隔,最短 2 分钟。这是我觉得设计得最聪明的一点:不是所有源都按同一个频率抓,而是根据每个源自己的更新节奏调整间隔——更新快的抓勤点,慢的少跑几趟。既省资源,也不至于把源站惹毛了封你 IP。

GitHub 登录 + 数据同步。用 GitHub OAuth 登录后,你「关注」的源、看过的偏好能跟着账号走,换设备不用重配。

MCP 服务端。这条最有意思——项目提供官方 MCP Server,配好之后你的 AI 助手可以直接读热榜数据。

1
2
3
4
5
6
7
8
9
10
11
{
"mcpServers": {
"newsnow": {
"command": "npx",
"args": ["-y", "newsnow-mcp-server"],
"env": {
"BASE_URL": "https://newsnow.busiyi.world"
}
}
}
}

BASE_URL 换成你自己的域名就行,这样 AI 读的是你自建实例的数据。

接上 AI,让机器人读热榜

三条部署路线,按需要选

路线一:纯展示(最简单)

只想要一个能看的聚合页,不需要登录、不需要数据库:

  1. Fork newsnext/newsnow 到你自己的 GitHub
  2. 在 Cloudflare Pages(或 Vercel)里新建项目,连这个仓库
  3. 构建命令 pnpm run build
  4. 输出目录 dist/output/public
  5. 部署,等构建完,打开分配的域名

就这五步。这一步不需要任何环境变量、不需要数据库,跑起来就是个可用的热榜站。

路线二:完整版(登录 + 缓存 + 同步)

想要 GitHub 登录和缓存,得补三样东西:

① 建一个 GitHub App。 地址是 github.com/settings/applications/new,不需要任何特殊权限,回调地址填 https://你的域名/api/oauth/github。建完拿到 Client ID 和 Client Secret。

② 加环境变量。 项目根目录的 example.env.server 是模板,要填的就这几个:

1
2
3
4
5
G_CLIENT_ID=你的 Client ID
G_CLIENT_SECRET=你的 Client Secret
JWT_SECRET=随便一串足够长的随机串
INIT_TABLE=true
ENABLE_CACHE=true

INIT_TABLE 第一次部署必须是 true,建完表之后改回 false,否则每次部署都重跑初始化。

③ 配数据库。 支持 db0 那一套连接器,官方推荐 Cloudflare D1。在 Cloudflare 后台建好 D1 库,然后 wrangler.toml 里填 database_id 和 database_name——仓库里没有这个文件,把 example.wrangler.toml 改名过来改内容即可,下次部署生效。

路线三:Docker

自己有 VPS 的话最省事,项目根目录直接:

1
docker compose up

环境变量写在 docker-compose.yml 里。本地开发也简单:Node 版本要 ≥ 20,然后 corepack enable → pnpm i → pnpm dev。

Fork 一下,点两下就上线

到底花不花钱

能白嫖的部分:

  • 代码 MIT,免费用
  • Cloudflare Pages 免费额度对个人站点绰绰有余(静态资源不限流量)
  • 基础展示版不碰数据库,一分钱不花

可能花钱的部分:

  • D1 超出免费额度要付费(个人用量基本摸不到线)
  • 自定义域名要自己买(.com 一年几十块,.xyz 更便宜)
  • VPS 跑 Docker 方案要服务器钱

还有一项隐性成本容易被忽略:自建之后,所有抓取请求都从你的 Cloudflare 出口发出去。源站要是哪天上了反爬、封了 Cloudflare 的 IP 段,你这边就会大面积出现「加载失败」。用公共实例时这是别人的问题,自建后就是你要处理的问题——好在自适应抓取间隔已经帮你降低了触发概率。

几个得先说清楚的事

只抓标题和链接,不搬正文。 点开还是回原站,这个边界划得挺清楚,也算对源站的基本尊重。

源站改版 = 你的页面挂掉。 这些源不是官方 API,是项目作者一个个写的解析逻辑。微博改个前端结构、知乎调整接口,对应那栏就空了,得等修。原仓库已经停止接受贡献,这类修复以后会更慢。

NewsNext 快来了。 README 顶部挂着预告,下一代在等名单里,架构会变。想长期跟着更新的话,心里有个准备:现在这套可能不是终态。

别拿去商用倒卖。 聚合别人家的内容做成付费产品,版权和合规上都站不住,自己看、朋友之间分享没问题。

适合谁 / 不适合谁

适合
  • 每天固定刷几个平台的人:一屏替代五个 App,省下的时间是真的
  • 想练 Cloudflare Pages 部署的人:这个项目构建配置干净,是很好的入门练手对象
  • 折腾 AI 工作流的人:MCP 那条路给了个现成的「让 AI 读今日热榜」的入口
  • 想给个人站加个「今日热点」板块的人:独立部署一份,挂个子域名就行
不适合
  • 想要全文阅读体验的(它不干这个)
  • 不想维护解析逻辑的(源站一改就得跟)
  • 期待「永久零成本稳定运行」的——免费额度、源站反爬、上游重构,任何一项变化都可能让你动手
NewsNow 开源 MIT 45 个源

实时热门新闻聚合器:暗色三栏、45 个数据源、30 分钟缓存与自适应抓取间隔(最短 2 分钟),支持 GitHub OAuth 登录同步、Cloudflare D1 缓存与官方 MCP 服务端,可一键部署到 Cloudflare Pages / Vercel / Docker。

★ 22,099GitHub Star
⑂ 5,998Fork
MIT开源协议
TypeScript Cloudflare Pages MCP 服务端 热榜聚合