
Security News
Meet Socket at Black Hat and DEF CON 2025 in Las Vegas
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
epg-parser
Advanced tools
It parses EPG XMLTV files and converts it to a regular JavaScript object.
npm install epg-parser
import fs from 'fs'
import parser from 'epg-parser'
const epg = fs.readFileSync('./epg.xml', { encoding: 'utf-8' })
const result = parser.parse(epg)
console.log(result)
Input:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE tv SYSTEM "xmltv.dtd">
<tv source-info-url="http://www.schedulesdirect.org/" source-info-name="Schedules Direct" generator-info-name="XMLTV/$Id: tv_grab_na_dd.in,v 1.70 2008/03/03 15:21:41 rmeden Exp $" generator-info-url="http://www.xmltv.org/">
<channel id="I10436.labs.zap2it.com">
<display-name lang="fr">13 KERA</display-name>
<display-name lang="ar">13</display-name>
<icon src="https://example.com/channel_one_icon.jpg" width="100" height="100" />
<url system="example">https://example.com/channel_one</url>
<url system="other_system">https://example.com/channel_one_alternate</url>
<lcn>36</lcn>
</channel>
<programme start="20080715003000 -0600" stop="20080715010000 -0600" channel="I10436.labs.zap2it.com">
<title lang="en">NOW on PBS</title>
<sub-title lang="en">Pilot</sub-title>
<desc lang="en">Jordan's Queen Rania has made job creation a priority to help curb the staggering unemployment rates among youths in the Middle East.</desc>
<date>20080711</date>
<category lang="en">Newsmagazine</category>
<category lang="en">Interview</category>
<keyword lang="en">physical-comedy</keyword>
<keyword lang="en">romantic</keyword>
<language>English</language>
<orig-language lang="en">French</orig-language>
<length units="minutes">60</length>
<url system="imdb">https://example.com/programme_one</url>
<url>https://example.com/programme_one_2</url>
<country>US</country>
<episode-num system="dd_progid">EP01006886.0028</episode-num>
<episode-num system="onscreen">427</episode-num>
<video>
<present>yes</present>
<colour>no</colour>
<aspect>16:9</aspect>
<quality>HDTV</quality>
</video>
<audio>
<present>yes</present>
<stereo>Dolby Digital</stereo>
</audio>
<previously-shown start="20080711000000" channel="channel-two.tv" />
<premiere>First time on British TV</premiere>
<last-chance lang="en">Last time on this channel</last-chance>
<new />
<subtitles type="teletext">
<language>English</language>
</subtitles>
<subtitles type="onscreen">
<language lang="en">Spanish</language>
</subtitles>
<rating system="BBFC">
<value>15</value>
</rating>
<rating system="MPAA">
<value>NC-17</value>
<icon src="NC-17_symbol.png" />
</rating>
<star-rating system="TV Guide">
<value>4/5</value>
<icon src="stars.png" />
</star-rating>
<star-rating system="IMDB">
<value>8/10</value>
</star-rating>
<review type="text" source="Rotten Tomatoes" reviewer="Joe Bloggs" lang="en">This is a fantastic show!</review>
<review type="text" source="IDMB" reviewer="Jane Doe" lang="en">I love this show!</review>
<review type="url" source="Rotten Tomatoes" reviewer="Joe Bloggs" lang="en">https://example.com/programme_one_review</review>
<image type="poster" size="1" orient="P" system="tvdb">https://tvdb.com/programme_one_poster_1.jpg</image>
<image type="poster" size="2" orient="P" system="tmdb">https://tmdb.com/programme_one_poster_2.jpg</image>
<image type="backdrop" size="3" orient="L" system="tvdb">https://tvdb.com/programme_one_backdrop_3.jpg</image>
<image type="backdrop" size="3" orient="L" system="tmdb">https://tmdb.com/programme_one_backdrop_3.jpg</image>
<credits>
<actor></actor>
<actor role="Walter Johnson">David Thompson</actor>
<actor role="Karl James" guest="yes">
Ryan Lee
<image type="person">https://example.com/xxx.jpg</image>
<url system="moviedb">https://example.com/person/204</url>
</actor>
<director>Bart Eskander</director>
<producer>Roger Dobkowitz</producer>
<presenter>Drew Carey</presenter>
</credits>
<icon src="http://imageswoapi.whatsonindia.com/WhatsOnTV/images/ProgramImages/xlarge/38B4DE4E9A7132257749051B6C8B4F699DB264F4V.jpg" width="100" height="100" />
</programme>
</tv>
Output:
{
channels: [
{
id: 'I10436.labs.zap2it.com',
displayName: [
{
lang: 'fr',
value: '13 KERA'
},
{
lang: 'ar',
value: '13'
}
],
icon: [{ src: 'https://example.com/channel_one_icon.jpg', width: '100', height: '100' }],
url: [
{ system: 'example', value: 'https://example.com/channel_one' },
{ system: 'other_system', value: 'https://example.com/channel_one_alternate' }
],
lcn: [{ value: '36' }]
}
],
programs: [
{
start: '2008-07-15T06:30:00.000Z',
stop: '2008-07-15T07:00:00.000Z',
channel: 'I10436.labs.zap2it.com',
title: [{ lang: 'en', value: 'NOW on PBS' }],
subTitle: [{ lang: 'en', value: 'Pilot' }],
desc: [
{
lang: 'en',
value:
"Jordan's Queen Rania has made job creation a priority to help curb the staggering unemployment rates among youths in the Middle East."
}
],
date: '20080711',
category: [
{ lang: 'en', value: 'Newsmagazine' },
{ lang: 'en', value: 'Interview' }
],
keyword: [
{ lang: 'en', value: 'physical-comedy' },
{ lang: 'en', value: 'romantic' }
],
language: [{ value: 'English' }],
origLanguage: [{ lang: 'en', value: 'French' }],
length: [{ units: 'minutes', value: '60' }],
url: [
{ system: 'imdb', value: 'https://example.com/programme_one' },
{ value: 'https://example.com/programme_one_2' }
],
country: [{ value: 'US' }],
video: {
present: 'yes',
colour: 'no',
aspect: '16:9',
quality: 'HDTV'
},
audio: {
present: 'yes',
stereo: 'Dolby Digital'
},
episodeNum: [
{ system: 'dd_progid', value: 'EP01006886.0028' },
{ system: 'onscreen', value: '427' }
],
previouslyShown: [{ start: '20080711000000', channel: 'channel-two.tv' }],
premiere: [{ value: 'First time on British TV' }],
lastChance: [{ lang: 'en', value: 'Last time on this channel' }],
new: true,
subtitles: [
{ type: 'teletext', language: [{ value: 'English' }] },
{ type: 'onscreen', language: [{ lang: 'en', value: 'Spanish' }] }
],
rating: [
{
system: 'BBFC',
value: '15'
},
{
system: 'MPAA',
value: 'NC-17',
icon: [{ src: 'NC-17_symbol.png' }]
}
],
starRating: [
{
system: 'TV Guide',
value: '4/5',
icon: [{ src: 'stars.png' }]
},
{
system: 'IMDB',
value: '8/10'
}
],
review: [
{
type: 'text',
source: 'Rotten Tomatoes',
reviewer: 'Joe Bloggs',
lang: 'en',
value: 'This is a fantastic show!'
},
{
type: 'text',
source: 'IDMB',
reviewer: 'Jane Doe',
lang: 'en',
value: 'I love this show!'
},
{
type: 'url',
source: 'Rotten Tomatoes',
reviewer: 'Joe Bloggs',
lang: 'en',
value: 'https://example.com/programme_one_review'
}
],
image: [
{
type: 'poster',
size: '1',
orient: 'P',
system: 'tvdb',
value: 'https://tvdb.com/programme_one_poster_1.jpg'
},
{
type: 'poster',
size: '2',
orient: 'P',
system: 'tmdb',
value: 'https://tmdb.com/programme_one_poster_2.jpg'
},
{
type: 'backdrop',
size: '3',
orient: 'L',
system: 'tvdb',
value: 'https://tvdb.com/programme_one_backdrop_3.jpg'
},
{
type: 'backdrop',
size: '3',
orient: 'L',
system: 'tmdb',
value: 'https://tmdb.com/programme_one_backdrop_3.jpg'
}
],
credits: {
actor: [
{},
{
role: 'Walter Johnson',
value: 'David Thompson'
},
{
role: 'Karl James',
guest: 'yes',
value: 'Ryan Lee',
image: [{ type: 'person', value: 'https://example.com/xxx.jpg' }],
url: [{ system: 'moviedb', value: 'https://example.com/person/204' }]
}
],
director: [
{
value: 'Bart Eskander'
}
],
producer: [
{
value: 'Roger Dobkowitz'
}
],
presenter: [{ value: 'Drew Carey' }]
},
icon: [
{
width: '100',
height: '100',
src: 'http://imageswoapi.whatsonindia.com/WhatsOnTV/images/ProgramImages/xlarge/38B4DE4E9A7132257749051B6C8B4F699DB264F4V.jpg'
}
]
}
]
}
To get the same result as in previous versions you need to modify some queries:
channel.name
=> channel.displayName
channel.icon[0]
=> channel.icon[0].src
channel.url[0]
=> channel.url[0].value
program.icon[0]
=> program.icon[0].src
program.date[0]
=> program.date
program.credits[0].name
=> program.credits.actor[0].name
npm test
If you find a bug or want to contribute to the code or documentation, you can help by submitting an issue or a pull request.
FAQs
Node.js CLI tool to parse EPG files
The npm package epg-parser receives a total of 2,173 weekly downloads. As such, epg-parser popularity was classified as popular.
We found that epg-parser demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Meet Socket at Black Hat & DEF CON 2025 for 1:1s, insider security talks at Allegiant Stadium, and a private dinner with top minds in software supply chain security.
Security News
CAI is a new open source AI framework that automates penetration testing tasks like scanning and exploitation up to 3,600× faster than humans.
Security News
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.