First, open the /sites folder and select the source that you know has the guide for the channel you want.
Then in the selected folder open the file *.channels.xml
and add to it:
<channel lang="LANGUAGE_CODE" xmltv_id="CHANNEL_ID" site_id="SITE_ID">CHANNEL_NAME</channel>
Attribute | Description | Example |
---|---|---|
LANGUAGE_CODE | Language of the guide (ISO 639-1 code). | en |
CHANNEL_ID | Channel ID from iptv-org/database. A complete list of supported channels can also be found at https://iptv-org.github.io/. | BBCOne.uk |
SITE_ID | Unique ID of the channel used in the source. | bbc1 |
CHANNEL_NAME | Name of the channel used in the source. | BBC 1 |
After that just commit all changes and send a pull request.
To do this, you must create a new folder in the /sites with at least 3 files:
example.com.config.js
This file describes what kind of request we need to send to get the guide for a particular channel on a certain date. It also describes how to parse the response.
module.exports = {
site: 'example.com',
url: function ({ channel, date }) {
return `https://example.com/api/${channel.site_id}/${date.format('YYYY-MM-DD')}`
},
parser: function ({ content }) {
return JSON.parse(content)
}
}
More detailed instructions for this file can be found here: https://github.com/freearhey/epg-grabber#site-config
example.com.test.js
With this file we can test the previously created config and make sure it works as you expect.
const { url, parser } = require('./example.com.config.js')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
const date = dayjs.utc('2022-11-18', 'YYYY-MM-DD').startOf('d')
const channel = { site_id: 'bbc1', xmltv_id: 'BBCOne.uk', lang: 'en' }
it('can generate valid url', () => {
expect(url({ channel, date })).toBe('https://example.com/api/bbc1/2022-11-18')
})
it('can parse response', () => {
const content = `[{"start":"2022-11-18T01:30:00.000Z","stop":"2022-11-18T02:00:00.000Z","title":"Program 1"}]`
const results = parser({ content })
expect(results).toMatchObject([
{
start: '2022-11-18T01:30:00.000Z',
stop: '2022-11-18T02:00:00.000Z',
title: 'Program 1'
}
])
})
it('can handle empty guide', () => {
const results = parser({ content: '' })
expect(results).toMatchObject([])
})
To run the tests you can use the following command:
npm test -- example.com
Detailed documentation for the tests can be found here: https://jestjs.io/docs/using-matchers
example.com.channels.xml
This file contains a list of channels available at the source.
<?xml version="1.0" encoding="UTF-8" ?>
<site site="example.com">
<channels>
<channel lang="en" xmltv_id="BBCOne.uk" site_id="bbc1">BBC 1</channel>
</channels>
</site>
After creating all the files we can make sure that the guide loads correctly and has no errors using the command:
npx epg-grabber --config=sites/example.com/example.com.config.js --channels=sites/example.com/example.com.channels.xml --output=guide.xml --days=2
If the download is successful, the guide.xml
file with the ready to use program should appear in the root directory.
After that, all that remains is to commit all the changes and send a pull request.