MCPcopy
hub / github.com/ourongxing/newsnow

github.com/ourongxing/newsnow @v0.0.41 sqlite

repository ↗ · DeepWiki ↗ · release v0.0.41 ↗
225 symbols 623 edges 126 files 2 documented · 1%
README

English | 简体中文 | 日本語

优雅地阅读实时热门新闻

[!NOTE] 当前版本为 DEMO,仅支持中文。正式版将提供更好的定制化功能和英文内容支持。

功能特性

  • 优雅的阅读界面设计,实时获取最新热点新闻
  • 支持 GitHub 登录及数据同步
  • 默认缓存时长为 30 分钟,登录用户可强制刷新获取最新数据
  • 根据内容源更新频率动态调整抓取间隔(最快每 2 分钟),避免频繁抓取导致 IP 被封禁
  • 支持 MCP server
{
  "mcpServers": {
    "newsnow": {
      "command": "npx",
      "args": [
        "-y",
        "newsnow-mcp-server"
      ],
      "env": {
        "BASE_URL": "https://newsnow.busiyi.world"
      }
    }
  }
}

你可以将 BASE_URL 修改为你的域名。

部署指南

基础部署

无需登录和缓存功能时,可直接部署至 Cloudflare Pages 或 Vercel: 1. Fork 本仓库 2. 导入至目标平台

Cloudflare Pages 配置

  • 构建命令:pnpm run build
  • 输出目录:dist/output/public

GitHub OAuth 配置

  1. 创建 GitHub App
  2. 无需特殊权限
  3. 回调 URL 设置为:https://your-domain.com/api/oauth/github(替换 your-domain 为实际域名)
  4. 获取 Client ID 和 Client Secret

环境变量配置

参考 example.env.server 文件,本地运行时重命名为 .env.server 并填写以下配置:

# Github Clien ID
G_CLIENT_ID=
# Github Clien Secret
G_CLIENT_SECRET=
# JWT Secret, 通常就用 Clien Secret
JWT_SECRET=
# 初始化数据库, 首次运行必须设置为 true,之后可以将其关闭
INIT_TABLE=true
# 是否启用缓存
ENABLE_CACHE=true

数据库支持

本项目主推 Cloudflare Pages 以及 Docker 部署, Vercel 需要你自行搞定数据库,其他支持的数据库可以查看 https://db0.unjs.io/connectors 。

  1. 在 Cloudflare Worker 控制面板创建 D1 数据库
  2. wrangler.toml 中配置 database_iddatabase_name
  3. 若无 wrangler.toml ,可将 example.wrangler.toml 重命名并修改配置
  4. 重新部署生效

Docker 部署

对于 Docker 部署,只需要项目根目录 docker-compose.yaml 文件,同一目录下执行

docker compose up

同样可以通过 docker-compose.yaml 配置环境变量。

开发

[!Note] 需要 Node.js >= 20

corepack enable
pnpm i
pnpm dev

你可能想要添加数据源,请关注 shared/sources server/sources,项目类型完备,结构简单,请自行探索。

路线图

  • 添加 多语言支持(英语、中文,更多语言即将推出)
  • 改进 个性化选项(基于分类的新闻、保存的偏好设置)
  • 扩展 数据源 以涵盖多种语言的全球新闻

贡献指南

欢迎贡献代码!您可以提交 pull request 或创建 issue 来提出功能请求和报告 bug

License

MIT © ourongxing

赞赏

如果本项目对你有所帮助,可以给小猫买点零食。如果需要定制或者其他帮助,请通过下列方式联系备注。

Featured|HelloGitHub

Extension points exported contracts — how you extend this code

FileRoutesByFullPath (Interface)
(no doc)
src/routeTree.gen.ts
Register (Interface)
(no doc)
src/main.tsx
ItemsProps (Interface)
(no doc)
src/components/column/card.tsx
ToastItem (Interface)
(no doc)
src/atoms/types.ts
PrimitiveMetadata (Interface)
(no doc)
shared/types.ts
RSSInfo (Interface)
(no doc)
server/types.ts
Res (Interface)
(no doc)
server/sources/thepaper.ts
FileRoutesByTo (Interface)
(no doc)
src/routeTree.gen.ts

Core symbols most depended-on inside this repo

defineSource
called by 69
server/utils/source.ts
parseRelativeDate
called by 41
server/utils/date.ts
set
called by 12
server/database/cache.ts
git
called by 9
scripts/source.ts
typeSafeObjectEntries
called by 7
shared/type.util.ts
get
called by 7
server/database/cache.ts
defineRSSSource
called by 6
server/utils/source.ts
tranformToUTC
called by 6
server/utils/date.ts

Shape

Function 129
Interface 73
Method 17
Class 6

Languages

TypeScript100%

Modules by API surface

scripts/source.ts11 symbols
src/components/column/card.tsx10 symbols
server/types.ts9 symbols
server/database/user.ts9 symbols
server/database/cache.ts9 symbols
src/utils/index.ts8 symbols
src/routeTree.gen.ts6 symbols
src/components/common/overlay-scrollbar/useOverlayScrollbars.ts6 symbols
shared/types.ts6 symbols
server/utils/date.ts6 symbols
tools/rollup-glob.ts5 symbols
src/components/common/search-bar/index.tsx5 symbols

Dependencies from manifests, versioned

@atlaskit/pragmatic-drag-and-drop-auto-scroll2.1.5 · 1×
@atlaskit/pragmatic-drag-and-drop-hitbox1.1.0 · 1×
@eslint-react/eslint-plugin2.13.0 · 1×
@iconify-json/ph1.2.2 · 1×
@iconify-json/si1.2.17 · 1×
@napi-rs/pinyin1.7.7 · 1×
@ourongxing/eslint-config3.2.3-beta.6 · 1×
@rollup/pluginutils5.3.0 · 1×
@tanstack/react-query5.90.21 · 1×
@tanstack/react-query-devtools5.91.3 · 1×

For agents

$ claude mcp add newsnow \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact