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, 可视化界面, 数据聚合, 网络流量审计, 通知系统