#parser-generator #tv #epg

xmltv

XMLTV for electronic program guide (EPG) parser and generator using serde

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 Feb 17, 2023

#258 in Data structures


Used in xmltv-cli

MIT/Apache

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&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();
}

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:
      • 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
  • -d NUMBER or --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

Ressources

XMLTV DTD is here: https://github.com/XMLTV/xmltv/blob/master/xmltv.dtd

Dependencies

~1.1–2MB
~36K SLoC