Skip to content

西邮Linux兴趣小组博客聚合,爬取Atom/RSS订阅源生成群博API。

License

Notifications You must be signed in to change notification settings

xiyou-linuxer/blog-feed

Repository files navigation

博客订阅源聚合 blog-feed

从远程源获取订阅列表 JSON,定时爬取解析其中的 Atom/RSS 订阅源,并以 API 的形式提供文章列表。

项目依赖

前端:

  • NitroUnJS 家族的 Web 服务器,基于文件路由,支持定时任务
  • Mongoose:MongoDB 的 ODM,用于操作数据库
  • Fast XML Parser:用于解析 Atom/RSS
  • env-cmd:用于在生产环境加载 .env 变量

环境:

项目结构

blog-feed
├── .env                    # 环境变量
├── eslint.config.mjs       # ESLint 配置
├── nitro.config.mjs        # Nitro 配置
├── models                  # 数据模型
│   └── article.ts              # 文章模型
├── route                   # 基于文件的路由
│   ├── index.get.ts            # 状态 API
│   ├── article.get.ts          # 文章 API
│   └── manual-update.post.ts   # 手动更新 API
├── tasks                   # 定时任务
│   └── update.ts               # 爬取文章并更新数据库
└── utils                   # 工具函数
    ├── db.ts                   # 数据库操作
    └── feed.ts                 # Feed 解析

项目配置

在项目根目录下创建 .env 文件,或配置环境变量:

# MongoDB 连接字符串
MONGO_URI="mongodb://user:password@localhost:27017/blog-feed"

nitro.config.ts 中配置订阅源集合:

export default defineNitroConfig({
    // ...
    runtimeConfig: {
        feedSource: 'https://gh.llkk.cc/https://github.com/xiyou-linuxer/website-2024/blob/main/docs/.vitepress/data/members.json', // 订阅源集合
        nameKey: 'name', // 订阅源名称字段,用于日志打印
        tagKey: 'grade', // 订阅源标签字段,用于查询时分类
        feedKey: 'feed', // 订阅源地址字段
    },
})

项目运行

开发

在项目根目录下运行以下命令:

pnpm i
pnpm dev

配置 PM2

PM2 是一个进程管理器,用于在生产环境中管理 Node.js 应用程序。

pnpm i pm2 -g

生产

在项目根目录下运行以下命令:

pnpm i          # 安装依赖
pnpm build      # 构建项目
pnpm preview    # 前台运行
pnpm start      # 后台运行
pnpm stop       # 停止后台运行
pnpm restart    # 重启后台运行

当项目有更新时,直接运行 pnpm hot 即可,无需重新启动项目。

项目 API

GET /

获取服务器状态信息,返回结构:

{
  "status": "success",
  "packageJson": {
    // package.json 内容
  }
}

GET /articles

获取文章列表,支持按订阅源、标签筛选,支持分页。

查询参数
参数 说明 示例
page 页码(默认 1) /articles?page=1
limit 每页文章数(默认 10) /articles?limit=10
feed 按订阅源筛选 /articles?feed=https://blog.zhilu.cyou/atom.xml
tag 按标签筛选 /articles?tag=1
返回格式
{
  "result": "success",
  "pagination": {
    "page": 1,
    "limit": 24,
    "total": 151,
    "totalPages": 7
  },
  "articles": [
    {
      "_id": "67c6694d53318941f8373de2",
      "link": "https://blog.zhilu.cyou/2024/vitepress-enhancement",
      "__v": 0,
      "author": "纸鹿摸鱼处",
      "createdAt": "2025-03-04T02:45:26.719Z",
      "date": "2024-11-03T09:54:50.000Z",
      "description": "VitePress 的基本使用与定制技巧,涵盖项目初始化、汉化配置、图标引入、自定义主题等内容,旨在利用 VitePress 构建美观、高效的静态站点。",
      "feed": "https://blog.zhilu.cyou/atom.xml",
      "tag": "2022",
      "title": "VitePress 不完全优化指南"
    }
    // ...
  ]
}

POST /manual-update

触发文章列表的手动更新。

About

西邮Linux兴趣小组博客聚合,爬取Atom/RSS订阅源生成群博API。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published