{"id":27852022,"url":"https://github.com/Seanium/FeedMe","last_synced_at":"2025-05-04T03:01:57.493Z","repository":{"id":289818249,"uuid":"972099032","full_name":"Seanium/FeedMe","owner":"Seanium","description":"AI-powered RSS reader, deployable to GitHub Pages or with Docker | 用 AI 重新定义你的 RSS 阅读体验，轻松部署到 GitHub Pages / Docker","archived":false,"fork":false,"pushed_at":"2025-05-03T01:45:32.000Z","size":247,"stargazers_count":277,"open_issues_count":0,"forks_count":45,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-03T02:54:17.516Z","etag":null,"topics":["ai","github-actions","github-pages","rss","rss-reader"],"latest_commit_sha":null,"homepage":"http://feedme.icu/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Seanium.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-24T14:31:50.000Z","updated_at":"2025-05-03T01:43:49.000Z","dependencies_parsed_at":"2025-04-25T08:38:42.387Z","dependency_job_id":null,"html_url":"https://github.com/Seanium/FeedMe","commit_stats":null,"previous_names":["seanium/feedme"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seanium%2FFeedMe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seanium%2FFeedMe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seanium%2FFeedMe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Seanium%2FFeedMe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Seanium","download_url":"https://codeload.github.com/Seanium/FeedMe/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252280890,"owners_count":21723055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","github-actions","github-pages","rss","rss-reader"],"created_at":"2025-05-04T03:01:56.565Z","updated_at":"2025-05-04T03:01:57.477Z","avatar_url":"https://github.com/Seanium.png","language":"TypeScript","readme":"[中文文档](./README.md) | [English Documentation](./README.en.md)\n\n# \u003cp align=\"center\"\u003e😋FeedMe\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Next.js](https://img.shields.io/badge/Next.js-111111?style=flat\u0026logo=nextdotjs\u0026logoColor=white)](https://nextjs.org/)\n[![React](https://img.shields.io/badge/React-61DAFB?style=flat\u0026logo=react\u0026logoColor=black)](https://reactjs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind%20CSS-06B6D4?style=flat\u0026logo=tailwindcss\u0026logoColor=white)](https://tailwindcss.com/)\n[![shadcn/ui](https://img.shields.io/badge/shadcn/ui-111111?style=flat\u0026logo=shadcnui\u0026logoColor=white)](https://ui.shadcn.com/)\n[![RSS](https://img.shields.io/badge/RSS-Feed-orange?style=flat\u0026logo=rss)](https://en.wikipedia.org/wiki/RSS)\n[![OpenAI](https://img.shields.io/badge/OpenAI-412991?style=flat\u0026logo=openai\u0026logoColor=white)](https://openai.com/)\n[![pnpm](https://img.shields.io/badge/pnpm-F69220?style=flat\u0026logo=pnpm\u0026logoColor=white)](https://pnpm.io/)\n[![Docker](https://img.shields.io/badge/Docker-2496ED?style=flat\u0026logo=docker\u0026logoColor=white)](https://www.docker.com/)\n\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/Seanium/feedme/update-deploy.yml?branch=main\u0026style=flat\u0026logo=github)](https://github.com/Seanium/feedme/actions)\n[![GitHub Pages](https://img.shields.io/badge/GitHub%20Pages-Active-4EA94B?style=flat\u0026logo=github)](https://feedme.icu)\n[![Vercel](https://img.shields.io/badge/Vercel-Ready-000000?style=flat\u0026logo=vercel\u0026logoColor=white)](https://feed-me-delta.vercel.app/)\n[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![RSS Update](https://img.shields.io/badge/RSS%20Update-Every%203h-lightgrey?style=flat\u0026logo=github-actions)](https://github.com/Seanium/feedme/blob/main/.github/workflows/update-deploy.yml)\n\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003e用 AI 重新定义你的 RSS 阅读体验，轻松部署到 GitHub Pages / Docker\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://feedme.icu\" target=\"_blank\"\u003e🌐 在线演示\u003c/a\u003e •\n  \u003ca href=\"#主要功能\"\u003e✨ 功能\u003c/a\u003e •\n  \u003ca href=\"#部署指南\"\u003e🚀 部署\u003c/a\u003e •\n  \u003ca href=\"#开发指南\"\u003e💻 开发\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## 轻量、自由、为你定制\n\n- 希望能够**一站式**了解各个信息源的新鲜事。又嫌市面上产品太\"重\"（**不想注册登录/下载 APP/启动桌面软件...**），一个静态页面正合适（响应式 / 亮暗主题，电脑手机都方便浏览）。\n- 希望能够 **TLDR** 式地速览，于是做了 AI 摘要。\n- **自由配置** RSS 源、AI 模型、更新频率。\n- **开源、方便 Fork、零成本、轻松自部署**。\n\n## 主要功能\n\n- **多源 RSS 聚合**: 从多个信息源获取并整合 RSS 内容\n- **AI 摘要生成**: 自动使用 LLM 为文章生成摘要\n- **定时更新机制**: 通过 GitHub Actions 或 crond 定期自动更新内容\n- **分类浏览**: 支持按分类查看不同信息源\n- **主题切换**: 支持明暗主题切换\n- **静态部署**: 可部署在 GitHub Pages 等静态托管服务上\n- **Docker 部署**：轻松部署在本地服务器上\n\n## 部署指南\n\n### 方式一：GitHub Pages 部署\n\n本项目使用 GitHub Actions 自动部署到 GitHub Pages，使用工作流处理数据更新和网站部署。\n\n1. **Fork 或克隆仓库**到你的 GitHub 账号\n\n2. **设置 GitHub Secrets**\n   \n   在项目顶端 Settings - 左侧 Secrets and variables -\u003e Actions 中添加以下密钥（**Secrets**）：\n   - `LLM_API_KEY`: 用于 AI 摘要生成的 API 密钥\n   - `LLM_API_BASE`: LLM 服务的 API 基础 URL\n   - `LLM_NAME`: 使用的模型名称\n\n3. **启用 GitHub Pages**\n   \n   在仓库设置中，选择从 GitHub Actions 部署\n\n4. **手动触发工作流**（可选）\n   \n   在 GitHub 仓库的 Actions 页面手动触发\"更新数据并部署\"工作流\n\n#### 工作流说明\n\n**更新数据并部署** (`update-deploy.yml`)：\n- 触发条件：\n  - 定时执行（每 3 小时一次）\n  - 推送到 main 分支\n  - 手动触发\n- 执行内容：\n  - 获取最新 RSS 内容并生成摘要\n  - 构建静态网站\n  - 根据仓库变量设置决定部署目标:\n    - 总是部署到 GitHub Pages\n    - 如果 `ENABLE_VERCEL_DEPLOYMENT` 为 `true` 则部署到Vercel\n\n#### 自定义部署配置\n\n- **自定义 RSS 源**：\n  编辑 `config/rss-config.js` 文件以修改或添加 RSS 源。每个源需要包含：\n  - 名称\n  - URL\n  - 分类\n\n- **修改更新频率**: 编辑 `.github/workflows/update-deploy.yml` 中的 cron 表达式\n  ```yml\n  # 例如，改为每天凌晨更新一次\n  cron: '0 0 * * *'\n  ```\n\n- **调整保留条目数**: 修改 `config/rss-config.js` 中的 `maxItemsPerFeed` 值\n\n- **自定义域名配置**:\n  请按照以下内容设置，避免出现页面资源加载异常：\n  - **不使用自定义域名**: 请删除目录下的 `CNAME` 文件\n  - **使用自定义域名**: 在仓库设置的 GitHub Pages 部分添加自定义域名，并修改 CNAME 文件内容为自定义域名\n  - **多平台部署**: 系统会自动处理不同平台（GitHub Pages/Vercel）的路径差异:\n    - GitHub Pages: 自动使用 `/{仓库名}` 为 basePath\n    - 自定义域名: 不会添加 basePath\n    - Vercel: 不会添加 basePath\n\n- **自定义摘要生成**：\n  如果需要自定义摘要生成方法，比如遵循特定格式或切换摘要语言，请修改 `scripts\\update-feeds.js` 中的 `prompt` 变量\n\n### 方式二：Vercel 部署\n\n将你的 GitHub 仓库导入到 Vercel：\n\n1. 前往 [Vercel导入页面](https://vercel.com/import/git)\n2. 选择 \"GitHub\" 并授权访问\n3. 搜索并选择你 fork 的 FeedMe 仓库\n4. 保持默认设置，点击 \"Deploy\" 开始部署\n\n**配置自动更新：**\n1. 完成 Vercel 部署后，获取以下信息:\n   - `VERCEL_TOKEN`: 从 [Vercel Tokens](https://vercel.com/account/tokens) 创建\n   - `VERCEL_ORG_ID`: 从 [账户设置](https://vercel.com/account) \u003e 常规 \u003e 页面底部获取\n   - `VERCEL_PROJECT_ID`: 从 [Vercel Dashboard](https://vercel.com/dashboard) \u003e 你的项目 \u003e 设置 \u003e 常规 \u003e 页面底部获取\n2. 添加上述信息到仓库密钥（**Secrets**）（位置：Settings -\u003e Secrets and variables -\u003e Actions -\u003e **Secrets**）\n3. 添加仓库变量（**Variables**） `ENABLE_VERCEL_DEPLOYMENT` 并设为 `true`（位置：Settings -\u003e Secrets and variables -\u003e Actions -\u003e **Variables**）\n\n### 方式三：Docker 本地部署\n\n此方式使用 Docker 在本地或服务器上运行 FeedMe，并通过容器内的 Cron 任务自动更新数据和重建，不依赖 GitHub Actions。\n\n1.  **克隆仓库**\n    ```bash\n    git clone https://github.com/Seanium/feedme.git\n    cd feedme\n    ```\n\n2.  **配置环境变量**\n    复制 `.env.example` 文件为 `.env` 并填入必要的 API 密钥：\n    ```bash\n    cp .env.example .env\n    ```\n    编辑 `.env` 文件：\n    ```dotenv\n    LLM_API_KEY=你的_API_密钥\n    LLM_API_BASE=LLM服务的API基础URL\n    LLM_NAME=使用的模型名称\n    ```\n\n3.  **构建并启动 Docker 容器**\n    ```bash\n    docker-compose up --build\n    ```\n\n4.  **访问应用**\n    应用将在 [http://localhost:3000](http://localhost:3000) 上可用。\n\n5.  **自动更新**\n    容器将根据 `config/crontab-docker` 中的配置（默认为每 3 小时）自动执行 `pnpm update-feeds` 和 `pnpm build`，并重新启动服务。\n    如需修改更新频率，请编辑 `config/crontab-docker` 文件中的 cron 表达式（例如 `0 */6 * * *` 表示每 6 小时执行一次）。\n\n## 开发指南\n\n1. **克隆仓库**\n   ```bash\n   git clone https://github.com/Seanium/feedme.git\n   cd feedme\n   ```\n\n2. **安装依赖**\n   ```bash\n   pnpm install\n   ```\n\n3. **配置环境变量**\n   \n   复制环境变量示例文件并编辑：\n   ```bash\n   cp .env.example .env\n   ```\n   \n   填入以下内容：\n   ```\n   LLM_API_KEY=你的 API 密钥\n   LLM_API_BASE=LLM服务的 API 基础 URL（例如：https://api.siliconflow.cn/v1）\n   LLM_NAME=使用的模型名称（例如：THUDM/GLM-4-9B-0414）\n   ```\n   这些环境变量用于配置文章摘要生成功能，需要从 LLM 服务提供商获取\n\n4. **更新 RSS 数据**\n   ```bash\n   pnpm update-feeds\n   ```\n   此命令会抓取 RSS 源并生成摘要，保存到 `data` 目录\n\n5. **启动开发服务器**\n   ```bash\n   pnpm dev\n   ```\n   访问 [http://localhost:3000](http://localhost:3000) 查看应用\n\n## Star 趋势\n\n\u003ca href=\"https://www.star-history.com/#Seanium/FeedMe\u0026Date\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/svg?repos=Seanium/FeedMe\u0026type=Date\u0026theme=dark\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/svg?repos=Seanium/FeedMe\u0026type=Date\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/svg?repos=Seanium/FeedMe\u0026type=Date\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n\n## 许可证\n\n[MIT](LICENSE) © 2025 Seanium","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSeanium%2FFeedMe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSeanium%2FFeedMe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSeanium%2FFeedMe/lists"}