cognis-digital/feedforge
GitHub: cognis-digital/feedforge
一个轻量级的 Rust 命令行工具与库,用于构建、验证和合并 RSS/Atom Feed,专为 CI pipeline 和监控数据流的格式标准化与聚合而设计。
Stars: 0 | Forks: 0
# feedforge
RSS/Atom feed 构建器、验证器和合并器,专为监控技术栈设计。
`feedforge` 可以将包含条目的小型 JSON 描述转换为有效的 RSS 2.0 或
Atom 1.0 feed,作为 CI 门禁验证现有的 feed,并将多个 feed
合并为一个 —— 根据 link/guid 去重并按时间从新到旧排序。它是一个单一的小型
Rust 二进制程序,依赖占用极小,专为在 CI
容器和 OSINT/监控 pipeline 中使用而构建。
仅供防御性/分析用途。
## 安装
```
# 从 checkout 开始
cargo install --path .
# 或者直接构建 binary
cargo build --release
# -> target/release/feedforge
```
## 用法
### 构建 feed
```
feedforge build examples/items.json --format rss -o feed.xml
```
```
$ feedforge build examples/items.json --format rss
Cognis Threat Monitoring
https://example.com/monitoring
Defensive monitoring alerts and advisories.
en-us
Fri, 12 Jun 2026 08:15:00 GMT
feedforge
-
Advisory: anomalous outbound DNS volume on edge segment
https://example.com/advisories/2026-0612-dns
Sustained spike in NXDOMAIN responses; review resolver logs.
soc@example.com
Fri, 12 Jun 2026 08:15:00 GMT
advisory-2026-0612-dns
...
```
条目文件可以是完整的对象(`{ "title": ..., "items": [ ... ] }`),也可以是
单纯的条目数组。条目日期接受 RFC 822(`Wed, 10 Jun 2026
13:45:00 GMT`)**或** RFC 3339(`2026-06-09T17:00:00+02:00`)格式;两者都会
被标准化为目标格式,并且时区偏移量会转换为 UTC。
### 验证 feed(CI 门禁)
```
feedforge validate feed.xml
```
```
$ feedforge validate feed.xml
OK: rss feed, 3 item(s) valid
```
`validate` 会检查文档是否为格式良好的 XML,channel 是否具有
`title` 和 `link`,每个条目是否具有 `title` 或 `description` 以及
`link`/`guid`,以及存在的日期是否都能被解析。遇到任何
失败它都会以非零状态退出,因此可以直接接入 CI pipeline:
```
$ feedforge validate broken.xml; echo "exit=$?"
INVALID: feed failed validation (1 problem(s)):
- item #2 has an unparseable date: "yesterday"
exit=1
```
### 合并 feed
```
feedforge merge feed_a.xml feed_b.xml feed_c.xml --format rss -o merged.xml
```
条目会根据 `guid` 去重(如果失败则回退到 `link`);当遇到
重复项时,带有可解析日期的副本将优先于未注明日期的副本。最终
结果会按时间从新到旧排序,并以选定的格式重新输出。
## 功能
- **build** — 仅使用标准库,手写且完全转义的 XML 输出,支持 RSS 2.0
和 Atom 1.0。
- **validate** — 检查格式良好性以及必填字段和日期解析;
以非零状态退出以进行 CI 门禁拦截;一次性报告所有问题。
- **merge** — 根据 link/guid 去重,按时间从新到旧排序,支持格式转换。
- **Library API** — `build`、`validate` 和 `merge` 均作为库
函数公开;CLI 只是一个轻量级的封装。
- **无需 `chrono` 的日期处理** — 一个独立的解析器处理 RFC 822 和
RFC 3339,支持时区偏移量并标准化为 UTC。
- **极小的依赖集** — 使用 `quick-xml` 进行解析,使用 `serde`/`serde_json` 处理
条目 JSON。不依赖任何 XML-writer 或日期 crate。
## 库示例
```
use feedforge::build::{build_feed, feed_from_json};
use feedforge::model::FeedFormat;
use feedforge::validate::validate_str;
let json = std::fs::read_to_string("examples/items.json")?;
let feed = feed_from_json(&json)?;
let xml = build_feed(&feed, FeedFormat::Rss)?;
validate_str(&xml)?; // ok
# Ok::<(), feedforge::Error>(())
```
## 测试
```
cargo test
```
单元测试涵盖了转义、日期解析/标准化、构建输出有效性、
解析以及合并去重/排序;集成测试则完整测试了
build → validate → merge pipeline。
## 许可证
许可证:COCL 1.0(`LicenseRef-COCL-1.0`)。
维护者:Cognis Digital。
标签:Atom, RSS, Rust, 可视化界面, 数据聚合, 网络流量审计, 通知系统