NewsNow 开源项目详解

NewsNow 是一个由开发者 ourongxing 创建的开源实时新闻聚合器,旨在将分散在各个平台的热点信息统一到一个简洁优雅的界面中,帮助用户高效获取有价值的信息,摆脱传统资讯平台的算法绑架和信息茧房。

⚠️ 重要区分:请勿与英国商业新闻网站 newsnow.co.uk 混淆,二者完全无关。

访问与体验方式

1. GitHub 项目仓库(研究代码 / 自部署)

  • 地址:https://github.com/ourongxing/newsnow
  • 用途:查看源代码、详细文档、功能特性、部署指南。可 Fork 仓库进行二次开发或自建部署。

2. 官方公开演示站点(直接在线体验)

  • 地址:https://newsnow.busiyi.world
  • 用途:无需部署即可完整体验所有核心功能。

演示站点使用提示

  1. 初次访问默认显示“欢迎”和“实时”栏目。
  2. 点击顶部 “更多” 按钮。
  3. 在弹窗中为感兴趣的新闻源(如知乎、微博、GitHub 等)点星星进行关注。
  4. 返回首页,切换到 “关注” 栏目,即可查看个性化聚合新闻流。

核心理念与价值

NewsNow 主打用户主权反算法绑架

  • 在一个界面追踪全网热点。
  • 通过自定义关注,完全由用户决定信息来源和呈现顺序。
  • 解决信息过载与碎片化问题,让用户主动获取信息而非被动接受推荐。

技术架构与设计模式

技术栈概览

  • 前端:React 19 + TypeScript + Vite 6
  • 后端:Nitro(Nuxt.js 服务端框架)
  • 状态管理:Jotai(轻量级)
  • 样式与交互:UnoCSS(原子化 CSS)、Framer Motion(动画)

整体架构图

前端展示层

API服务层

数据处理与存储层

数据获取层

多种新闻源API

智能抓取调度器

HTML页面爬取

数据清洗与解析

是否启用缓存?

缓存系统
SQLite/MySQL/D1

实时数据

Nitro API Server

React前端应用

卡片式布局UI

用户交互
(拖拽/收藏/刷新)

核心设计模式

  • 适配器模式server/sources/ 目录中每个新闻源独立实现适配器,将不同平台的数据结构统一为内部 NewsItem 格式,便于扩展新源。
  • 策略模式:智能抓取调度器根据配置的 intervaltype(hottest/latest)等动态调整抓取策略。
  • 观察者模式:前端通过自定义 Hooks 监听数据变化,实现刷新、缓存过期时的自动更新。

核心功能

  • 多源聚合:默认支持 40+ 新闻源,覆盖科技、社交、财经、新闻等领域。
  • 优雅交互:卡片式布局,支持拖拽排序、深浅色模式切换、流畅动画。
  • 智能数据管理:默认 30 分钟缓存,登录用户可强制刷新;内置智能重试机制避免 IP 封禁。
  • 个性化与同步:支持 GitHub OAuth 登录,跨设备同步关注列表和阅读偏好。

快速部署

推荐使用 Docker,最简方式:

# docker-compose.yml
services:
  newsnow:
    image: ghcr.io/ourongxing/newsnow:latest
    container_name: newsnow
    restart: always
    ports:
      - '4444:4444'

执行 docker-compose up -d 后,访问 http://localhost:4444 即可。

远程访问建议:配合内网穿透工具(如 cpolar)可获得公网地址,实现随时随地访问。

扩展性:自定义新闻源

NewsNow 最强大的特性之一是极易添加自定义新闻源。

适用场景

  • 学术领域追踪论文网站
  • 开发者监控小众技术论坛
  • 市场人员聚合竞品动态
  • 个人兴趣整合博客、漫画更新等

示例:添加 GitHub Trending

  1. shared/sources.json 中添加配置:
{
  "github-trending": {
    "name": "GitHub Trending",
    "type": "hottest",
    "column": "tech",
    "home": "https://github.com/trending",
    "color": "gray",
    "interval": 600000,
    "title": "今日热门仓库"
  }
}
  1. server/sources/ 创建 github.ts
import * as cheerio from 'cheerio';
import { myFetch } from '../utils/fetch';

export default defineSource({
  'github-trending': async () => {
    const url = 'https://github.com/trending';
    const html = await myFetch(url);
    const $ = cheerio.load(html);
    const items = [];

    $('article.Box-row').each((_, element) => {
      const title = $(element).find('h2 a').text().trim();
      const relativeUrl = $(element).find('h2 a').attr('href');
      const description = $(element).find('p.pr-4').text().trim();

      if (title && relativeUrl) {
        items.push({
          id: relativeUrl,
          title: title.replace(/\s+/g, ' '),
          url: `https://github.com${relativeUrl}`,
          extra: {
            description: description || ''
          }
        });
      }
    });
    return items.slice(0, 10);
  }
});
  1. 运行 pnpm dev 测试,确认新源在界面正常显示。

生态与变体

MCP Newsnow Server

  • 一个基于 Model Context Protocol 的新闻聚合服务器。
  • 用途:让 AI 助手(如 Claude Desktop)通过自然语言直接查询实时新闻(如“今天知乎和微博热搜”)。
  • 安装:pip install mcp-newsnow,然后在 AI 助手配置中添加即可。

总结与建议

  • 想直接体验 → 访问官方演示站 https://newsnow.busiyi.world
  • 想研究代码或自部署 → 访问 GitHub 仓库 https://github.com/ourongxing/newsnow

NewsNow 既是高效的个人资讯工具,又是学习现代全栈开发、设计模式和可扩展架构的优秀开源样本。如需部署细节、特定新闻源抓取技巧或性能优化指导,可进一步提问。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐