#tv #parser-generator #guide #electronic #serde #element #epg

bin+lib xmltv

使用 serde 的电子节目指南 (EPG) 解析器和生成器 XMLTV

6 个版本

0.9.6 2024年5月1日
0.9.5 2024年4月27日
0.9.2 2024年3月26日
0.1.0 2023年2月17日

#455 in 解析实现

MIT/Apache

320KB
1K SLoC

xmltv

使用 serde 的电子节目指南 (EPG) 解析器和生成器 XMLTV。

功能

  • 将某些元素(如 <new/>)扁平化为布尔值,以避免样板代码
  • 提供 CLI 以执行某些操作

使用方法

use std::str::FromStr;

use quick_xml::de::from_str;
use quick_xml::se::to_string_with_root;
use xmltv::*;

fn main() {
    let xml = "<tv>\
<programme channel=\"1\" start=\"2021-10-09 12:00:00 +0200\" stop=\"2021-10-09 13:00:00 +0200\">\
<title>Les feux de l&apos;amour é</title>\
</programme>\
<programme channel=\"2\" start=\"2021-10-09 12:20:00 +0200\" stop=\"2021-10-09 12:35:00 +0200\">\
<title lang=\"fr-FR\">Le journal</title>\
</programme>\
<programme channel=\"3\" start=\"2021-10-09 13:00:00 +0200\" stop=\"2021-10-09 13:40:00 +0200\">\
<title>Le journal</title>\
</programme>\
</tv>";

    // deserialize into the root object (Tv)
    let item: Tv = from_str(xml).unwrap();

    // serialize into string
    let _out = to_string_with_root("tv", &tv).unwrap();
}

为了序列化 大文件,您可以查看 tests/from_files.rs::test_programmes_from_files。它逐个读取节目,而不将所有内容加载到 RAM 中。

命令行界面 (CLI)

使用 cargo install xmltv 或二进制文件安装它。

  • -c <频道 列表>--channels=<频道 列表>:您想要保留的频道,例如:-c tf1,m6,Arte。您还可以使用 TUI 通过 -c ? 检查它们
  • --cleanse <项目 列表>:您想要从 XMLTV 文件中删除的项目。我制作了这个选项,因为在 XMLTV 文件中有很多数据,我们不需要所有这些数据,并且我们可能想要减小文件的大小。可用的项目有
    • credits:删除所有信用。如果您想删除其中一些,请使用
      • directors
      • actors
      • writers
      • adapters
      • producers
      • composers
      • editors
      • presenters
      • commentators
      • guests
    • categories
    • new
    • countries
    • keywords
    • sub-titles
    • languages
    • videos
    • audios
    • subtitles
    • last-chances
    • descriptions
    • dates
    • origin-languages
    • length
    • premieres
    • previously-showns
    • ratings
    • star-ratings
    • reviews
    • images
    • episode-nums
    • icons
    • urls
  • -数字--days 数字:保留 EPG 中的天数
  • -o <FILE>--output <FILE>:您希望生成的新的 XMLTV 文件,否则将打印到控制台。

路线图

  • 命令行界面
    • 限制为 N-d <number>-3 表示从今天起接下来的3天
    • 清理:移除一些不需要的元素以使其更轻量。您可以移除描述 --no-description、所有版权信息 --no-credits 或部分信息(如导演 --no-directors、演员 --no-actors、嘉宾 --no-guests 等),--no-categories--no-keywords--no-countries 等。您还可以移除不需要的时间段(如0:00-6:00和/或23:30-23:59)或不需要的天数 --days 1,2,3,5,6,7(这里没有星期四,第一天是星期一)。
    • 从配置文件加载外部过滤器(--l <FILE>--load <FILE>)以避免命令行参数过多或仅为了跟踪喜欢的节目。
    • 导出到各种格式(RSS/Atom/Jsonfeed、iCal、JSON、CSV)
  • 终端用户界面(TUI)
    • 检查要过滤的频道
    • 在标题(以及可能的其他如关键词、描述、版权信息)中搜索
    • 显示 EPG
    • 将选定的节目导出到日历(.ics
    • 配置收藏夹和过滤器?

资源

XMLTV DTD 在这里:https://github.com/XMLTV/xmltv/blob/master/xmltv.dtd

依赖项

~0.4–7.5MB
~50K SLoC