12 releases (5 stable)
| new 2.0.1 | Mar 29, 2026 |
|---|---|
| 1.0.2 | Mar 28, 2026 |
| 1.0.1 | Aug 11, 2025 |
| 0.9.8 | May 5, 2025 |
| 0.1.0 |
|
#258 in Data structures
Used in xmltv-cli
310KB
798 lines
xmltv
XMLTV for electronic program guide (EPG) parser and generator using serde.
Features
- Flatten some elements like
<new/>to be a boolean in order to avoid boilerplate - CLI available to perform some operations
Usage
Library
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'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();
}
To serialize big files, you can look into tests/from_files.rs::test_programmes_from_files.
It reads programmes one by one without loading everything in RAM.
Command line interface (CLI)
Install it with cargo install xmltv or with the binaries.
-c <CHANNEL LIST>or--channels=<CHANNEL LIST>: channels you want to keep, ie:-c tf1,m6,Arte. You can also check them with the TUI using-c ?--cleanse <ITEM LIST>: items you want to remove form the XMLTV file. I made this option because, in XMLTV file there are a lot of data and we don't need all of them and we may want to reduce the size of the file. Available items are:credits: remove all credits. If you want to remove some of them, use:directorsactorswritersadaptersproducerscomposerseditorspresenterscommentatorsguests
categoriesnewcountrieskeywordssub-titleslanguagesvideosaudiossubtitleslast-chancesdescriptionsdatesorigin-languageslengthpremierespreviously-shownsratingsstar-ratingsreviewsimagesepisode-numsiconsurls
-d NUMBERor--days NUMBER: number of days in the EPG to keep (from today)-l <FILE>or--load <FILE>: load configuration from a JSON file-m <FILE>or--merge <FILE>: merge another XMLTV file (can be used multiple times to merge several files)-s <QUERY>or--search <QUERY>: search programmes by title (case-insensitive)-t <TZ>or--timezone <TZ>: output timezone for programme times. Values:utc(default),local(system timezone), or offset like+0100-f <FORMAT>or--format <FORMAT>: output format:xml(default),json,ical,atom,jsonfeed--epg: display the EPG in a terminal UI
Roadmap
- CLI
- configure favorites and filters?
- Config from file instead of args using config.example.toml
Ressources
XMLTV DTD is here: https://github.com/XMLTV/xmltv/blob/master/xmltv.dtd
Dependencies
~1.1–2MB
~36K SLoC