Merge branch 'replace-webgrabber'

This commit is contained in:
freearhey 2021-03-11 22:24:27 +03:00
commit 40f76efda9
27 changed files with 13197 additions and 1828 deletions

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8" ?><tv>
<channel id="1HDMusicTelevision.ru"><display-name>1 HD Music Television</display-name></channel>
<channel id="2x2.ru"><display-name>2x2</display-name></channel>
<programme start="20210311045000 +0300" stop="20210311051500 +0300" channel="2x2.ru"><title lang="ru">ДП. 3-я серия</title></programme>
<programme start="20210311051500 +0300" stop="20210311053500 +0300" channel="2x2.ru"><title lang="ru">Пыхчево. Сезон 2. 2-я серия</title></programme>
<programme start="20210311053500 +0300" stop="20210311060000 +0300" channel="2x2.ru"><title lang="ru">Подозрительная Сова. Сезон 8. 14-я серия</title></programme>
<programme start="20210311060000 +0300" stop="20210311064000 +0300" channel="2x2.ru"><title lang="ru">Русские мультфильмы</title></programme>
<programme start="20210311064000 +0300" stop="20210311065500 +0300" channel="2x2.ru"><title lang="ru">Бешеные кролики: Вторжение</title></programme>
<programme start="20210311065500 +0300" stop="20210311084000 +0300" channel="2x2.ru"><title lang="ru">Луча Андеграунд. Сезон 4. 22-я серия</title></programme>
<programme start="20210311084000 +0300" stop="20210311091000 +0300" channel="2x2.ru"><title lang="ru">Симпсоны. Сезон 12. 21-я серия - "Небылицы Симпсонов"</title></programme>
<programme start="20210311091000 +0300" stop="20210311093500 +0300" channel="2x2.ru"><title lang="ru">Симпсоны. Сезон 13. 1-я серия - "Дом ужасов-12"</title></programme>
<programme start="20210311093500 +0300" stop="20210311100500 +0300" channel="2x2.ru"><title lang="ru">Симпсоны. Сезон 13. 2-я серия - "Наказание родителя"</title></programme>
<programme start="20210311100500 +0300" stop="20210311103500 +0300" channel="2x2.ru"><title lang="ru">Симпсоны. Сезон 13. 3-я серия - "Гомер "Мо"</title></programme>
<programme start="20210311103500 +0300" stop="20210311110500 +0300" channel="2x2.ru"><title lang="ru">Удивительный мир Гамбола. Сезон 2. 31-я и 32-я серии</title></programme>
<programme start="20210311110500 +0300" stop="20210311113000 +0300" channel="2x2.ru"><title lang="ru">Удивительный мир Гамбола. Сезон 2. 33-я и 34-я серии</title></programme>
<programme start="20210311113000 +0300" stop="20210311115500 +0300" channel="2x2.ru"><title lang="ru">Удивительный мир Гамбола. Сезон 2. 35-я и 36-я серии</title></programme>
<programme start="20210311115500 +0300" stop="20210311125500 +0300" channel="2x2.ru"><title lang="ru">Космические цыплята в космосе. 4-я - 6-я серии</title></programme>
<programme start="20210311125500 +0300" stop="20210311132500 +0300" channel="2x2.ru"><title lang="ru">Аватар: легенда о Корре. Сезон 1. 7-я серия</title></programme>
<programme start="20210311132500 +0300" stop="20210311135500 +0300" channel="2x2.ru"><title lang="ru">Аватар: легенда о Корре. Сезон 1. 8-я серия</title></programme>
<programme start="20210311135500 +0300" stop="20210311142500 +0300" channel="2x2.ru"><title lang="ru">Футурама. Сезон 9. 13-я серия</title></programme>
<programme start="20210311142500 +0300" stop="20210311145500 +0300" channel="2x2.ru"><title lang="ru">Футурама. Сезон 3. 1-я серия</title></programme>
<programme start="20210311145500 +0300" stop="20210311152500 +0300" channel="2x2.ru"><title lang="ru">Футурама. Сезон 3. 2-я серия</title></programme>
<programme start="20210311152500 +0300" stop="20210311155000 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 153-я серия</title></programme>
<programme start="20210311155000 +0300" stop="20210311162000 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 154-я серия</title></programme>
<programme start="20210311162000 +0300" stop="20210311165000 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 155-я серия</title></programme>
<programme start="20210311165000 +0300" stop="20210311171500 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 156-я серия</title></programme>
<programme start="20210311171500 +0300" stop="20210311174000 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 157-я серия</title></programme>
<programme start="20210311174000 +0300" stop="20210311181000 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 158-я серия</title></programme>
<programme start="20210311181000 +0300" stop="20210311183500 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 159-я серия</title></programme>
<programme start="20210311183500 +0300" stop="20210311190500 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 160-я серия</title></programme>
<programme start="20210311190500 +0300" stop="20210311193000 +0300" channel="2x2.ru"><title lang="ru">Губка Боб квадратные штаны. Сезон 8. 161-я серия</title></programme>
<programme start="20210311193000 +0300" stop="20210311200000 +0300" channel="2x2.ru"><title lang="ru">Гриффины. Сезон 2. 9-я серия</title></programme>
<programme start="20210311200000 +0300" stop="20210311202500 +0300" channel="2x2.ru"><title lang="ru">Гриффины. Сезон 2. 10-я серия</title></programme>
<programme start="20210311202500 +0300" stop="20210311205500 +0300" channel="2x2.ru"><title lang="ru">Гриффины. Сезон 2. 12-я серия</title></programme>
<programme start="20210311205500 +0300" stop="20210311212100 +0300" channel="2x2.ru"><title lang="ru">Гриффины. Сезон 2. 13-я серия</title></programme>
<programme start="20210311212100 +0300" stop="20210311215500 +0300" channel="2x2.ru"><title lang="ru">Гриффины. Сезон 2. 15-я серия</title></programme>
<programme start="20210311215500 +0300" stop="20210311222200 +0300" channel="2x2.ru"><title lang="ru">Гриффины. Сезон 3. 1-я серия</title></programme>
<programme start="20210311222200 +0300" stop="20210311225000 +0300" channel="2x2.ru"><title lang="ru">Гриффины. Сезон 3. 2-я серия</title></programme>
<programme start="20210311225000 +0300" stop="20210311230500 +0300" channel="2x2.ru"><title lang="ru">Подозрительная Сова. Сезон 2. 4-я серия</title></programme>
<programme start="20210311230500 +0300" stop="20210311232000 +0300" channel="2x2.ru"><title lang="ru">Подозрительная Сова. Сезон 2. 5-я серия</title></programme>
<programme start="20210311232000 +0300" stop="20210311235000 +0300" channel="2x2.ru"><title lang="ru">Суперособняк. Сезон 3. 16-я серия</title></programme>
<programme start="20210311235000 +0300" stop="20210312005000 +0300" channel="2x2.ru"><title lang="ru">Проповедник. Сезон 4. 3-я серия</title></programme>
<programme start="20210312005000 +0300" stop="20210312011000 +0300" channel="2x2.ru"><title lang="ru">Южный парк. Сезон 11. 11-я серия</title></programme>
<programme start="20210312011000 +0300" stop="20210312014000 +0300" channel="2x2.ru"><title lang="ru">Черепашки мутанты ниндзя. Сезон 3. 20-я серия - "Возвращение Мухи"</title></programme>
<programme start="20210312014000 +0300" stop="20210312020000 +0300" channel="2x2.ru"><title lang="ru">Черепашки мутанты ниндзя. Сезон 3. 21-я серия - "Прощай Муха"</title></programme>
<programme start="20210312020000 +0300" stop="20210312022500 +0300" channel="2x2.ru"><title lang="ru">Черепашки мутанты ниндзя. Сезон 3. 22-я серия - "Вторжение похитителей черепах"</title></programme>
<programme start="20210312022500 +0300" stop="20210312025000 +0300" channel="2x2.ru"><title lang="ru">Гриффины. Сезон 2. 14-я серия</title></programme>
<programme start="20210312025000 +0300" stop="20210312031000 +0300" channel="2x2.ru"><title lang="ru">Шоу Кливленда. Сезон 2. 10-я серия</title></programme>
<programme start="20210312031000 +0300" stop="20210312033500 +0300" channel="2x2.ru"><title lang="ru">Шоу Кливленда. Сезон 2. 11-я серия</title></programme>
<programme start="20210312033500 +0300" stop="20210312035500 +0300" channel="2x2.ru"><title lang="ru">Шоу Кливленда. Сезон 2. 12-я серия</title></programme>
<programme start="20210312035500 +0300" stop="20210312045000 +0300" channel="2x2.ru"><title lang="ru">2X2 Music</title></programme>
<programme start="20210312045000 +0300" stop="20210312051500 +0300" channel="2x2.ru"><title lang="ru">ДП. 4-я серия</title></programme></tv>

File diff suppressed because it is too large Load Diff

3
.gitignore vendored
View File

@ -1,5 +1,2 @@
/siteini.pack/
*.log.txt
hot_cookies.txt
robots/
node_modules

Binary file not shown.

View File

@ -1,105 +0,0 @@
#!/bin/bash
#/**
# * @file SiteIni.Pack.Update.sh
# * @brief will update the siteini.pack folder
# * @author Francis De Paemeleere
# * @date 31/07/2016
# */
#backup the current working dir
WG_BCKP_DIR="$(pwd)"
function quit {
#restore previous working dir
cd "$WG_BCKP_DIR"
exit $1;
}
which unzip >/dev/null 2>&1 || { echo >&2 "unzip required, but it's not installed."; quit 1; }
which wget >/dev/null 2>&1 || { echo >&2 "wget required, but it's not installed."; quit 1; }
# set wget progress option
wget --help | grep -q '\--show-progress' && \
_PROGRESS_OPT="-q --show-progress" || _PROGRESS_OPT=""
function download {
wget $_PROGRESS_OPT "$1"
if [[ $? -ne 0 ]]
then
return 1
fi
return 0
}
# get the absolute path of the link (or relative path)
if [ -L $0 ] ; then
DIR=$(dirname $(readlink -f $0)) ;
else
DIR=$PWD/$(dirname $0) ;
fi ;
# move to the real folder
cd "$DIR/.."
#check if we can see the current siteini.pack
echo " ==> detecting siteini.pack"
if [ ! -d "siteini.pack" ]
then
echo "$(pwd)"
echo "[error] Can't find current siteini.pack folder"
quit 1
fi
currentVersion="siteini.pack/*.txt"
files=( $currentVersion )
versionCurrent=${files[0]//[!0-9]/}
echo " ==> Current version: ($versionCurrent)"
content=$(wget http://www.webgrabplus.com/sites/default/files/download/ini/latest_version.txt -q -O -)
#echo "${content//[!0-9]/}"
versionOnline=${content//[!0-9]/}
echo " ==> Online version: ($versionOnline)"
if (( "$versionCurrent" >= "$versionOnline" ))
then
echo " ==> Already up-to-date"
quit 0
fi
echo " ==> removing history file"
#remove older downloaded file (if it would exist)
rm -f SiteIniPack_current.zip
echo " ==> download new siteini.pack package"
#download new file
download "http://webgrabplus.com/sites/default/files/download/ini/SiteIniPack_current.zip"
if [[ $? -ne 0 ]]
then
echo "[error] Download of the siteini.pack failed"
quit 1
fi
echo " ==> remove old siteini.pack"
#remove old siteini.pack
rm -rf siteini.pack
#check if the siteini.pack was deleted correctly
if [ -d "siteini.pack" ]
then
echo "[error] Can't delete old siteini.pack folder"
rm -f SiteIniPack_current.zip
quit 1
fi
echo " ==> extract new siteini.pack"
#extract new siteini.pack
unzip -q SiteIniPack_current.zip -d .
echo " ==> cleanup"
#remove older downloaded file
rm -f SiteIniPack_current.zip
quit 0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

83
bin/epg-grabber/index.js Executable file
View File

@ -0,0 +1,83 @@
#! /usr/bin/env node
const fs = require('fs')
const path = require('path')
const axios = require('axios')
const axiosDelayAdapter = require('axios-delay').default
const utils = require('./utils')
const { Command } = require('commander')
const program = new Command()
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
program
.version('0.1.0', '-v, --version')
.name('epg-grabber')
.description('EPG grabber')
.usage('[options] [file-or-url]')
.option('-c, --config <config>', 'Path to [site].config.xml file', './')
.option('-s, --sites <sites>', 'Path to sites folder', './sites')
.parse(process.argv)
const options = program.opts()
const config = utils.parseConfig(options.config)
const sites = utils.loadSites(options.sites)
const client = axios.create({
adapter: axiosDelayAdapter(axios.defaults.adapter),
headers: { 'User-Agent': config.userAgent }
})
async function main() {
console.log('\r\nStarting...')
console.log(`Loading '${options.config}'...`)
const d = dayjs.utc()
const dates = Array.from({ length: config.days }, (_, i) => d.add(i, 'd'))
const channels = config.channels
const requests = []
channels.forEach(channel => {
const site = sites[channel.site]
dates.forEach(date => {
requests.push({
url: site.url({ date, channel }),
date,
channel
})
})
})
console.log('Parsing:')
let programs = []
for (let request of requests) {
const progs = await client
.get(request.url)
.then(response => {
const channel = request.channel
const site = sites[channel.site]
const programs = site.parser({
channel,
content: response.data,
date: request.date
})
console.log(` ${channel.site} - ${channel.xmltv_id} (${programs.length} programs)`)
return programs
})
.then(utils.sleep(3000))
.catch(console.log)
programs = programs.concat(progs)
}
const xml = utils.convertToXMLTV({ channels, programs })
utils.createDir(path.dirname(config.filename))
utils.writeToFile(config.filename, xml)
console.log(`File '${config.filename}' successfully updated`)
console.log('Finish\r\n')
}
main()

97
bin/epg-grabber/utils.js Normal file
View File

@ -0,0 +1,97 @@
const fs = require('fs')
const path = require('path')
const convert = require('xml-js')
const dayjs = require('dayjs')
const glob = require('glob')
const utils = {}
utils.convertToXMLTV = function ({ channels, programs }) {
let output = '<?xml version="1.0" encoding="UTF-8" ?><tv>'
for (let channel of channels) {
output += `
<channel id="${channel['xmltv_id']}"><display-name>${channel.name}</display-name></channel>`
}
for (let program of programs) {
const start = program.start ? dayjs(program.start).format('YYYYMMDDHHmmss ZZ') : ''
const stop = program.stop ? dayjs(program.stop).format('YYYYMMDDHHmmss ZZ') : ''
const title = program.title ? program.title.toString().trim().replace('&', '&amp;') : ''
const lang = program.lang ? program.lang : 'en'
if (start && title) {
output += `
<programme start="${start}" stop="${stop}" channel="${program.channel}"><title lang="${lang}">${title}</title>`
if (program.category) {
output += `<category lang="${lang}">${program.category}</category>`
}
output += '</programme>'
}
}
output += '\r\n</tv>'
return output
}
utils.parseConfig = function (configPath) {
const xml = fs.readFileSync(path.resolve(process.cwd(), configPath), {
encoding: 'utf-8'
})
const result = convert.xml2js(xml)
const settings = result.elements.find(el => el.name === 'settings')
const filename = this.getElementText('filename', settings.elements)
const days = this.getElementText('days', settings.elements)
const userAgent = this.getElementText('user-agent', settings.elements)
const channels = settings.elements
.filter(el => el.name === 'channel')
.map(el => {
const channel = el.attributes
channel.name = el.elements.find(el => el.type === 'text').text
return channel
})
return {
filename,
days,
userAgent,
channels
}
}
utils.getElementText = function (name, elements) {
const el = elements.find(el => el.name === name)
return el ? el.elements.find(el => el.type === 'text').text : null
}
utils.loadSites = function (sitesPath) {
const sites = {}
glob.sync(`${sitesPath}/*.js`).forEach(function (file) {
const name = path.parse(file).name
sites[name] = require(path.resolve(file))
})
return sites
}
utils.sleep = function (ms) {
return function (x) {
return new Promise(resolve => setTimeout(() => resolve(x), ms))
}
}
utils.createDir = function (dir) {
if (!fs.existsSync(path.resolve(__dirname, dir))) {
fs.mkdirSync(path.resolve(__dirname, dir))
}
}
utils.writeToFile = function (filename, data) {
fs.writeFileSync(path.resolve(__dirname, filename), data)
}
module.exports = utils

View File

@ -1,15 +0,0 @@
<?xml version="1.0"?>
<settings>
<filename>../../.gh-pages/guide_en.xml</filename>
<mode></mode>
<postprocess grab="y" run="n">rex</postprocess>
<user-agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 Edg/79.0.309.71</user-agent>
<logging>off</logging>
<retry time-out="5">4</retry>
<timespan>0</timespan>
<update>f</update>
<channel update="i" site="m.tvguide.co.uk-full" site_id="66" xmltv_id="BBCNews.uk">BBC News</channel>
</settings>

View File

@ -1,171 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Configuration file for the REX (Re-arrange and Edit Xmltv) postprocessor of WebGrab+Plus
by Jan van Straaten
Version 4 Januari 2020 Postprocess V2.0.9
- added xmltv attributes processing for the elements to expand in 'Content and Values' section
- added all Webgrab+Plus xmltv elements are now supported
WebGrab+Plus Version V3.0.0 or higher
Version 3 April 2019 Postprocess v2.0.8
- added optional 'source_file' variable in >filename
- added optional operations of the elements to expand in 'Content and Values' section
WebGrab+Plus Version V2.1.9 or higher-->
<!--This configuration file can be made fully functional, change the settings to your own needs as explained and save it in the rex sub-folder of the
WebGrab+Plus homefolder as rex.config.xl-->
<!-- Introduction:
The purpose of this post-processor is to re-arrange and edit the xmltv file created by the grabber section of WebGrab+Plus.
This can be useful or necessary if the EPG viewer of the PVR/Media-Centre used, or the xmltv importer it uses, does not support all the xmltv elements
in the xmltv file created by WG++ or simply because of some users wishes.
It can:
- Move the content of xmltv elements to other xmltv elements
- Merge the content of several xmltv elements
- Add comments/prefix/postfix text
- Remove or create xmltv elements
E.g.: If the PVR doesn't support import of credit elements (actors, directors etc.) it can add the content of them to the description and remove the
original credit elements which are useless.
Or, it can move the episode data to the beginning or end of the subtitle element
Etc. ..
This file (rex.config.xml), is stored in the REX postprocess home folder. By default, that is a subfolder named rex of the WebGrab+Plus home folder
(default C:\Users\username\AppData\Local\WebGrab+Plus)
Remark: This post-processor is only fully effective if the xmltv input has a 'clean' xmltv structure in which the data is properly allocated to the elements.
If that is the case depends on the EPG source site and the design of the SiteIni file . Some of the (e.g. customized) SiteIni files produce xmltv data that
targets certain PVR/Media-Centre requirements already. In these cases this postprocessor is less effective/useful.-->
<settings>
<!--xmltv file :
The xmltv target file in which the updated data will be merged with the grabbed EPG.
Because of the incremental nature of the grabbing process this file must be different (name and/or path) from the target file of the grabbing as <filename>,
specified in WebGrab++.config.xml . Specify path (obtional) + filename. Path can be specified absolute, like
<filename>C:\Users\username\AppData\Local\WebGrab+Plus\rex\guide.xml</filename> or relative to the path of this config file (rex.config.xml),
like (if guide.xml is in the same folder as the config file) : <filename>guide.xml</filename> !!
It may contain a variable 'source_file' that will take the value of the xmltv source file (without .xml) plus text elements:
e.g <filename>final_'source_file'_1.xml</filename> will result in final_guide_1.xml if source_file is guide.xml-->
<filename>guide.xml</filename>
<!-- Configuration of the elements:-->
<![CDATA[
1. Content and Values:
This is best explained in a step by step fashion:
Suppose you want to move the actors to the end of the description. You then specify:
<desc>'description'\n'actor'</desc>
The result is the existing 'description', followed by, on a newline, the actor(s) separated by the standard WG++ element separator |.
The result:
<desc>This is the original description.
Michael Douglas|Kim Basinger</desc>
You probably don't like the | as separator between the actors, so you specify another separator like this:
<desc>'description'\n'actor(, )'</desc>
The result:
<desc>This is the original description.
Michael Douglas, Kim Basinger</desc>
You can make this prettier by adding some text to the actors addition:
<desc>'description'\nActors: 'actor(, )'.</desc>
The result:
<desc>This is the original description.
Actors: Michael Douglas, Kim Basinger.</desc>
A small problem: Suppose the source xmltv show doesn't have any actors, then the result would be not so pretty:
<desc>This is the original description.
Actors: .</desc>
To avoid that, the added text can be linked to the element it must be added to, like this:
<desc>'description'{\nActors: 'actor(, )'.}</desc>
Result with actors:
<desc>This is the original description.
Actors: Michael Douglas, Kim Basinger.</desc>
And without actors:
<desc>This is the original description.</desc>
An example with some more elements:
<desc>'description'{\n\tYear of production: 'productiondate'.}{\n\tProducer: 'producer(, )'.}{\n\tActors: 'actor(, )'.}</desc>
Result:
<desc>This is the original description.
Year of production: 2002.
Producer: Steven Spielberg.
Actors: Michael Douglas, Kim Basinger.</desc>
And another one:
<sub-title>{Episode: 'episode'\t}'subtitle'</sub-title>
Result:
<sub-title>Episode: 3.2/12.1 The original subtitle</sub-title>
You can also remove elements (but not the title!) from the xmltv listing by specifying an empty element, like this:
<actor></actor> or simply <actor />
This will remove all <actor> elements
And this:
<credits />
Will remove the <credits> element, including all its child elements like <actor> , <producer> etc.
Additional options :
** Operations : optionally to do certain operations on the element value to expand e.g:
These operations must be specified within the ' ' characters that specify the elementname, enclosed by [] and separated by a , e.g.
<desc>{Summary: 'description[cleanup(style=upper), max_chars=500]'}{\nActors: 'actor(, )'}</desc>
supported operations :
- cleanup with style and tags arguments,
- max_chars, max_words and max_sentences to limit the content data of the expanded element.
** Xmltv Attributes in content to expand: If the source xmltv element has an attribute, like lang="en" or role="rolename" (in actor) or system="US",
it is possible to add it to the expanded content by add /a (for attribute value only) or /a+ (for attributename and value) to the element name.
This /a or /a+ addition must be added directly after the element name, like 'actor/a' or combined with a custom separator, 'actor/a(, )'
or combined with an operation 'country/a(/)[cleanup(style=lower)]'
Example (assuming the actors role values are provided in the source xmltv file):
<desc>'description'{\n\tYear of production: 'productiondate',}{ Rating: 'rating/a+'.}{\n\tProducer: 'producer(, )'.}{\n\tActors: 'actor/a+(, )'.}</desc>
Result:
<desc>This is the original description.
Year of production: 2002, Rating TV-14(system=US).
Producer: Steven Spielberg.
Actors: Michael Douglas(role=The carpenter), Kim Basinger(role=Mary).</desc>
Summary of Content/Values:
1. Syntax
<xmltv-element-name optional-attribute="attribute-value">content</xmltv-element-name>
- the content of the xmltv-target elements can be specified by means of a mixture of text and element-values.
- content can be left empty to remove the xmltv element (except the element <title>)
- the element-values must be entered by their (wg++) element-name enclosed by ' '
- optionally, element values can be processed by means of certain operations,
E.g. 'description[cleanup(style=upper), max_sentences=2]'
- optionally, element xmltv attribute values can be added to the content by adding /a (only attribute value) or /a+ (value + attributename) to the 'elementname'
- multiple value elements (like actor) will be converted to single value elements if the xmltv-target element is a single value element, like <desc>.
The individual values will be listed with a (standard WG++ internal element separator character) | as separator unless another separator is specified as follows:
'element-name(separator-string)' e.g. 'actor(, )' or with attribute 'actor/a(, )'
- text and element-names can be linked together by enclosing them by {}. This will ensure that, when the element in it is empty, everything between the {} is
ignored. E.g. {\nProduced in : ('productiondate')}
- the text in the xmltv-target elements may contain the following simple formatting :
- \n or \r to force a newline
- \t to add a tab
2. The allowed xmltv-target elements (the ones in the target file specified above) are :
- IMPORTANT! : any of the next listed xmltv-target elements that is specified in this allocation specification, replaces the existing xmltv element and
its content!
2.1 'Full' function , these can be added, changed and removed
<title> <sub-title> <desc> <star-rating> <director> <actor> <category> <episode> <icon>
<review> (=optional new xmltv element)
2.2 'Remove/Keep' only, cannot be added, changed, only removed or kept as 'is'
<date> <producer> <writer> <presenter> <composer> <commentator> <rating> <aspect> <quality> <url> <country>
3. Supported element-names (from the existing xmltv listing, name definitions as in Appendix E of the documentation) to be used as content to expand:
'title' 'description' 'starrating' 'subtitle' 'productiondate' 'category' 'director' 'actor' 'presenter' 'writer' 'composer' 'producer' 'commentator' 'rating'
'episode' 'showicon' 'review' 'subtitles' 'premiere' 'previously-shown' 'aspect' 'quality' 'country' 'url'
4. Attributes
- for each of the xmltv-elements the following attribute can be specified
(if not specified, the existing one, if present in the xmltv, will be used) :
- lang for <title> and <desc> , default : no attribute
- system for <star-rating> , default : no attribute
- type for <review> , default: type="text"
- Existing xmltv attribute values can be added to expanded content. (see above)
]]>
<!-- examples-->
<sub-title>{Episode: 'episode' }'subtitle'</sub-title>
<desc>'description[max_words=100]'{\n\t¤ Produced in: 'productiondate'. }{¤ Category: 'category(, )'. }{\n\t¤ Actors: 'actor/a+(, )'}{\n\t¤ Director: 'director(, )'}{\n\t¤ Presenter: 'presenter(, )'}</desc>
<credits></credits>
<episode-num></episode-num>
<date></date>
<category></category>
<review>{Ratings: 'rating(, )'.}</review>
<rating></rating>
</settings>

View File

@ -1,70 +0,0 @@
**------------------------------------------------------------------------------------------------
* @header_start
* WebGrab+Plus ini for grabbing EPG data from TvGuide websites
* @Site: tvguide.co.uk
* @MinSWversion: V1.1.1/53
* none
* @Revision 2 - [06/03/2017] Netuddki
* added showicon
* @Revision 1 - [17/07/2016] Blackberar199
* showsplit change,start fix
* @Revision 0 - [19/05/2016] Willy De Wilde
* mobile version
* @Remarks:
* none
* @header_end
**------------------------------------------------------------------------------------------------
site {url=tvguide.co.uk|timezone=Europe/London|maxdays=6.1|cultureinfo=en-GB|charset=UTF-8|titlematchfactor=50|allowlastpageoverflow}
url_index{url|http://www.tvguide.co.uk/mobile/channellisting.asp?ch=|channel|}
url_index.headers {customheader=Accept-Encoding=gzip,deflate}
urldate.format {datestring|M/d/yyyy}
*
index_showsplit.scrub {multi(exclude="ADTECH")|<div id="channel-listings">|<tr>|</tr>|<!-- Begin comScore Tag -->}
index_start.scrub {single|<td class="time|">|</td>|</td>}
index_start.modify {replace|am| am}
index_start.modify {replace|pm| pm}
index_title.scrub {single|<div class="title"|">|</div>|</div>}
index_title.modify {cleanup(tags="<"">")}
index_title.modify {cleanup}
index_description.scrub {multi |<div class="detail">||</div>}
index_episode.scrub {single (separator="<br>" include="Season ""Episode ")|<div class="detail">||</div>}
index_description.modify {remove|'index_episode'}
index_description.modify {replace|<div class="other">|**BR**}
index_description.modify {replace|<br><br><br>|**BR**}
index_description.modify {replace|<br><br>|**BR**}
index_description.modify {replace|<br>|**BR**}
index_description.modify {cleanup(tags="<"">")}
index_description.modify {replace|**BR**|\n}
index_description.modify {remove|**BR*}
index_description.modify {remove(type=regex)|\(.+?\)}
index_description.modify {cleanup}
*
index_urlshow {url ()|| href="||"}
title.scrub {single ()|<h1 class="showname"|>|</h1>}
title.modify {cleanup(tags="<"">")}
title.modify {cleanup}
showicon.scrub {single|<div id="headerImage|:url(|);|</div>}
director.scrub {multi((exclude="IMDB"))|Director:|<span class="actor">|</span>}
director.modify {cleanup(tags="<"">")}
*producer.scrub {single(exclude="IMDB")|<span class="role">Series Producer|<span class="actor">|</span>|</a><br>}
*producer.scrub {single(exclude="IMDB")|<span class="role">Executive Producer|<span class="actor">|</span>|</a><br>}
writer.scrub {single(separator=", ")|Writer:|<span class="actor">|</span>}
writer.modify {cleanup(tags="<"">")}
actor.scrub {multi(exclude="IMDB")|Cast</span><br>|itemprop="name">|</span>|<span class="tvchannel">}
category.scrub {multi(separator="/")|<span class="tvchannel">Category: </span>|<span class="programmetext">|</span>|<br>}
productiondate.scrub {single()|<h1|(|)|</h1>} * in title
*title.modify {remove|('productiondate')}
*title.modify {cleanup}
*
** _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
** _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
** ##### CHANNEL FILE CREATION (only to create the xxx-channel.xml file)
**
** @auto_xml_channel_start
* enable the following three lines to create a channel list file for only the selected files
* channels from the desktop version
*url_index{url|http://my.tvguide.co.uk/channellisting.asp?ch=74}
*index_site_channel.scrub {multi|<option value=|>|</option>|</table>}
*index_site_id.scrub {multi|<option value=||>|</table>}
** @auto_xml_channel_end

View File

@ -1,16 +0,0 @@
<?xml version="1.0"?>
<settings>
<filename>../../.gh-pages/guide_ru.xml</filename>
<mode></mode>
<postprocess grab="y" run="n">rex</postprocess>
<user-agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 Edg/79.0.309.71</user-agent>
<logging>off</logging>
<retry time-out="5">4</retry>
<timespan>0</timespan>
<update>f</update>
<channel update="i" site="tv.yandex.ru" site_id="213##323" xmltv_id="2x2.ru">2x2</channel>
<channel update="i" site="tv.yandex.ru" site_id="213##920" xmltv_id="ParamountComedy.ru">Paramount Comedy</channel>
</settings>

View File

@ -1,171 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Configuration file for the REX (Re-arrange and Edit Xmltv) postprocessor of WebGrab+Plus
by Jan van Straaten
Version 4 Januari 2020 Postprocess V2.0.9
- added xmltv attributes processing for the elements to expand in 'Content and Values' section
- added all Webgrab+Plus xmltv elements are now supported
WebGrab+Plus Version V3.0.0 or higher
Version 3 April 2019 Postprocess v2.0.8
- added optional 'source_file' variable in >filename
- added optional operations of the elements to expand in 'Content and Values' section
WebGrab+Plus Version V2.1.9 or higher-->
<!--This configuration file can be made fully functional, change the settings to your own needs as explained and save it in the rex sub-folder of the
WebGrab+Plus homefolder as rex.config.xl-->
<!-- Introduction:
The purpose of this post-processor is to re-arrange and edit the xmltv file created by the grabber section of WebGrab+Plus.
This can be useful or necessary if the EPG viewer of the PVR/Media-Centre used, or the xmltv importer it uses, does not support all the xmltv elements
in the xmltv file created by WG++ or simply because of some users wishes.
It can:
- Move the content of xmltv elements to other xmltv elements
- Merge the content of several xmltv elements
- Add comments/prefix/postfix text
- Remove or create xmltv elements
E.g.: If the PVR doesn't support import of credit elements (actors, directors etc.) it can add the content of them to the description and remove the
original credit elements which are useless.
Or, it can move the episode data to the beginning or end of the subtitle element
Etc. ..
This file (rex.config.xml), is stored in the REX postprocess home folder. By default, that is a subfolder named rex of the WebGrab+Plus home folder
(default C:\Users\username\AppData\Local\WebGrab+Plus)
Remark: This post-processor is only fully effective if the xmltv input has a 'clean' xmltv structure in which the data is properly allocated to the elements.
If that is the case depends on the EPG source site and the design of the SiteIni file . Some of the (e.g. customized) SiteIni files produce xmltv data that
targets certain PVR/Media-Centre requirements already. In these cases this postprocessor is less effective/useful.-->
<settings>
<!--xmltv file :
The xmltv target file in which the updated data will be merged with the grabbed EPG.
Because of the incremental nature of the grabbing process this file must be different (name and/or path) from the target file of the grabbing as <filename>,
specified in WebGrab++.config.xml . Specify path (obtional) + filename. Path can be specified absolute, like
<filename>C:\Users\username\AppData\Local\WebGrab+Plus\rex\guide.xml</filename> or relative to the path of this config file (rex.config.xml),
like (if guide.xml is in the same folder as the config file) : <filename>guide.xml</filename> !!
It may contain a variable 'source_file' that will take the value of the xmltv source file (without .xml) plus text elements:
e.g <filename>final_'source_file'_1.xml</filename> will result in final_guide_1.xml if source_file is guide.xml-->
<filename>guide.xml</filename>
<!-- Configuration of the elements:-->
<![CDATA[
1. Content and Values:
This is best explained in a step by step fashion:
Suppose you want to move the actors to the end of the description. You then specify:
<desc>'description'\n'actor'</desc>
The result is the existing 'description', followed by, on a newline, the actor(s) separated by the standard WG++ element separator |.
The result:
<desc>This is the original description.
Michael Douglas|Kim Basinger</desc>
You probably don't like the | as separator between the actors, so you specify another separator like this:
<desc>'description'\n'actor(, )'</desc>
The result:
<desc>This is the original description.
Michael Douglas, Kim Basinger</desc>
You can make this prettier by adding some text to the actors addition:
<desc>'description'\nActors: 'actor(, )'.</desc>
The result:
<desc>This is the original description.
Actors: Michael Douglas, Kim Basinger.</desc>
A small problem: Suppose the source xmltv show doesn't have any actors, then the result would be not so pretty:
<desc>This is the original description.
Actors: .</desc>
To avoid that, the added text can be linked to the element it must be added to, like this:
<desc>'description'{\nActors: 'actor(, )'.}</desc>
Result with actors:
<desc>This is the original description.
Actors: Michael Douglas, Kim Basinger.</desc>
And without actors:
<desc>This is the original description.</desc>
An example with some more elements:
<desc>'description'{\n\tYear of production: 'productiondate'.}{\n\tProducer: 'producer(, )'.}{\n\tActors: 'actor(, )'.}</desc>
Result:
<desc>This is the original description.
Year of production: 2002.
Producer: Steven Spielberg.
Actors: Michael Douglas, Kim Basinger.</desc>
And another one:
<sub-title>{Episode: 'episode'\t}'subtitle'</sub-title>
Result:
<sub-title>Episode: 3.2/12.1 The original subtitle</sub-title>
You can also remove elements (but not the title!) from the xmltv listing by specifying an empty element, like this:
<actor></actor> or simply <actor />
This will remove all <actor> elements
And this:
<credits />
Will remove the <credits> element, including all its child elements like <actor> , <producer> etc.
Additional options :
** Operations : optionally to do certain operations on the element value to expand e.g:
These operations must be specified within the ' ' characters that specify the elementname, enclosed by [] and separated by a , e.g.
<desc>{Summary: 'description[cleanup(style=upper), max_chars=500]'}{\nActors: 'actor(, )'}</desc>
supported operations :
- cleanup with style and tags arguments,
- max_chars, max_words and max_sentences to limit the content data of the expanded element.
** Xmltv Attributes in content to expand: If the source xmltv element has an attribute, like lang="en" or role="rolename" (in actor) or system="US",
it is possible to add it to the expanded content by add /a (for attribute value only) or /a+ (for attributename and value) to the element name.
This /a or /a+ addition must be added directly after the element name, like 'actor/a' or combined with a custom separator, 'actor/a(, )'
or combined with an operation 'country/a(/)[cleanup(style=lower)]'
Example (assuming the actors role values are provided in the source xmltv file):
<desc>'description'{\n\tYear of production: 'productiondate',}{ Rating: 'rating/a+'.}{\n\tProducer: 'producer(, )'.}{\n\tActors: 'actor/a+(, )'.}</desc>
Result:
<desc>This is the original description.
Year of production: 2002, Rating TV-14(system=US).
Producer: Steven Spielberg.
Actors: Michael Douglas(role=The carpenter), Kim Basinger(role=Mary).</desc>
Summary of Content/Values:
1. Syntax
<xmltv-element-name optional-attribute="attribute-value">content</xmltv-element-name>
- the content of the xmltv-target elements can be specified by means of a mixture of text and element-values.
- content can be left empty to remove the xmltv element (except the element <title>)
- the element-values must be entered by their (wg++) element-name enclosed by ' '
- optionally, element values can be processed by means of certain operations,
E.g. 'description[cleanup(style=upper), max_sentences=2]'
- optionally, element xmltv attribute values can be added to the content by adding /a (only attribute value) or /a+ (value + attributename) to the 'elementname'
- multiple value elements (like actor) will be converted to single value elements if the xmltv-target element is a single value element, like <desc>.
The individual values will be listed with a (standard WG++ internal element separator character) | as separator unless another separator is specified as follows:
'element-name(separator-string)' e.g. 'actor(, )' or with attribute 'actor/a(, )'
- text and element-names can be linked together by enclosing them by {}. This will ensure that, when the element in it is empty, everything between the {} is
ignored. E.g. {\nProduced in : ('productiondate')}
- the text in the xmltv-target elements may contain the following simple formatting :
- \n or \r to force a newline
- \t to add a tab
2. The allowed xmltv-target elements (the ones in the target file specified above) are :
- IMPORTANT! : any of the next listed xmltv-target elements that is specified in this allocation specification, replaces the existing xmltv element and
its content!
2.1 'Full' function , these can be added, changed and removed
<title> <sub-title> <desc> <star-rating> <director> <actor> <category> <episode> <icon>
<review> (=optional new xmltv element)
2.2 'Remove/Keep' only, cannot be added, changed, only removed or kept as 'is'
<date> <producer> <writer> <presenter> <composer> <commentator> <rating> <aspect> <quality> <url> <country>
3. Supported element-names (from the existing xmltv listing, name definitions as in Appendix E of the documentation) to be used as content to expand:
'title' 'description' 'starrating' 'subtitle' 'productiondate' 'category' 'director' 'actor' 'presenter' 'writer' 'composer' 'producer' 'commentator' 'rating'
'episode' 'showicon' 'review' 'subtitles' 'premiere' 'previously-shown' 'aspect' 'quality' 'country' 'url'
4. Attributes
- for each of the xmltv-elements the following attribute can be specified
(if not specified, the existing one, if present in the xmltv, will be used) :
- lang for <title> and <desc> , default : no attribute
- system for <star-rating> , default : no attribute
- type for <review> , default: type="text"
- Existing xmltv attribute values can be added to expanded content. (see above)
]]>
<!-- examples-->
<sub-title>{Episode: 'episode' }'subtitle'</sub-title>
<desc>'description[max_words=100]'{\n\t¤ Produced in: 'productiondate'. }{¤ Category: 'category(, )'. }{\n\t¤ Actors: 'actor/a+(, )'}{\n\t¤ Director: 'director(, )'}{\n\t¤ Presenter: 'presenter(, )'}</desc>
<credits></credits>
<episode-num></episode-num>
<date></date>
<category></category>
<review>{Ratings: 'rating(, )'.}</review>
<rating></rating>
</settings>

View File

@ -1,152 +0,0 @@
**------------------------------------------------------------------------------------------------
* @header_start
* WebGrab+Plus ini for grabbing EPG data from TvGuide websites
* @Site: tv.yandex.ru
* @MinSWversion: V1.57
* @Revision 7 - [18/02/2019] EgiszZ
* - ini fixes based on new web site design (title)
* @Revision 6 - [14/10/2018] FlyGoneCrazy
* - ini fixes based on new web site design
* @Revision 5 - [08/11/2017] Blackbear199
* - added UA and TR to channels.xml creation
* @Revision 4 - [30/10/2017] Blackbear199
* - site changes
* @Revision 3 - [05/04/2017] Blackbear199
* - site changes
* @Revision 2 - [28/07/2016] Blackbear199
* - title match fix
* @Revision 1 - [25/07/2016] Blackbear199
* - added subtitle
* - added country
* - added urlchannellogo
* - added showicon
* - rewrote season/episode to version 56.25+ format.
* - set desired output,onscreen(S5 E9/10) or xmltv_ns(4.8/9.) on site{...} line.default onscreen.
* @Revision 0 - [02/03/2016] Blackbear199
* - creation
* @Remarks: your_remarks
* @header_end
**------------------------------------------------------------------------------------------------
*site {loadcookie=cookie_file.txt}
site {url=tv.yandex.ru|timezone=Europe/Moscow|maxdays=6|cultureinfo=ru-RU|charset=UTF-8|titlematchfactor=90}
site {ratingsystem=RU|episodesystem=onscreen}
*
url_index{url|https://tv.yandex.ru/##region##/channels/##channel##?date=|urldate|&period=all-day}
url_index.headers {customheader=Accept-Encoding=gzip,deflate}
urldate.format {datestring|yyyy-MM-dd}
*
scope.range{(urlindex)|end}
global_temp_1.modify {substring(type=regex)|'config_site_id' "^(\d+)##"}
global_temp_2.modify {substring(type=regex)|'config_site_id' "##(\d+)$"}
url_index.modify {replace|##region##|'global_temp_1'}
url_index.modify {replace|##channel##|'global_temp_2'}
end_scope
*
index_urlchannellogo {url(scope=datelogo)|https:|<img class="image__img" src="||"/>|/>}
*
index_showsplit.scrub {multi|"events":[{||}]}|}]}}
index_showsplit.modify {replace|\},\{|\|}
*
index_urlshow {url|https://tv.yandex.ru|"url":"||",|",}
index_urlshow.headers {customheader=Accept-Encoding=gzip,deflate}
*
index_temp_1.scrub {regex||"start":"\d{4}-\d{2}-\d{2}T\d{1,2}:\d{2}:\d{2}([-+]\d{2}:\d{2})"||}
index_start.scrub {regex||"start":"(\d{4}-\d{2}-\d{2}T\d{1,2}:\d{2}:\d{2})[-+]\d{2}:\d{2}"||}
index_stop.scrub {regex||"finish":"(\d{4}-\d{2}-\d{2}T\d{1,2}:\d{2}:\d{2})[-+]\d{2}:\d{2}"||}
*index_title.scrub {(debug)single||||}
index_title.scrub {regex||"finish":"[^"]*"(?:,"liveId":\d*,"yacFamilyId":\d*)?,"title":"(.*?)","||}
index_title.scrub {regex||"finish":"[^"]*"(?:,"yacFamilyId":\d*)?,"title":"(.*?)","||}
*index_title.scrub {single|,"title":"||"|"}
*index_title.scrub {(debug)single|<h1 class="program-header__title" itemprop="name">||</h1>|</h1>}
index_subtitle.scrub {single|"episodeTitle":"||","|","}
*
scope.range{(indexshowdetails)|end}
index_start.modify {calculate(format=date,unix)}
index_stop.modify {calculate(format=date,unix)}
index_temp_2.modify {substring(type=char)|'index_temp_1' 0 1}
index_temp_1.modify {remove(type=char)|0 1}
index_temp_1.modify {calculate(format=F0)|3600 *}
index_start.modify {calculate('index_temp_2' "-" format=F0)|'index_start' 'index_temp_1' +}
index_start.modify {calculate('index_temp_2' "+" format=F0)|'index_start' 'index_temp_1' -}
index_stop.modify {calculate('index_temp_2' "-" format=F0)|'index_stop' 'index_temp_1' +}
index_stop.modify {calculate('index_temp_2' "+" format=F0)|'index_stop' 'index_temp_1' -}
index_title.modify {cleanup(style=jsondecode)}
index_title.modify {replace(type=regex)|(.*)(","title":")|}
index_subtitle.modify {clear('index_title')}
index_subtitle.modify {substring(type=regex)|"\s-\s\"(.*?)\""}
*
index_episode.modify {substring(type=regex pattern="Сезон 'S1'. 'E1'/'Et1'""Сезон 'S1'. 'E1'""'E1'/'Et1'""'E1'")|'index_title' "\s((?:Сезон\s\d+\.\s)?(?:\d+-я\s[и-]\s)?\d+-я\sсери[ия])"}
*index_episode.modify {replace|-я и |/}
*index_episode.modify {replace|-я - |/}
*index_episode.modify {remove(type=regex)|-я сери[ия]}
index_title.modify {remove(type=regex)|\.*\s(?:Сезон \d+\.\s)?(?:\d+-я\s[и-]\s)?\d+-я\sсери[ия](?:\s-*\s*\".*?\")?}
*
*index_subtitle.modify {substring(type=regex)|"\s-\s\"(.*?)\""}
index_category.scrub {single|"type":{|"name":"|"|}}
end_scope
*
title.modify {addstart|'index_title'} *index_title and details title often different
title.modify {replace(type=regex)|(.*)(","title":")|}
*description.scrub {(debug)||||}
description.scrub {single|<meta name="description" content="||" />|" />}
*description.scrub {(debug)regex||"description":"(.+?)","countries"||}
*description.modify {replace(type=regex)|(","(.*))|}
description.modify {cleanup}
*director.scrub {multi|Режиссёр</div>|<i itemProp="name">|</i>|</div>}
director.scrub {multi|Режиссёр|<i itemProp="name">|</i>|</div>}
*director.scrub {(debug)regex||Режиссёр(.+?)</div>||}
*actor.scrub {(debug)multi||||}
*actor.scrub {multi|В ролях|<span class="program-persons__name" itemprop="name">|</span>|</div></div></div>}
actor.scrub {regex||\{"id":\d+,"name":"(.+?)","role":"actor","||}
actor.modify {replace(type=regex)|(.*)(,"name":")|}
*actor.scrub {(debug)multi|"name":"||","role":"actor","|","role":"actor","}
*actor.modify {(debug)regex||"name":"(.+?)","role":"actor","||}
*presenter.scrub {multi|Ведущие</div>|<span>|</span>|</div>}
presenter.scrub {multi|Ведущий</h3>|itemProp="presenter">|</span>|</div>}
rating.scrub {single|<span class="program-header__age">||</span>|</span>}
rating.modify {cleanup(tags="<"">")}
*rating.scrub {single|class="program-statistics__value">||</div>|</div>}
*starrating.scrub {single|Рейтинг КиноПоиска</div>|">|</div>|</div>}
starrating.scrub {single|class="program-statistics__value">||</div>|</div>}
productiondate.scrub {single|Страна и год</h3>|class="program-details__text">|</div></div>|</div></div>}
productiondate.modify {replace(type=regex)|(.*)(, )|}
country.scrub {single|Страна и год</h3>|class="program-details__text">|</div></div>|</div></div>}
country.modify {replace(type=regex)|(, \d{4})|}
showicon.scrub {single|<div class="program-header__trailer" style="background-image:url('||')">|')">}
showicon.modify {addstart(not "")|https:}
*
** _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
** ##### CHANNEL FILE CREATION (only to create the xxx-channel.xml file)
**
** @auto_xml_channel_start
*url_index{url|https://tv.yandex.ru/ajax?params=%5B%7B%22name%22%3A%22i-tv-region%22%2C%22method%22%3A%22get%22%2C%22args%22%3A%7B%22params%22%3A%22%7B%5C%22type%5C%22%3A%5C%22regional%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5C%22schedules%2Cchannels%2Cfinish%2Cchannel%2Cid%2Ctitle%2Cfavourite%5C%22%2C%5C%22lang%5C%22%3A%5C%22ru%5C%22%7D%22%2C%22cacheKey%22%3A%22channels%3Fparams%3D%7B%5C%22type%5C%22%3A%5C%22regional%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5B%5C%22schedules%5C%22%2C%5C%22channels%5C%22%2C%5C%22finish%5C%22%2C%5C%22channel%5C%22%2C%5C%22id%5C%22%2C%5C%22title%5C%22%2C%5C%22favourite%5C%22%5D%7D%22%2C%22userRegion%22%3A%22|subpage|%22%2C%22resource%22%3A%22channels%22%2C%22ncrd%22%3A1469479392374%7D%7D%2C%7B%22name%22%3A%22i-tv-region%22%2C%22method%22%3A%22get%22%2C%22args%22%3A%7B%22params%22%3A%22%7B%5C%22type%5C%22%3A%5C%22local%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5C%22schedules%2Cchannels%2Cfinish%2Cchannel%2Cid%2Ctitle%2Cfavourite%5C%22%2C%5C%22lang%5C%22%3A%5C%22ru%5C%22%7D%22%2C%22cacheKey%22%3A%22channels%3Fparams%3D%7B%5C%22type%5C%22%3A%5C%22local%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5B%5C%22schedules%5C%22%2C%5C%22channels%5C%22%2C%5C%22finish%5C%22%2C%5C%22channel%5C%22%2C%5C%22id%5C%22%2C%5C%22title%5C%22%2C%5C%22favourite%5C%22%5D%7D%22%2C%22userRegion%22%3A%22|subpage|%22%2C%22resource%22%3A%22channels%22%2C%22ncrd%22%3A1469479392374%7D%7D%2C%7B%22name%22%3A%22i-tv-region%22%2C%22method%22%3A%22get%22%2C%22args%22%3A%7B%22params%22%3A%22%7B%5C%22type%5C%22%3A%5C%22satelite%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5C%22schedules%2Cchannels%2Cfinish%2Cchannel%2Cid%2Ctitle%2Cfavourite%5C%22%2C%5C%22lang%5C%22%3A%5C%22ru%5C%22%7D%22%2C%22cacheKey%22%3A%22channels%3Fparams%3D%7B%5C%22type%5C%22%3A%5C%22satelite%5C%22%2C%5C%22packageIds%5C%22%3A%5B%5D%2C%5C%22limit%5C%22%3A500%2C%5C%22fields%5C%22%3A%5B%5C%22schedules%5C%22%2C%5C%22channels%5C%22%2C%5C%22finish%5C%22%2C%5C%22channel%5C%22%2C%5C%22id%5C%22%2C%5C%22title%5C%22%2C%5C%22favourite%5C%22%5D%7D%22%2C%22userRegion%22%3A%22|subpage|%22%2C%22resource%22%3A%22channels%22%2C%22ncrd%22%3A1469479392374%7D%7D%5D&sk=42a26daf72c9b3c34a81c144d6a754f0&userRegion=|subpage|&resource=null&ncrd=}
*subpage.format {list|187|213|983}
*index_site_id.scrub {|}
*index_temp_9.scrub {regex||^.*$||}
*index_temp_9.modify {replace|]\}"\}]|\|}
*index_temp_9.modify {remove(type=element)|-1 1}
*scope.range{(channellist)|end}
*index_temp_4.modify {set|187\|213\|983}
*index_temp_3.modify {set|0}
*loop{(each "index_temp_8" in 'index_temp_9')|end}
*index_temp_7.modify {substring(type=element)|'index_temp_4' 'index_temp_3' 1}
*index_temp_6.modify {substring(type=regex)|'index_temp_8' ":(\d+)\}}
*index_temp_5.modify {substring(type=regex)|'index_temp_8' "\\\"title\\\":\\\"(.+?)\\\","}
*index_temp_6.modify {addstart|'index_temp_7'##}
*index_temp_5.modify {addstart('index_temp_7' "187")|UA-}
*index_temp_5.modify {addstart('index_temp_7' "213")|RU-}
*index_temp_5.modify {addstart('index_temp_7' "983")|TR-}
*index_temp_6.modify {replace|\||#_#}
*index_temp_5.modify {replace|\||#_#}
*index_site_id.modify {addend|'index_temp_6'#_#}
*index_site_channel.modify {addend|'index_temp_5'#_#}
*index_temp_3.modify {calculate(format=F0)|1 +}
*end_loop
*index_site_id.modify {replace|#_#|\|}
*index_site_channel.modify {replace|#_#|\|}
*index_site_id.modify {remove(type=element)|-1 1}
*index_site_channel.modify {remove(type=element)|-1 1}
*index_site_id.modify {cleanup(removeduplicates=equal,100 link="index_site_channel")}
*end_scope
** @auto_xml_channel_end

2298
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

17
package.json Normal file
View File

@ -0,0 +1,17 @@
{
"name": "epg",
"scripts": {},
"private": true,
"author": "Arhey",
"license": "MIT",
"dependencies": {
"axios": "^0.21.1",
"axios-delay": "^1.0.0-rc6",
"cheerio": "^1.0.0-rc.5",
"commander": "^7.1.0",
"dayjs": "^1.10.4",
"glob": "^7.1.6",
"jsdom": "^16.5.0",
"xml-js": "^1.6.11"
}
}

299
sites/tv.yandex.ru.config.xml Executable file
View File

@ -0,0 +1,299 @@
<?xml version="1.0"?>
<settings>
<filename>../../.gh-pages/guides/tv.yandex.ru.xml</filename>
<user-agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 Edg/79.0.309.71</user-agent>
<days>1</days>
<channel site="tv.yandex.ru" site_id="1hd-99" xmltv_id="1HDMusicTelevision.ru">1 HD Music Television</channel>
<channel site="tv.yandex.ru" site_id="2x2-29" xmltv_id="2x2.ru">2x2</channel>
<channel site="tv.yandex.ru" site_id="360-95" xmltv_id="360deg.ru">360°</channel>
<channel site="tv.yandex.ru" site_id="365-dney-tv-470" xmltv_id="365dneyTV.ru">365 дней ТВ</channel>
<channel site="tv.yandex.ru" site_id="7-tv-1241" xmltv_id="7TV.ru">7 TV</channel>
<channel site="tv.yandex.ru" site_id="8-kanal-456" xmltv_id="8Kanal.ru">8 Канал</channel>
<channel site="tv.yandex.ru" site_id="a1-237" xmltv_id="A1.ru">A1</channel>
<channel site="tv.yandex.ru" site_id="a2-89" xmltv_id="A2.ru">A2</channel>
<channel site="tv.yandex.ru" site_id="ajara-tv-682" xmltv_id="AjaraTV.ru">Ajara TV</channel>
<channel site="tv.yandex.ru" site_id="amc-615" xmltv_id="AMCRussia.us">AMC Russia</channel>
<channel site="tv.yandex.ru" site_id="amedia-premium-hd-238" xmltv_id="AmediaPremiumHD.ru">Amedia Premium HD</channel>
<channel site="tv.yandex.ru" site_id="anekdot-tv-85" xmltv_id="AnekdotTV.ru">Анекдот ТВ</channel>
<channel site="tv.yandex.ru" site_id="animal-planet-22" xmltv_id="AnimalPlanetRossiya.us">Animal Planet Россия</channel>
<channel site="tv.yandex.ru" site_id="animal-planet-hd-769" xmltv_id="AnimalPlanetRossiya.us">Animal Planet HD Россия</channel>
<channel site="tv.yandex.ru" site_id="avto-plyus-436" xmltv_id="AvtoPlyus.ru">Авто Плюс</channel>
<channel site="tv.yandex.ru" site_id="baby-tv-491" xmltv_id="BabyTVPusskiy.uk">BabyTV Pусский</channel>
<channel site="tv.yandex.ru" site_id="balashiha-tv-1115" xmltv_id="BalashihaTV.ru">Балашиха ТВ</channel>
<channel site="tv.yandex.ru" site_id="bbc-572" xmltv_id="BBC.uk">BBC</channel>
<channel site="tv.yandex.ru" site_id="bbc-entertainment-479" xmltv_id="BBCEntertainment.uk">BBC Entertainment</channel>
<channel site="tv.yandex.ru" site_id="bbc-world-news-712" xmltv_id="BBCWorldNews.uk">BBC World News</channel>
<channel site="tv.yandex.ru" site_id="belarus-24-468" xmltv_id="Belarus24.by">Беларусь-24</channel>
<channel site="tv.yandex.ru" site_id="belros-675" xmltv_id="BelRos.ru">БелРос</channel>
<channel site="tv.yandex.ru" site_id="bloomberg-552" xmltv_id="Bloomberg.us">Bloomberg</channel>
<channel site="tv.yandex.ru" site_id="bober-1171" xmltv_id="Bober.ru">Бобер</channel>
<channel site="tv.yandex.ru" site_id="boks-tv-1095" xmltv_id="BoksTV.ru">Бокс ТВ</channel>
<channel site="tv.yandex.ru" site_id="bollywood-hd-1105" xmltv_id="BollywoodHD.ru">Bollywood HD</channel>
<channel site="tv.yandex.ru" site_id="boomerang-741" xmltv_id="BoomerangCentralEasternEurope.us">Boomerang Central &amp; Eastern Europe</channel>
<channel site="tv.yandex.ru" site_id="bridge-tv-102" xmltv_id="BridgeTV.ru">Bridge TV</channel>
<channel site="tv.yandex.ru" site_id="bridge-tv-russkiy-hit-608" xmltv_id="BridgeTVRusskiyHit.ru">Bridge TV Русский Хит</channel>
<channel site="tv.yandex.ru" site_id="c-music-tv-496" xmltv_id="StingrayCMusic.ca">Stingray CMusic</channel>
<channel site="tv.yandex.ru" site_id="cartoon-network-612" xmltv_id="CartoonNetworkRussiaSoutheastern European.us">Cartoon Network Russia &amp; Southeastern European</channel>
<channel site="tv.yandex.ru" site_id="cbs-reality-729" xmltv_id="CBSRealityEurope.us">CBS Reality Europe</channel>
<channel site="tv.yandex.ru" site_id="centralnoe-televidenie-ctv-198" xmltv_id="Centralnoetelevidenie.ru">Центральное телевидение</channel>
<channel site="tv.yandex.ru" site_id="che-50" xmltv_id="Che.ru">Че</channel>
<channel site="tv.yandex.ru" site_id="chpinfo-495" xmltv_id="ChPInfo.ru">ЧП.Info</channel>
<channel site="tv.yandex.ru" site_id="cinema-396" xmltv_id="Cinema.ru">Cinéma</channel>
<channel site="tv.yandex.ru" site_id="cnbc-713" xmltv_id="CNBC.us">CNBC</channel>
<channel site="tv.yandex.ru" site_id="cnn-570" xmltv_id="CNN.us">CNN</channel>
<channel site="tv.yandex.ru" site_id="da-vinci-525" xmltv_id="DaVinci.de">Da Vinci</channel>
<channel site="tv.yandex.ru" site_id="detektivtv-1216" xmltv_id="Detektivtv.ru">Detektiv.tv</channel>
<channel site="tv.yandex.ru" site_id="detskiy-408" xmltv_id="Detskiy.ru">Детский</channel>
<channel site="tv.yandex.ru" site_id="deutsche-welle-122" xmltv_id="DeutscheWelle.de">Deutsche Welle</channel>
<channel site="tv.yandex.ru" site_id="discovery-channel-21" xmltv_id="DiscoveryChannelRossiya.us">Discovery Channel Россия</channel>
<channel site="tv.yandex.ru" site_id="discovery-science-524" xmltv_id="DiscoveryScienceRossiya.us">Discovery Science Россия</channel>
<channel site="tv.yandex.ru" site_id="discovery-vostochnaya-evropa-740" xmltv_id="DiscoveryVostochnayaEvropa.us">Discovery Восточная Европа</channel>
<channel site="tv.yandex.ru" site_id="docubox-hd-1227" xmltv_id="DocuBoxHD.us">DocuBox HD</channel>
<channel site="tv.yandex.ru" site_id="dojd-101" xmltv_id="Dozhd.ru">Дождь</channel>
<channel site="tv.yandex.ru" site_id="doktor-1245" xmltv_id="Doktor.ru">Доктор</channel>
<channel site="tv.yandex.ru" site_id="dom-kino-715" xmltv_id="Domkino.ru">Дом кино</channel>
<channel site="tv.yandex.ru" site_id="dom-kino-premium-1213" xmltv_id="DomKinoPremium.ru">Дом Кино Премиум</channel>
<channel site="tv.yandex.ru" site_id="domashnie-jivotnye-578" xmltv_id="Domashniezhivotnye.ru">Домашние животные</channel>
<channel site="tv.yandex.ru" site_id="domashniy-5" xmltv_id="Domashniy.ru">Домашний</channel>
<channel site="tv.yandex.ru" site_id="drayv-573" xmltv_id="Drayv.ru">Драйв</channel>
<channel site="tv.yandex.ru" site_id="dtx-1146" xmltv_id="DTXRossiya.us">DTX Россия</channel>
<channel site="tv.yandex.ru" site_id="dushevnoe-1218" xmltv_id="NashKinoroman.ru">Наш Кинороман</channel>
<channel site="tv.yandex.ru" site_id="e-tv-235" xmltv_id="ETV.ru">E TV</channel>
<channel site="tv.yandex.ru" site_id="eda-64" xmltv_id="Eda.ru">Еда</channel>
<channel site="tv.yandex.ru" site_id="eda-premium-742" xmltv_id="EdaPremium.ru">Еда Премиум</channel>
<channel site="tv.yandex.ru" site_id="eho-tv-66" xmltv_id="EhoTV.ru">Эхо TV</channel>
<channel site="tv.yandex.ru" site_id="english-club-tv-683" xmltv_id="EnglishClubTV.uk">English Club TV</channel>
<channel site="tv.yandex.ru" site_id="europa-plus-tv-656" xmltv_id="EuropaPlusTV.ru">Europa Plus TV</channel>
<channel site="tv.yandex.ru" site_id="eurosport-1-hd-591" xmltv_id="Eurosport1Rossiya.fr">Eurosport 1 HD Россия</channel>
<channel site="tv.yandex.ru" site_id="eurosport-2-720" xmltv_id="Eurosport2Rossiya.fr">Eurosport 2 Россия</channel>
<channel site="tv.yandex.ru" site_id="eurosport-677" xmltv_id="EurosportRussia.fr">Eurosport Russia</channel>
<channel site="tv.yandex.ru" site_id="evrika-1212" xmltv_id="Eureka.ru">Eureka HD</channel>
<channel site="tv.yandex.ru" site_id="evrokino-505" xmltv_id="Evrokino.ru">Еврокино</channel>
<channel site="tv.yandex.ru" site_id="evronovosti-121" xmltv_id="Evronovosti.ru">Евроновости</channel>
<channel site="tv.yandex.ru" site_id="extreme-sports-484" xmltv_id="ExtremeSports.nl">Extreme Sports</channel>
<channel site="tv.yandex.ru" site_id="fashion-box-hd-1242" xmltv_id="FashionBoxHD.us">FashionBox HD</channel>
<channel site="tv.yandex.ru" site_id="fashion-one-4k-1204" xmltv_id="FashionOneEurope.uk">Fashion One Europe 4K</channel>
<channel site="tv.yandex.ru" site_id="fashion-one-732" xmltv_id="FashionOneEurope.uk">Fashion One</channel>
<channel site="tv.yandex.ru" site_id="fashion-tv-152" xmltv_id="FashionTVRussia.fr">Fashion TV Russia</channel>
<channel site="tv.yandex.ru" site_id="fast-fun-box-hd-1243" xmltv_id="FastFunBoxHD.us">Fast &amp; FunBox HD</channel>
<channel site="tv.yandex.ru" site_id="feniks-kino-659" xmltv_id="FeniksPlusKino.ru">Феникс+ Кино</channel>
<channel site="tv.yandex.ru" site_id="filmbox-arthouse-1244" xmltv_id="FilmBoxArthouseWorldwide.us">FilmBox Arthouse Worldwide</channel>
<channel site="tv.yandex.ru" site_id="filmbox-hd-1228" xmltv_id="FilmBoxHD.us">FilmBox HD</channel>
<channel site="tv.yandex.ru" site_id="food-network-1194" xmltv_id="FoodNetworkRussia.us">Food Network Russia</channel>
<channel site="tv.yandex.ru" site_id="fox-643" xmltv_id="FoxRussia.us">Fox Russia</channel>
<channel site="tv.yandex.ru" site_id="fox-life-619" xmltv_id="FoxLifeRussia.us">Fox Life Russia</channel>
<channel site="tv.yandex.ru" site_id="france-24-86" xmltv_id="France24.fr">France 24</channel>
<channel site="tv.yandex.ru" site_id="fuel-tv-hd-1176" xmltv_id="FuelTVHD.ru">Fuel TV HD</channel>
<channel site="tv.yandex.ru" site_id="futbol-105" xmltv_id="Futbol.ru">Футбол</channel>
<channel site="tv.yandex.ru" site_id="ginger-hd-1166" xmltv_id="KapitanFantastika.ru">Капитан Фантастика</channel>
<channel site="tv.yandex.ru" site_id="global-star-62" xmltv_id="GlobalStarTV.ru">GlobalStarTV</channel>
<channel site="tv.yandex.ru" site_id="gulli-girl-707" xmltv_id="GulliGirl.fr">Gulli Girl</channel>
<channel site="tv.yandex.ru" site_id="h2-1191" xmltv_id="History2.us">History 2</channel>
<channel site="tv.yandex.ru" site_id="hd-media-80" xmltv_id="HDMedia.ru">HD Медиа</channel>
<channel site="tv.yandex.ru" site_id="hdl-528" xmltv_id="HDL.ru">HDL</channel>
<channel site="tv.yandex.ru" site_id="history-1104" xmltv_id="HistoryRussia.us">History Russia</channel>
<channel site="tv.yandex.ru" site_id="hitv-75" xmltv_id="HITV.ru">HITV</channel>
<channel site="tv.yandex.ru" site_id="illyuzion-424" xmltv_id="IllyuzionPlus.ru">Иллюзион +</channel>
<channel site="tv.yandex.ru" site_id="indiyskoe-kino-700" xmltv_id="Indiyskoekino.ru">Индийское кино</channel>
<channel site="tv.yandex.ru" site_id="insight-ultra-hd-1172" xmltv_id="InsightUltraHD.ru">Insight Ultra HD</channel>
<channel site="tv.yandex.ru" site_id="istoriya-794" xmltv_id="Istoriya.ru">История</channel>
<channel site="tv.yandex.ru" site_id="jara-440" xmltv_id="Zhara.ru">Жара</channel>
<channel site="tv.yandex.ru" site_id="jimjam-569" xmltv_id="JimJamRossiya.uk">JimJam Россия</channel>
<channel site="tv.yandex.ru" site_id="jivaya-planeta-1134" xmltv_id="Zhivayaplaneta.ru">Живая планета</channel>
<channel site="tv.yandex.ru" site_id="jivaya-priroda-1090" xmltv_id="Zhivayapriroda.ru">Живая природа</channel>
<channel site="tv.yandex.ru" site_id="jivi-421" xmltv_id="Zhivi.ru">Живи!</channel>
<channel site="tv.yandex.ru" site_id="kaleydoskop-tv-232" xmltv_id="KaleydoskopTV.ru">Калейдоскоп ТВ</channel>
<channel site="tv.yandex.ru" site_id="kanal-disney-4" xmltv_id="KanalDisney.us">Канал Disney</channel>
<channel site="tv.yandex.ru" site_id="karusel-20" xmltv_id="Karusel.ru">Карусель</channel>
<channel site="tv.yandex.ru" site_id="khl-562" xmltv_id="KHL.ru">КХЛ</channel>
<channel site="tv.yandex.ru" site_id="kino-tv-795" xmltv_id="KinoTV.ru">Кино ТВ</channel>
<channel site="tv.yandex.ru" site_id="kinohit-586" xmltv_id="Kinohit.ru">Кинохит</channel>
<channel site="tv.yandex.ru" site_id="kinokomediya-710" xmltv_id="Kinokomediya.ru">Кинокомедия</channel>
<channel site="tv.yandex.ru" site_id="kinomiks-635" xmltv_id="Kinomiks.ru">Киномикс</channel>
<channel site="tv.yandex.ru" site_id="kinopokaz-391" xmltv_id="Kinopokaz.ru">Кинопоказ</channel>
<channel site="tv.yandex.ru" site_id="kinopokaz-hd-2-678" xmltv_id="KinopokazHD2.ru">Кинопоказ HD-2</channel>
<channel site="tv.yandex.ru" site_id="kinopremera-595" xmltv_id="Kinopremera.ru">Кинопремьера</channel>
<channel site="tv.yandex.ru" site_id="kinopremiumhd-1147" xmltv_id="KinoPremiumHD.ru">КиноПремиумHD</channel>
<channel site="tv.yandex.ru" site_id="kinosemya-766" xmltv_id="Kinosemya.ru">Киносемья</channel>
<channel site="tv.yandex.ru" site_id="kinoseriya-701" xmltv_id="Kinoseriya.ru">Киносерия</channel>
<channel site="tv.yandex.ru" site_id="kinosvidanie-551" xmltv_id="Kinosvidanie.ru">Киносвидание</channel>
<channel site="tv.yandex.ru" site_id="komediya-1159" xmltv_id="Komediya.ru">Комедия</channel>
<channel site="tv.yandex.ru" site_id="konnyy-mir-1184" xmltv_id="Konnyymir.ru">Конный мир</channel>
<channel site="tv.yandex.ru" site_id="kto-est-kto-685" xmltv_id="Ktoestkto.ru">Кто есть кто</channel>
<channel site="tv.yandex.ru" site_id="kuhnya-tv-618" xmltv_id="KuhnyaTV.ru">Кухня ТВ</channel>
<channel site="tv.yandex.ru" site_id="kultura-14" xmltv_id="Kultura.ru">Культура</channel>
<channel site="tv.yandex.ru" site_id="kvn-tv-1192" xmltv_id="KVNTV.ru">КВН ТВ</channel>
<channel site="tv.yandex.ru" site_id="ldpr-tv-1107" xmltv_id="LDPRTV.ru">ЛДПР ТВ</channel>
<channel site="tv.yandex.ru" site_id="luxetv-542" xmltv_id="LuxeTV.lu">Luxe TV</channel>
<channel site="tv.yandex.ru" site_id="luxury-785" xmltv_id="Luxury.ru">Luxury</channel>
<channel site="tv.yandex.ru" site_id="lya-minor-tv-472" xmltv_id="Lyaminor.ru">Ля-минор</channel>
<channel site="tv.yandex.ru" site_id="malysh-1214" xmltv_id="Malysh.ru">Малыш</channel>
<channel site="tv.yandex.ru" site_id="mama-622" xmltv_id="Mama.ru">Мама</channel>
<channel site="tv.yandex.ru" site_id="match-arena-1173" xmltv_id="MatchArena.ru">Матч! Арена</channel>
<channel site="tv.yandex.ru" site_id="match-boec-547" xmltv_id="MatchBoec.ru">Матч! Боец</channel>
<channel site="tv.yandex.ru" site_id="match-futbol-1-646" xmltv_id="MatchFutbol1.ru">Матч! Футбол 1</channel>
<channel site="tv.yandex.ru" site_id="match-futbol-2-593" xmltv_id="MatchFutbol2.ru">Матч! Футбол 2</channel>
<channel site="tv.yandex.ru" site_id="match-futbol-3-797" xmltv_id="MatchFutbol3.ru">Матч! Футбол 3</channel>
<channel site="tv.yandex.ru" site_id="match-igra-1174" xmltv_id="MatchIgra.ru">Матч! Игра</channel>
<channel site="tv.yandex.ru" site_id="match-planeta-1177" xmltv_id="MatchPlaneta.ru">Матч! Планета</channel>
<channel site="tv.yandex.ru" site_id="match-tv-49" xmltv_id="Match.ru">Матч!</channel>
<channel site="tv.yandex.ru" site_id="mcm-top-583" xmltv_id="MCMTopRussia.fr">MCM Top Russia</channel>
<channel site="tv.yandex.ru" site_id="mezzo-600" xmltv_id="Mezzo.fr">Mezzo</channel>
<channel site="tv.yandex.ru" site_id="mezzo-live-hd-702" xmltv_id="MezzoLiveHD.fr">Mezzo Live HD</channel>
<channel site="tv.yandex.ru" site_id="mgm-hd-743" xmltv_id="HollywoodHD.ru">Hollywood HD</channel>
<channel site="tv.yandex.ru" site_id="mir-24-98" xmltv_id="MIR24.ru">МИР 24</channel>
<channel site="tv.yandex.ru" site_id="mir-54" xmltv_id="MIR.ru">МИР</channel>
<channel site="tv.yandex.ru" site_id="mir-seriala-209" xmltv_id="Mirseriala.ru">Мир сериала</channel>
<channel site="tv.yandex.ru" site_id="moskva-24-73" xmltv_id="Moskva24.ru">Москва-24</channel>
<channel site="tv.yandex.ru" site_id="moskva-doverie-641" xmltv_id="MoskvaDoverie.ru">Москва. Доверие</channel>
<channel site="tv.yandex.ru" site_id="moya-planeta-653" xmltv_id="MoyaPlaneta.ru">Моя Планета</channel>
<channel site="tv.yandex.ru" site_id="mtv-dance-international-1206" xmltv_id="ClubMTV.us">Club MTV</channel>
<channel site="tv.yandex.ru" site_id="mtv-hits-international-1207" xmltv_id="MTVHits.us">MTV Hits</channel>
<channel site="tv.yandex.ru" site_id="mtv-live-international-hd-513" xmltv_id="MTVLiveHD.us">MTV Live HD</channel>
<channel site="tv.yandex.ru" site_id="mtv-rocks-international-1205" xmltv_id="MTVRocks.us">MTV Rocks</channel>
<channel site="tv.yandex.ru" site_id="mtv-russia-783" xmltv_id="MTVRussia.us">MTV Russia</channel>
<channel site="tv.yandex.ru" site_id="mujskoe-kino-1145" xmltv_id="Muzhskoekino.ru">Мужское кино</channel>
<channel site="tv.yandex.ru" site_id="mujskoy-412" xmltv_id="Muzhskoy.ru">Мужской</channel>
<channel site="tv.yandex.ru" site_id="mult-1080" xmltv_id="MULT.ru">МУЛЬТ</channel>
<channel site="tv.yandex.ru" site_id="multimaniya-246" xmltv_id="Multimaniya.ru">Мультимания</channel>
<channel site="tv.yandex.ru" site_id="museum-hd-1178" xmltv_id="MuseumTV.fr">Museum TV</channel>
<channel site="tv.yandex.ru" site_id="musicbox-tv-634" xmltv_id="MusicBoxRussia.ru">Music Box Russia</channel>
<channel site="tv.yandex.ru" site_id="muz-tv-55" xmltv_id="MUZTV.ru">МУЗ-ТВ</channel>
<channel site="tv.yandex.ru" site_id="muzyka-pervogo-671" xmltv_id="MuzykaPervogo.ru">Музыка Первого</channel>
<channel site="tv.yandex.ru" site_id="myzentv-434" xmltv_id="myZen.tv">myZen.tv</channel>
<channel site="tv.yandex.ru" site_id="nadejda-127" xmltv_id="Nadezhda.ru">Надежда</channel>
<channel site="tv.yandex.ru" site_id="nano-395" xmltv_id="Nano.ru">Нано</channel>
<channel site="tv.yandex.ru" site_id="nash-detektiv-1217" xmltv_id="NashDetektiv.ru">Наш Детектив</channel>
<channel site="tv.yandex.ru" site_id="nashe-novoe-kino-565" xmltv_id="NasheNovoeKino.ru">Наше Новое Кино</channel>
<channel site="tv.yandex.ru" site_id="nastoyashchee-strashnoe-televidenie-577" xmltv_id="NST.ru">НСТ</channel>
<channel site="tv.yandex.ru" site_id="nat-geo-wild-459" xmltv_id="NationalGeographicWildRussia.us">National Geographic Wild Russia</channel>
<channel site="tv.yandex.ru" site_id="national-geographic-418" xmltv_id="NationalGeographicRussia.us">National Geographic Russia</channel>
<channel site="tv.yandex.ru" site_id="nauka-674" xmltv_id="Nauka.ru">Наука</channel>
<channel site="tv.yandex.ru" site_id="nhk-world-japan-734" xmltv_id="NHKWorldJapan.jp">NHK World Japan</channel>
<channel site="tv.yandex.ru" site_id="nick-jr-731" xmltv_id="NickJrRossiya.us">Nick Jr. Россия</channel>
<channel site="tv.yandex.ru" site_id="nickelodeon-596" xmltv_id="NickelodeonRossiya.us">Nickelodeon Россия</channel>
<channel site="tv.yandex.ru" site_id="nickelodeon-hd-532" xmltv_id="NickelodeonHDRossiya.us">Nickelodeon HD Россия</channel>
<channel site="tv.yandex.ru" site_id="nostalgiya-691" xmltv_id="Nostalgiya.ru">Ностальгия</channel>
<channel site="tv.yandex.ru" site_id="novyy-mir-1220" xmltv_id="Novyymir.ru">Новый мир</channel>
<channel site="tv.yandex.ru" site_id="ntv-11" xmltv_id="NTV.ru">НТВ</channel>
<channel site="tv.yandex.ru" site_id="ntv-pravo-92" xmltv_id="NTVPravo.ru">НТВ Право</channel>
<channel site="tv.yandex.ru" site_id="ntv-serial-93" xmltv_id="NTVSerial.ru">НТВ Сериал</channel>
<channel site="tv.yandex.ru" site_id="ntv-stil-94" xmltv_id="NTVStil.ru">НТВ Стиль</channel>
<channel site="tv.yandex.ru" site_id="o-1225" xmltv_id="O.ru">О!</channel>
<channel site="tv.yandex.ru" site_id="o2tv-107" xmltv_id="O2TV.ru">О2ТВ</channel>
<channel site="tv.yandex.ru" site_id="obshchestvennoe-televidenie-rossii-51" xmltv_id="OTR.ru">ОТР</channel>
<channel site="tv.yandex.ru" site_id="ocean-tv-71" xmltv_id="OCEANTV.ru">OCEAN-TV</channel>
<channel site="tv.yandex.ru" site_id="ohota-i-rybalka-621" xmltv_id="Ohotairybalka.ru">Охота и рыбалка</channel>
<channel site="tv.yandex.ru" site_id="ohotnik-i-rybolov-430" xmltv_id="OhotnikiRybolov.ru">Охотник и Рыболов</channel>
<channel site="tv.yandex.ru" site_id="orujie-511" xmltv_id="Oruzhie.ru">Оружие</channel>
<channel site="tv.yandex.ru" site_id="ostrosyujetnoe-hd-1149" xmltv_id="OstrosyuzhetnoeHD.ru">Остросюжетное HD</channel>
<channel site="tv.yandex.ru" site_id="otkrytyy-mir-1199" xmltv_id="Otkrytyymir.ru">Открытый мир</channel>
<channel site="tv.yandex.ru" site_id="outdoor-channel-497" xmltv_id="OutdoorChannel.us">Outdoor Channel</channel>
<channel site="tv.yandex.ru" site_id="paramount-channel-1209" xmltv_id="ParamountChannelRussia.us">Paramount Channel Russia</channel>
<channel site="tv.yandex.ru" site_id="paramount-comedy-733" xmltv_id="ParamountComedy Russi.us">Paramount Comedy Russia</channel>
<channel site="tv.yandex.ru" site_id="pervyy-16" xmltv_id="Pervyykanal.ru">Первый</channel>
<channel site="tv.yandex.ru" site_id="pervyy-meteo-404" xmltv_id="Pervyymeteo.ru">Первый метео</channel>
<channel site="tv.yandex.ru" site_id="pingvin-lolo-245" xmltv_id="PingvinLolo.ru">Пингвин Лоло</channel>
<channel site="tv.yandex.ru" site_id="poehali-1246" xmltv_id="Poehali.ru">Поехали!</channel>
<channel site="tv.yandex.ru" site_id="priklyucheniya-hd-499" xmltv_id="PriklyucheniyaHD.ru">Приключения HD</channel>
<channel site="tv.yandex.ru" site_id="pro-biznes-58" xmltv_id="ProBiznes.ru">Про Бизнес</channel>
<channel site="tv.yandex.ru" site_id="prosveshchenie-658" xmltv_id="Prosveshchenie.ru">Просвещение</channel>
<channel site="tv.yandex.ru" site_id="psihologiya-21-538" xmltv_id="Psihologiya21.ru">Психология 21</channel>
<channel site="tv.yandex.ru" site_id="pyatnica-42" xmltv_id="Pyatnica.ru">Пятница</channel>
<channel site="tv.yandex.ru" site_id="pyatyy-kanal-12" xmltv_id="Pyatyykanal.ru">Пятый канал</channel>
<channel site="tv.yandex.ru" site_id="r1-1180" xmltv_id="R1.ru">R1</channel>
<channel site="tv.yandex.ru" site_id="radost-moya-185" xmltv_id="RadostMoya.ru">Радость Моя</channel>
<channel site="tv.yandex.ru" site_id="raztv-84" xmltv_id="RazTV.ru">РазТВ</channel>
<channel site="tv.yandex.ru" site_id="rbk-18" xmltv_id="RBK.ru">РБК</channel>
<channel site="tv.yandex.ru" site_id="ren-30" xmltv_id="RENTV.ru">РЕН ТВ</channel>
<channel site="tv.yandex.ru" site_id="retro-tv-382" xmltv_id="RetroTV.ru">Ретро ТВ</channel>
<channel site="tv.yandex.ru" site_id="rjd-575" xmltv_id="RZhD.ru">РЖД</channel>
<channel site="tv.yandex.ru" site_id="rodnoe-kino-386" xmltv_id="Rodnoekino.ru">Родное кино</channel>
<channel site="tv.yandex.ru" site_id="rossiya-1-31" xmltv_id="Rossiya1.ru">Россия 1</channel>
<channel site="tv.yandex.ru" site_id="rossiya-24-3" xmltv_id="Rossiya24.ru">Россия 24</channel>
<channel site="tv.yandex.ru" site_id="rtd-82" xmltv_id="RTD.ru">RTД</channel>
<channel site="tv.yandex.ru" site_id="rtg-international-1169" xmltv_id="RTGInternational.ru">RTG International</channel>
<channel site="tv.yandex.ru" site_id="rtv-lyubimoe-kino-559" xmltv_id="RTVLyubimoekino.ru">РТВ - Любимое кино</channel>
<channel site="tv.yandex.ru" site_id="russia-today-70" xmltv_id="RT.ru">RT</channel>
<channel site="tv.yandex.ru" site_id="russian-extreme-ultra-hd-1229" xmltv_id="RussianExtremeUltra.ru">Russian Extreme Ultra HD</channel>
<channel site="tv.yandex.ru" site_id="russian-musicbox-177" xmltv_id="RussianMusicBox.ru">Russian MusicBox</channel>
<channel site="tv.yandex.ru" site_id="russian-travel-guide-638" xmltv_id="RussianTravelGuide.ru">Russian Travel Guide</channel>
<channel site="tv.yandex.ru" site_id="russkiy-bestseller-771" xmltv_id="Russkiybestseller.ru">Русский бестселлер</channel>
<channel site="tv.yandex.ru" site_id="russkiy-detektiv-1137" xmltv_id="RusskiyDetektiv.ru">Русский Детектив</channel>
<channel site="tv.yandex.ru" site_id="russkiy-ekstrim-523" xmltv_id="RusskiyEkstrim.ru">Русский Экстрим</channel>
<channel site="tv.yandex.ru" site_id="russkiy-illyuzion-402" xmltv_id="RusskiyIllyuzion.ru">Русский Иллюзион</channel>
<channel site="tv.yandex.ru" site_id="russkiy-roman-520" xmltv_id="Russkiyroman.ru">Русский роман</channel>
<channel site="tv.yandex.ru" site_id="rutv-77" xmltv_id="RUTV.ru">RU TV</channel>
<channel site="tv.yandex.ru" site_id="ryjiy-1141" xmltv_id="Ryzhiy.ru">Рыжий</channel>
<channel site="tv.yandex.ru" site_id="sankt-peterburg-48" xmltv_id="SanktPeterburg.ru">Санкт-Петербург</channel>
<channel site="tv.yandex.ru" site_id="sarafan-645" xmltv_id="Sarafan.ru">Сарафан</channel>
<channel site="tv.yandex.ru" site_id="shanson-tb-644" xmltv_id="ShansonTV.ru">Шансон-TВ</channel>
<channel site="tv.yandex.ru" site_id="shant-premium-1208" xmltv_id="SHANTPremium.am">SHANT Premium</channel>
<channel site="tv.yandex.ru" site_id="shokiruyushchee-432" xmltv_id="KinopokazHD1.ru">Кинопоказ HD-1</channel>
<channel site="tv.yandex.ru" site_id="shot-tv-537" xmltv_id="EgoistTV.ru">Эгоист ТВ</channel>
<channel site="tv.yandex.ru" site_id="sony-channel-493" xmltv_id="SonyChannelRussia.us">Sony Channel Russia</channel>
<channel site="tv.yandex.ru" site_id="sony-sci-fi-576" xmltv_id="SonySciFiRussia.us">Sony Sci-Fi Russia</channel>
<channel site="tv.yandex.ru" site_id="sony-turbo-744" xmltv_id="SonyTurboRussia.us">Sony Turbo Russia</channel>
<channel site="tv.yandex.ru" site_id="sony-tv-hd-792" xmltv_id="SonyChannelRussia.us">Sony Channel Russia</channel>
<channel site="tv.yandex.ru" site_id="sovershenno-sekretno-57" xmltv_id="Sovershennosekretno.ru">Совершенно секретно</channel>
<channel site="tv.yandex.ru" site_id="soyuz-108" xmltv_id="Soyuz.ru">Союз</channel>
<channel site="tv.yandex.ru" site_id="spas-52" xmltv_id="SpasTV.ru">Спас ТВ</channel>
<channel site="tv.yandex.ru" site_id="spike-1226" xmltv_id="SpikeRossiya.us">Spike Россия</channel>
<channel site="tv.yandex.ru" site_id="stingray-iconcerts-739" xmltv_id="StingrayIConcerts.ca">Stingray iConcerts</channel>
<channel site="tv.yandex.ru" site_id="strashnoe-hd-1096" xmltv_id="StrashnoeHD.ru">Страшное HD</channel>
<channel site="tv.yandex.ru" site_id="sts-8" xmltv_id="STS.ru">СТС</channel>
<channel site="tv.yandex.ru" site_id="sts-love-104" xmltv_id="STSLove.ru">СТС Love</channel>
<channel site="tv.yandex.ru" site_id="tayny-galaktiki-736" xmltv_id="TaynyGalaktiki.ru">Тайны Галактики</channel>
<channel site="tv.yandex.ru" site_id="tbn-601" xmltv_id="TBN.ru">ТБН</channel>
<channel site="tv.yandex.ru" site_id="tdk-78" xmltv_id="TDK.ru">TDK</channel>
<channel site="tv.yandex.ru" site_id="teatr-737" xmltv_id="Teatr.ru">Театр</channel>
<channel site="tv.yandex.ru" site_id="tehno-24-1109" xmltv_id="Tehno24.ru">Техно 24</channel>
<channel site="tv.yandex.ru" site_id="telekafe-443" xmltv_id="Telekafe.ru">Телекафе</channel>
<channel site="tv.yandex.ru" site_id="teleputeshestviya-697" xmltv_id="Teleputeshestviya.ru">Телепутешествия</channel>
<channel site="tv.yandex.ru" site_id="tiji-590" xmltv_id="TijiRussia.fr">Tiji Russia</channel>
<channel site="tv.yandex.ru" site_id="tlc-533" xmltv_id="TLCRussia.us">TLC Russia</channel>
<channel site="tv.yandex.ru" site_id="tnt-33" xmltv_id="TNT.ru">ТНТ</channel>
<channel site="tv.yandex.ru" site_id="tnt-music-655" xmltv_id="TNTMusic.ru">ТНТ Music</channel>
<channel site="tv.yandex.ru" site_id="tnt4-56" xmltv_id="TNT4.ru">ТНТ4</channel>
<channel site="tv.yandex.ru" site_id="tnv-446" xmltv_id="TNV.ru">ТНВ</channel>
<channel site="tv.yandex.ru" site_id="tnv-planeta-188" xmltv_id="TNVplaneta.ru">ТНВ-планета</channel>
<channel site="tv.yandex.ru" site_id="tochkatv-68" xmltv_id="TochkaTV.ru">Точка ТВ</channel>
<channel site="tv.yandex.ru" site_id="travel-channel-617" xmltv_id="TravelChannel.us">Travel Channel</channel>
<channel site="tv.yandex.ru" site_id="traveladventure-773" xmltv_id="TravelPlusAdventure.us">Travel+Adventure</channel>
<channel site="tv.yandex.ru" site_id="tv-3-17" xmltv_id="TV3.ru">ТВ-3</channel>
<channel site="tv.yandex.ru" site_id="tv-centr-32" xmltv_id="TVCentr.ru">ТВ Центр</channel>
<channel site="tv.yandex.ru" site_id="tv-xxi-492" xmltv_id="TVXXI.ru">TV XXI</channel>
<channel site="tv.yandex.ru" site_id="tv1000-427" xmltv_id="TV1000.se">TV1000</channel>
<channel site="tv.yandex.ru" site_id="tv1000-action-426" xmltv_id="TV1000Action.se">TV1000 Action</channel>
<channel site="tv.yandex.ru" site_id="tv1000-russkoe-kino-475" xmltv_id="TV1000Russkoekino.se">TV1000 Русское кино</channel>
<channel site="tv.yandex.ru" site_id="tv5-monde-607" xmltv_id="TV5Monde.fr">TV5-Monde</channel>
<channel site="tv.yandex.ru" site_id="tvrus-1230" xmltv_id="TVRUS.ru">TVRUS</channel>
<channel site="tv.yandex.ru" site_id="usadba-689" xmltv_id="Usadba.ru">Усадьба</channel>
<channel site="tv.yandex.ru" site_id="uspeh-63" xmltv_id="Uspeh.ru">Успех</channel>
<channel site="tv.yandex.ru" site_id="v-mire-jivotnyh-1211" xmltv_id="Vmirezhivotnyh.ru">В мире животных</channel>
<channel site="tv.yandex.ru" site_id="vh1-classic-438" xmltv_id="VH1Classic.uk">VH1 Classic</channel>
<channel site="tv.yandex.ru" site_id="vh1-european-567" xmltv_id="VH1.uk">VH1</channel>
<channel site="tv.yandex.ru" site_id="viasat-explore-579" xmltv_id="ViasatExploreRussia.se">Viasat Explore Russia</channel>
<channel site="tv.yandex.ru" site_id="viasat-history-478" xmltv_id="ViasatHistoryRussian.se">Viasat History Russian</channel>
<channel site="tv.yandex.ru" site_id="viasat-nature-cee-684" xmltv_id="ViasatNatureRussian.se">Viasat Nature Russian</channel>
<channel site="tv.yandex.ru" site_id="viasat-sport-548" xmltv_id="ViasatSportEast.se">Viasat Sport East</channel>
<channel site="tv.yandex.ru" site_id="vip-comedy-777" xmltv_id="ViPComedyRussian.se">ViP Comedy Russian</channel>
<channel site="tv.yandex.ru" site_id="vip-megahit-778" xmltv_id="ViPMegahitRussian.se">ViP Megahit Russian</channel>
<channel site="tv.yandex.ru" site_id="vip-premiere-779" xmltv_id="ViPPremiereRussian.se">ViP Premiere</channel>
<channel site="tv.yandex.ru" site_id="voprosy-i-otvety-501" xmltv_id="Voprosyiotvety.ru">Вопросы и ответы</channel>
<channel site="tv.yandex.ru" site_id="vremya-649" xmltv_id="Vremya.ru">Время</channel>
<channel site="tv.yandex.ru" site_id="world-business-channel-115" xmltv_id="WorldBusinessChannel.ru">World Business Channel</channel>
<channel site="tv.yandex.ru" site_id="world-fashion-channel-88" xmltv_id="WorldFashionChannelRussia.ru">World Fashion Channel Russia</channel>
<channel site="tv.yandex.ru" site_id="yu-40" xmltv_id="Yu.ru">Ю</channel>
<channel site="tv.yandex.ru" site_id="zagorodnaya-jizn-390" xmltv_id="Zagorodnayazhizn.ru">Загородная жизнь</channel>
<channel site="tv.yandex.ru" site_id="zagorodnyy-666" xmltv_id="Zagorodnyy.ru">Загородный</channel>
<channel site="tv.yandex.ru" site_id="zdorove-632" xmltv_id="TonusTV.ru">Тонус-ТВ</channel>
<channel site="tv.yandex.ru" site_id="zdorovoe-tv-609" xmltv_id="ZdorovoeTV.ru">Здоровое ТВ</channel>
<channel site="tv.yandex.ru" site_id="zee-tv-627" xmltv_id="ZeeTVRussia.in">Zee TV Russia</channel>
<channel site="tv.yandex.ru" site_id="zoo-tv-477" xmltv_id="ZooTV.ru">Зоо ТВ</channel>
<channel site="tv.yandex.ru" site_id="zoopark-509" xmltv_id="Zoopark.ru">Zooпарк</channel>
<channel site="tv.yandex.ru" site_id="zvezda-15" xmltv_id="Zvezda.ru">Звезда</channel>
</settings>

24
sites/tv.yandex.ru.js Normal file
View File

@ -0,0 +1,24 @@
module.exports = {
url: function ({ date, channel }) {
return `https://tv.yandex.ru/channel/${channel.site_id}?date=${date.format('YYYY-MM-DD')}`
},
parser: function ({ channel, content }) {
const initialState = content.match(/window.__INITIAL_STATE__ = (.*);/i)[1]
const data = JSON.parse(initialState, null, 2)
let programs = []
if (data.channel) {
programs = data.channel.schedule.events.map(i => {
return {
title: i.title,
description: i.program.description,
start: i.start,
stop: i.finish,
lang: 'ru',
channel: channel['xmltv_id']
}
})
}
return programs
}
}

257
sites/tvguide.co.uk.config.xml Executable file
View File

@ -0,0 +1,257 @@
<?xml version="1.0"?>
<settings>
<filename>../../.gh-pages/guides/tvguide.co.uk.xml</filename>
<user-agent>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 Edg/79.0.309.71</user-agent>
<days>1</days>
<channel site="tvguide.co.uk" site_id="106" xmltv_id="BBCTwoWales.uk">BBC Two Wales</channel>
<channel site="tvguide.co.uk" site_id="109" xmltv_id="BBCFour.uk">BBC Four</channel>
<channel site="tvguide.co.uk" site_id="112" xmltv_id="BloombergTVUK.us">Bloomberg TV UK</channel>
<channel site="tvguide.co.uk" site_id="113" xmltv_id="BoomerangUK.us">Boomerang UK</channel>
<channel site="tvguide.co.uk" site_id="116" xmltv_id="CartoonNetworkUK.us">Cartoon Network UK</channel>
<channel site="tvguide.co.uk" site_id="118" xmltv_id="CBBC.uk">CBBC</channel>
<channel site="tvguide.co.uk" site_id="119" xmltv_id="CBeebiesUK.uk">CBeebies UK</channel>
<channel site="tvguide.co.uk" site_id="120" xmltv_id="ChallengeUK.uk">Challenge UK</channel>
<channel site="tvguide.co.uk" site_id="121" xmltv_id="Channel4UK.uk">Channel 4 UK</channel>
<channel site="tvguide.co.uk" site_id="123" xmltv_id="TraceHits.uk">Trace Hits</channel>
<channel site="tvguide.co.uk" site_id="126" xmltv_id="CNN.us">CNN</channel>
<channel site="tvguide.co.uk" site_id="127" xmltv_id="DiscoveryChannelUK.us">Discovery Channel UK</channel>
<channel site="tvguide.co.uk" site_id="129" xmltv_id="DiscoveryHistoryUK.us">Discovery History UK</channel>
<channel site="tvguide.co.uk" site_id="134" xmltv_id="DiscoveryScienceUK.us">Discovery Science UK</channel>
<channel site="tvguide.co.uk" site_id="138" xmltv_id="EUK.us">E! UK</channel>
<channel site="tvguide.co.uk" site_id="139" xmltv_id="E4UK.uk">E4 UK</channel>
<channel site="tvguide.co.uk" site_id="140" xmltv_id="EuroNews.fr">EuroNews</channel>
<channel site="tvguide.co.uk" site_id="142" xmltv_id="Eurosport.fr">Eurosport</channel>
<channel site="tvguide.co.uk" site_id="145" xmltv_id="Film4UK.uk">Film4 UK</channel>
<channel site="tvguide.co.uk" site_id="146" xmltv_id="Film4UKPlus1.uk">Film4 UK +1</channel>
<channel site="tvguide.co.uk" site_id="148" xmltv_id="Channel5.uk">Channel 5</channel>
<channel site="tvguide.co.uk" site_id="154" xmltv_id="FoxUK.us">Fox UK</channel>
<channel site="tvguide.co.uk" site_id="161" xmltv_id="SkyHistoryPlus1.us">Sky History +1</channel>
<channel site="tvguide.co.uk" site_id="164" xmltv_id="STVNorth.uk">STV North</channel>
<channel site="tvguide.co.uk" site_id="165" xmltv_id="ITVAnglia.uk">ITV Anglia</channel>
<channel site="tvguide.co.uk" site_id="167" xmltv_id="STVNorthPlus1.uk">STV North +1</channel>
<channel site="tvguide.co.uk" site_id="168" xmltv_id="ITVCentral.uk">ITV Central</channel>
<channel site="tvguide.co.uk" site_id="169" xmltv_id="ITVWestcountry.uk">ITV Westcountry</channel>
<channel site="tvguide.co.uk" site_id="170" xmltv_id="ITVChannelTelevision.uk">ITV Channel Television</channel>
<channel site="tvguide.co.uk" site_id="171" xmltv_id="ITVGranada.uk">ITV Granada</channel>
<channel site="tvguide.co.uk" site_id="172" xmltv_id="ITVLondon.uk">ITV London</channel>
<channel site="tvguide.co.uk" site_id="173" xmltv_id="ITVMeridian.uk">ITV Meridian</channel>
<channel site="tvguide.co.uk" site_id="174" xmltv_id="ITVTyneTees.uk">ITV Tyne Tees</channel>
<channel site="tvguide.co.uk" site_id="175" xmltv_id="ITVWales.uk">ITV Wales</channel>
<channel site="tvguide.co.uk" site_id="176" xmltv_id="ITVWest.uk">ITV West</channel>
<channel site="tvguide.co.uk" site_id="177" xmltv_id="ITVYorkshire.uk">ITV Yorkshire</channel>
<channel site="tvguide.co.uk" site_id="178" xmltv_id="STVCentral.uk">STV Central</channel>
<channel site="tvguide.co.uk" site_id="179" xmltv_id="UTV.uk">UTV</channel>
<channel site="tvguide.co.uk" site_id="180" xmltv_id="ITV2.uk">ITV2</channel>
<channel site="tvguide.co.uk" site_id="181" xmltv_id="KerrangTV.uk">Kerrang! TV</channel>
<channel site="tvguide.co.uk" site_id="182" xmltv_id="KissTV.uk">Kiss TV</channel>
<channel site="tvguide.co.uk" site_id="183" xmltv_id="SkyWitnessUK.uk">Sky Witness UK</channel>
<channel site="tvguide.co.uk" site_id="184" xmltv_id="SkyWitnessUKPlus1.uk">Sky Witness UK +1</channel>
<channel site="tvguide.co.uk" site_id="185" xmltv_id="Magic.uk">Magic</channel>
<channel site="tvguide.co.uk" site_id="187" xmltv_id="MTVUK.us">MTV UK</channel>
<channel site="tvguide.co.uk" site_id="188" xmltv_id="MTVBaseUK.us">MTV Base UK</channel>
<channel site="tvguide.co.uk" site_id="190" xmltv_id="MTVHitsUK.us">MTV Hits UK</channel>
<channel site="tvguide.co.uk" site_id="204" xmltv_id="MUTV.uk">MUTV</channel>
<channel site="tvguide.co.uk" site_id="205" xmltv_id="NationalGeographicUK.us">National Geographic UK</channel>
<channel site="tvguide.co.uk" site_id="209" xmltv_id="NickelodeonUK.us">Nickelodeon UK</channel>
<channel site="tvguide.co.uk" site_id="211" xmltv_id="NickJrUK.us">Nick Jr. UK</channel>
<channel site="tvguide.co.uk" site_id="212" xmltv_id="NickToonsUK.us">NickToons UK</channel>
<channel site="tvguide.co.uk" site_id="214" xmltv_id="ComedyCentralUK.us">Comedy Central UK</channel>
<channel site="tvguide.co.uk" site_id="215" xmltv_id="ComedyCentralExtra.us">Comedy Central Extra</channel>
<channel site="tvguide.co.uk" site_id="223" xmltv_id="QVCUK.us">QVC UK</channel>
<channel site="tvguide.co.uk" site_id="234" xmltv_id="S4C.uk">S4C</channel>
<channel site="tvguide.co.uk" site_id="238" xmltv_id="SyfyUK.us">Syfy UK</channel>
<channel site="tvguide.co.uk" site_id="248" xmltv_id="SkyCinemaPremiere.uk">Sky Cinema Premiere</channel>
<channel site="tvguide.co.uk" site_id="249" xmltv_id="SkyCinemaPremierePlus1.uk">Sky Cinema Premiere +1</channel>
<channel site="tvguide.co.uk" site_id="250" xmltv_id="SkyCinemaComedy.uk">Sky Cinema Comedy</channel>
<channel site="tvguide.co.uk" site_id="257" xmltv_id="SkyNews.uk">Sky News</channel>
<channel site="tvguide.co.uk" site_id="258" xmltv_id="SkyOneUK.uk">Sky One UK</channel>
<channel site="tvguide.co.uk" site_id="259" xmltv_id="SkyReplayUK.uk">Sky Replay UK</channel>
<channel site="tvguide.co.uk" site_id="267" xmltv_id="BoxHits.uk">Box Hits</channel>
<channel site="tvguide.co.uk" site_id="279" xmltv_id="TheBoxUK.uk">The Box UK</channel>
<channel site="tvguide.co.uk" site_id="280" xmltv_id="TogetherTV.uk">Together TV</channel>
<channel site="tvguide.co.uk" site_id="320" xmltv_id="Yesterday.uk">Yesterday</channel>
<channel site="tvguide.co.uk" site_id="322" xmltv_id="HGTVUK.us">HGTV UK</channel>
<channel site="tvguide.co.uk" site_id="342" xmltv_id="RTEOne.ie">RTÉ One</channel>
<channel site="tvguide.co.uk" site_id="344" xmltv_id="SonySAB.in">Sony SAB</channel>
<channel site="tvguide.co.uk" site_id="346" xmltv_id="UtsavPlus.hk">Utsav Plus</channel>
<channel site="tvguide.co.uk" site_id="349" xmltv_id="TG4.ie">TG4</channel>
<channel site="tvguide.co.uk" site_id="352" xmltv_id="VirginMediaOne.ie">Virgin Media One</channel>
<channel site="tvguide.co.uk" site_id="355" xmltv_id="EdenPlus1.uk">Eden +1</channel>
<channel site="tvguide.co.uk" site_id="358" xmltv_id="HGTVUKPlus1.uk">HGTV UK +1</channel>
<channel site="tvguide.co.uk" site_id="359" xmltv_id="ZeeTVUK.in">Zee TV UK</channel>
<channel site="tvguide.co.uk" site_id="360" xmltv_id="ITV3.uk">ITV3</channel>
<channel site="tvguide.co.uk" site_id="361" xmltv_id="More4UK.uk">More4 UK</channel>
<channel site="tvguide.co.uk" site_id="363" xmltv_id="RTETwo.ie">RTÉ Two</channel>
<channel site="tvguide.co.uk" site_id="367" xmltv_id="ITV4.uk">ITV4</channel>
<channel site="tvguide.co.uk" site_id="369" xmltv_id="PickUK.uk">Pick UK</channel>
<channel site="tvguide.co.uk" site_id="371" xmltv_id="E4UKPlus1.uk">E4 UK +1</channel>
<channel site="tvguide.co.uk" site_id="374" xmltv_id="5Star.uk">5Star</channel>
<channel site="tvguide.co.uk" site_id="375" xmltv_id="5USA.uk">5USA</channel>
<channel site="tvguide.co.uk" site_id="376" xmltv_id="ITV2Plus1.uk">ITV2 +1</channel>
<channel site="tvguide.co.uk" site_id="382" xmltv_id="CITV.uk">CITV</channel>
<channel site="tvguide.co.uk" site_id="384" xmltv_id="SkyArts.uk">Sky Arts</channel>
<channel site="tvguide.co.uk" site_id="385" xmltv_id="CBSRealityUK.us">CBS Reality UK</channel>
<channel site="tvguide.co.uk" site_id="386" xmltv_id="DiscoveryTurboUK.us">Discovery Turbo UK</channel>
<channel site="tvguide.co.uk" site_id="389" xmltv_id="BoomerangUKPlus1.us">Boomerang UK +1</channel>s
<channel site="tvguide.co.uk" site_id="391" xmltv_id="CartoonitoUK.us">Cartoonito UK</channel>
<channel site="tvguide.co.uk" site_id="392" xmltv_id="ChallengeUKPlus1.uk">Challenge UK +1</channel>
<channel site="tvguide.co.uk" site_id="394" xmltv_id="CrimePlusInvestigationUK.us">Crime + Investigation UK</channel>
<channel site="tvguide.co.uk" site_id="400" xmltv_id="Eurosport2.fr">Eurosport 2</channel>
<channel site="tvguide.co.uk" site_id="402" xmltv_id="FoxUKPlus1.us">Fox UK +1</channel>
<channel site="tvguide.co.uk" site_id="403" xmltv_id="SkyCrime.uk">Sky Crime</channel>
<channel site="tvguide.co.uk" site_id="407" xmltv_id="NatGeoWildUK.us">Nat Geo Wild UK</channel>
<channel site="tvguide.co.uk" site_id="409" xmltv_id="ComedyCentralUKPlus1.us">Comedy Central UK +1</channel>
<channel site="tvguide.co.uk" site_id="411" xmltv_id="SyfyUKPlus1.us">Syfy UK +1</channel>
<channel site="tvguide.co.uk" site_id="422" xmltv_id="ReallyUK.uk">Really UK</channel>
<channel site="tvguide.co.uk" site_id="423" xmltv_id="YesterdayPlus1.uk">Yesterday +1</channel>
<channel site="tvguide.co.uk" site_id="424" xmltv_id="CBSRealityUKPlus1.us">CBS Reality UK +1</channel>
<channel site="tvguide.co.uk" site_id="425" xmltv_id="HorrorChannelUK.uk">Horror Channel UK</channel>
<channel site="tvguide.co.uk" site_id="428" xmltv_id="Channel4UKPlus1.uk">Channel 4 UK +1</channel>
<channel site="tvguide.co.uk" site_id="429" xmltv_id="More4UKPlus1.uk">More4 UK +1</channel>
<channel site="tvguide.co.uk" site_id="432" xmltv_id="DaveUK.uk">Dave UK</channel>
<channel site="tvguide.co.uk" site_id="435" xmltv_id="UtsavGold.hk">Utsav Gold</channel>
<channel site="tvguide.co.uk" site_id="444" xmltv_id="AlJazeeraEnglish.qa">Al Jazeera English</channel>
<channel site="tvguide.co.uk" site_id="446" xmltv_id="RacingTV.uk">Racing TV</channel>
<channel site="tvguide.co.uk" site_id="447" xmltv_id="TCMMoviesPlus1.us">TCM Movies +1</channel>
<channel site="tvguide.co.uk" site_id="454" xmltv_id="DMAXUK.us">DMAX UK</channel>
<channel site="tvguide.co.uk" site_id="455" xmltv_id="Davejavu.uk">Dave ja vu</channel>
<channel site="tvguide.co.uk" site_id="457" xmltv_id="CartoonNetworkUKPlus1.us">Cartoon Network UK +1</channel>
<channel site="tvguide.co.uk" site_id="468" xmltv_id="Pop.uk">Pop</channel>
<channel site="tvguide.co.uk" site_id="474" xmltv_id="ITV3Plus1.uk">ITV3 +1</channel>
<channel site="tvguide.co.uk" site_id="477" xmltv_id="TinyPop.uk">Tiny Pop</channel>
<channel site="tvguide.co.uk" site_id="478" xmltv_id="SkyOneUK.uk">Sky One UK</channel>
<channel site="tvguide.co.uk" site_id="493" xmltv_id="CBSDramaUK.us">CBS Drama UK</channel>
<channel site="tvguide.co.uk" site_id="498" xmltv_id="CBSJusticeUK.us">CBS Justice UK</channel>
<channel site="tvguide.co.uk" site_id="499" xmltv_id="SonyMoviesClassicPlus1.us">Sony Movies Classic +1</channel>
<channel site="tvguide.co.uk" site_id="500" xmltv_id="SonyMoviesAction.us">Sony Movies Action</channel>
<channel site="tvguide.co.uk" site_id="504" xmltv_id="HorrorChannelUKPlus1.uk">Horror Channel UK +1</channel>
<channel site="tvguide.co.uk" site_id="505" xmltv_id="SkyHistory2.us">Sky History 2</channel>
<channel site="tvguide.co.uk" site_id="506" xmltv_id="4Music.uk">4Music</channel>
<channel site="tvguide.co.uk" site_id="508" xmltv_id="BBCAlba.uk">BBC Alba</channel>
<channel site="tvguide.co.uk" site_id="511" xmltv_id="WUK.ie">W UK</channel>
<channel site="tvguide.co.uk" site_id="515" xmltv_id="WUKPlus1.ie">W UK +1</channel>
<channel site="tvguide.co.uk" site_id="517" xmltv_id="GoldUK.uk">Gold UK</channel>
<channel site="tvguide.co.uk" site_id="519" xmltv_id="GoldUKPlus1.uk">Gold UK +1</channel>
<channel site="tvguide.co.uk" site_id="520" xmltv_id="AlibiUK.uk">Alibi UK</channel>
<channel site="tvguide.co.uk" site_id="521" xmltv_id="AlibiUKPlus1.uk">Alibi UK +1</channel>
<channel site="tvguide.co.uk" site_id="524" xmltv_id="SkyCinemaScifiHorror.uk">Sky Cinema Sci-fi/Horror</channel>
<channel site="tvguide.co.uk" site_id="527" xmltv_id="SkyHistory.us">Sky History</channel>
<channel site="tvguide.co.uk" site_id="530" xmltv_id="ITV4Plus1.uk">ITV4 +1</channel>
<channel site="tvguide.co.uk" site_id="533" xmltv_id="3e.uk">3e</channel>
<channel site="tvguide.co.uk" site_id="535" xmltv_id="InvestigationDiscoveryUK.us">Investigation Discovery UK</channel>
<channel site="tvguide.co.uk" site_id="540" xmltv_id="Eden.uk">Eden</channel>
<channel site="tvguide.co.uk" site_id="547" xmltv_id="SkyCrimePlus1.uk">Sky Crime +1</channel>
<channel site="tvguide.co.uk" site_id="559" xmltv_id="QuestUK.us">Quest UK</channel>
<channel site="tvguide.co.uk" site_id="566" xmltv_id="PhoenixCNE.hk">Phoenix CNE</channel>
<channel site="tvguide.co.uk" site_id="571" xmltv_id="Channel5Plus24.uk">Channel 5 +24</channel>
<channel site="tvguide.co.uk" site_id="572" xmltv_id="5USAPlus1.uk">5USA +1</channel>
<channel site="tvguide.co.uk" site_id="575" xmltv_id="CrimePlusInvestigationUKPlus1.us">Crime + Investigation UK +1</channel>
<channel site="tvguide.co.uk" site_id="578" xmltv_id="BTSportESPN.uk">BT Sport ESPN</channel>
<channel site="tvguide.co.uk" site_id="58" xmltv_id="AnimalPlanetUK.uk">Animal Planet UK</channel>
<channel site="tvguide.co.uk" site_id="586" xmltv_id="CreateandCraft.uk">Create and Craft</channel>
<channel site="tvguide.co.uk" site_id="59" xmltv_id="AnimalPlanetUKPlus1.uk">Animal Planet UK +1</channel>
<channel site="tvguide.co.uk" site_id="590" xmltv_id="CNBCUK.us">CNBC UK</channel>
<channel site="tvguide.co.uk" site_id="594" xmltv_id="QuestUKPlus1.us">Quest UK +1</channel>
<channel site="tvguide.co.uk" site_id="595" xmltv_id="FoodNetworkUKPlus1.us">Food Network UK +1</channel>
<channel site="tvguide.co.uk" site_id="596" xmltv_id="FoodNetworkUK.us">Food Network UK</channel>
<channel site="tvguide.co.uk" site_id="602" xmltv_id="Kix.hk">Kix</channel>
<channel site="tvguide.co.uk" site_id="605" xmltv_id="Movies24Plus.uk">Movies 24+</channel>
<channel site="tvguide.co.uk" site_id="610" xmltv_id="NHKWorldJapan.jp">NHK World Japan</channel>
<channel site="tvguide.co.uk" site_id="614" xmltv_id="SkyCinemaThriller.uk">Sky Cinema Thriller</channel>
<channel site="tvguide.co.uk" site_id="616" xmltv_id="DMAXUKPlus1.us">DMAX UK +1</channel>
<channel site="tvguide.co.uk" site_id="618" xmltv_id="DiscoveryHistoryUKPlus1.us">Discovery History UK +1</channel>
<channel site="tvguide.co.uk" site_id="619" xmltv_id="TinyPopPlus1.uk">Tiny Pop +1</channel>
<channel site="tvguide.co.uk" site_id="621" xmltv_id="SonyMoviesActionPlus1.us">Sony Movies Action +1</channel>
<channel site="tvguide.co.uk" site_id="625" xmltv_id="NickelodeonUKPlus1.us">Nickelodeon UK +1</channel>
<channel site="tvguide.co.uk" site_id="63" xmltv_id="AtTheRaces.uk">At The Races</channel>
<channel site="tvguide.co.uk" site_id="633" xmltv_id="SonyChannelUK.us">Sony Channel UK</channel>
<channel site="tvguide.co.uk" site_id="634" xmltv_id="DiscoveryScienceUKPlus1.us">Discovery Science UK +1</channel>
<channel site="tvguide.co.uk" site_id="636" xmltv_id="BBCRedButton1.uk">BBC Red Button 1</channel>
<channel site="tvguide.co.uk" site_id="637" xmltv_id="SkyCinemaHits.uk">Sky Cinema Hits</channel>
<channel site="tvguide.co.uk" site_id="654" xmltv_id="STVHD.uk">STV HD</channel>
<channel site="tvguide.co.uk" site_id="66" xmltv_id="BBCNews.uk">BBC News</channel>
<channel site="tvguide.co.uk" site_id="661" xmltv_id="TCMMovies.us">TCM Movies</channel>
<channel site="tvguide.co.uk" site_id="667" xmltv_id="PickUKPlus1.uk">Pick UK +1</channel>
<channel site="tvguide.co.uk" site_id="67" xmltv_id="BBCParliament.uk">BBC Parliament</channel>
<channel site="tvguide.co.uk" site_id="683" xmltv_id="BBCOne.uk">BBC One</channel>
<channel site="tvguide.co.uk" site_id="695" xmltv_id="ITVYorkshirePlus1.uk">ITV Yorkshire +1</channel>
<channel site="tvguide.co.uk" site_id="696" xmltv_id="ITVGranadaPlus1.uk">ITV Granada +1</channel>
<channel site="tvguide.co.uk" site_id="697" xmltv_id="ITVLondonPlus1.uk">ITV London +1</channel>
<channel site="tvguide.co.uk" site_id="698" xmltv_id="UTVPlus1.uk">UTV +1</channel>
<channel site="tvguide.co.uk" site_id="699" xmltv_id="ITVWestPlus1.uk">ITV West +1</channel>
<channel site="tvguide.co.uk" site_id="700" xmltv_id="ITVCentralPlus1.uk">ITV Central +1</channel>
<channel site="tvguide.co.uk" site_id="701" xmltv_id="STVCentralPlus1.uk">STV Central +1</channel>
<channel site="tvguide.co.uk" site_id="702" xmltv_id="MTVMusicUK.us">MTV Music UK</channel>
<channel site="tvguide.co.uk" site_id="704" xmltv_id="SkyAtlanticUK.uk">Sky Atlantic UK</channel>
<channel site="tvguide.co.uk" site_id="706" xmltv_id="LFCTV.uk">LFC TV</channel>
<channel site="tvguide.co.uk" site_id="707" xmltv_id="RTUK.ru">RT UK</channel>
<channel site="tvguide.co.uk" site_id="710" xmltv_id="SonyEntertainmentTVAsia.in">Sony Entertainment TV Asia</channel>
<channel site="tvguide.co.uk" site_id="715" xmltv_id="PremierSports.ie">Premier Sports</channel>
<channel site="tvguide.co.uk" site_id="716" xmltv_id="RTEJr.ie">RTÉ Jr</channel>
<channel site="tvguide.co.uk" site_id="717" xmltv_id="RTENews.ie">RTÉ News</channel>
<channel site="tvguide.co.uk" site_id="72" xmltv_id="BBCOneEastMidlands.uk">BBC One East Midlands</channel>
<channel site="tvguide.co.uk" site_id="729" xmltv_id="Channel5Plus1.uk">Channel 5 +1</channel>
<channel site="tvguide.co.uk" site_id="73" xmltv_id="BBCOneEast.uk">BBC One East</channel>
<channel site="tvguide.co.uk" site_id="731" xmltv_id="BBCOneOxfordshire.uk">BBC One Oxfordshire</channel>
<channel site="tvguide.co.uk" site_id="732" xmltv_id="BBCOneYorksLincs.uk">BBC One Yorks &amp; Lincs</channel>
<channel site="tvguide.co.uk" site_id="733" xmltv_id="BBCOneCambridgeshire.uk">BBC One Cambridgeshire</channel>
<channel site="tvguide.co.uk" site_id="734" xmltv_id="BBCOneChannelIslands.uk">BBC One Channel Islands</channel>
<channel site="tvguide.co.uk" site_id="74" xmltv_id="BBCOneLondon.uk">BBC One London</channel>
<channel site="tvguide.co.uk" site_id="742" xmltv_id="SonyMovies.us">Sony Movies</channel>
<channel site="tvguide.co.uk" site_id="743" xmltv_id="SonyMoviesPlus1.us">Sony Movies +1</channel>
<channel site="tvguide.co.uk" site_id="75" xmltv_id="BBCOneMidlands.uk">BBC One Midlands</channel>
<channel site="tvguide.co.uk" site_id="751" xmltv_id="PBSAmerica.us">PBS America</channel>
<channel site="tvguide.co.uk" site_id="752" xmltv_id="4seven.uk">4seven</channel>
<channel site="tvguide.co.uk" site_id="757" xmltv_id="IdealWorld.uk">Ideal World</channel>
<channel site="tvguide.co.uk" site_id="76" xmltv_id="BBCOneNorthEastCumbria.uk">BBC One North East &amp; Cumbria</channel>
<channel site="tvguide.co.uk" site_id="77" xmltv_id="BBCOneNorthWest.uk">BBC One North West</channel>
<channel site="tvguide.co.uk" site_id="78" xmltv_id="BBCOneNorth.uk">BBC One North</channel>
<channel site="tvguide.co.uk" site_id="80" xmltv_id="BBCOneNorthernIreland.uk">BBC One Northern Ireland</channel>
<channel site="tvguide.co.uk" site_id="812" xmltv_id="ITVBorder.uk">ITV Border</channel>
<channel site="tvguide.co.uk" site_id="824" xmltv_id="SkyAtlanticUKPlus1.uk">Sky Atlantic UK +1</channel>
<channel site="tvguide.co.uk" site_id="826" xmltv_id="NickJrUKPlus1.us">Nick Jr. UK +1</channel>
<channel site="tvguide.co.uk" site_id="828" xmltv_id="ITVAngliaPlus1.uk">ITV Anglia +1</channel>
<channel site="tvguide.co.uk" site_id="829" xmltv_id="ITVTynesTeesPlus1.uk">ITV Tynes Tees +1</channel>
<channel site="tvguide.co.uk" site_id="83" xmltv_id="BBCOneSouthEast.uk">BBC One South East</channel>
<channel site="tvguide.co.uk" site_id="830" xmltv_id="ITVWalesPlus1.uk">ITV Wales +1</channel>
<channel site="tvguide.co.uk" site_id="832" xmltv_id="ITVMeridianPlus1.uk">ITV Meridian +1</channel>
<channel site="tvguide.co.uk" site_id="833" xmltv_id="BBCOneNorthernIreland.uk">BBC One Northern Ireland</channel>
<channel site="tvguide.co.uk" site_id="836" xmltv_id="BabyTVEurope.uk">BabyTV Europe</channel>
<channel site="tvguide.co.uk" site_id="837" xmltv_id="SkyOneUKPlus1.uk">Sky One UK +1</channel>
<channel site="tvguide.co.uk" site_id="84" xmltv_id="BBCOneSouthWest.uk">BBC One South West</channel>
<channel site="tvguide.co.uk" site_id="844" xmltv_id="NationalGeographicUKPlus1.us">National Geographic UK +1</channel>
<channel site="tvguide.co.uk" site_id="846" xmltv_id="DiscoveryChannelUKPlus1.us">Discovery Channel UK +1</channel>
<channel site="tvguide.co.uk" site_id="85" xmltv_id="BBCOneSouth.uk">BBC One South</channel>
<channel site="tvguide.co.uk" site_id="855" xmltv_id="BBCOneScotland.uk">BBC One Scotland</channel>
<channel site="tvguide.co.uk" site_id="856" xmltv_id="BBCOneWales.uk">BBC One Wales</channel>
<channel site="tvguide.co.uk" site_id="864" xmltv_id="TLCUKPlus1.us">TLC UK +1</channel>
<channel site="tvguide.co.uk" site_id="865" xmltv_id="TLCUK.us">TLC UK</channel>
<channel site="tvguide.co.uk" site_id="868" xmltv_id="ColorsRishteyEurope.in">Colors Rishtey Europe</channel>
<channel site="tvguide.co.uk" site_id="87" xmltv_id="BBCOneWales.uk">BBC One Wales</channel>
<channel site="tvguide.co.uk" site_id="870" xmltv_id="InvestigationDiscoveryUKPlus1.us">Investigation Discovery UK +1</channel>
<channel site="tvguide.co.uk" site_id="871" xmltv_id="DramaUK.uk">Drama UK</channel>
<channel site="tvguide.co.uk" site_id="874" xmltv_id="UtsavBharat.hk">Utsav Bharat</channel>
<channel site="tvguide.co.uk" site_id="875" xmltv_id="BTSport1.uk">BT Sport 1</channel>
<channel site="tvguide.co.uk" site_id="877" xmltv_id="BTSport2.uk">BT Sport 2</channel>
<channel site="tvguide.co.uk" site_id="88" xmltv_id="BBCOneWest.uk">BBC One West</channel>
<channel site="tvguide.co.uk" site_id="881" xmltv_id="Colors.in">Colors</channel>
<channel site="tvguide.co.uk" site_id="89" xmltv_id="BBCTwo.uk">BBC Two</channel>
<channel site="tvguide.co.uk" site_id="901" xmltv_id="Channel5Plus1.uk">Channel 5 +1</channel>
<channel site="tvguide.co.uk" site_id="902" xmltv_id="ITV3Plus1Freeview.uk">ITV3 +1 (Freeview)</channel>
<channel site="tvguide.co.uk" site_id="904" xmltv_id="LondonLive.uk">London Live</channel>
<channel site="tvguide.co.uk" site_id="906" xmltv_id="PopPlus1.uk">Pop +1</channel>
<channel site="tvguide.co.uk" site_id="913" xmltv_id="ForcesTV.uk">Forces TV</channel>
<channel site="tvguide.co.uk" site_id="926" xmltv_id="ITVBe.uk">ITVBe</channel>
<channel site="tvguide.co.uk" site_id="957" xmltv_id="ITVBePlus1.uk">ITVBe +1</channel>
<channel site="tvguide.co.uk" site_id="962" xmltv_id="VirginMediaThree.ie">Virgin Media Three</channel>
<channel site="tvguide.co.uk" site_id="967" xmltv_id="BTSport.uk">BT Sport</channel>
<channel site="tvguide.co.uk" site_id="973" xmltv_id="ITVBorderScotland.uk">ITV Border Scotland</channel>
<channel site="tvguide.co.uk" site_id="979" xmltv_id="TalkingPicturesTV.uk">Talking Pictures</channel>
<channel site="tvguide.co.uk" site_id="984" xmltv_id="AMC.us">AMC</channel>
<channel site="tvguide.co.uk" site_id="99" xmltv_id="BBCTwoNorthernIreland.uk">BBC Two Northern Ireland</channel>
<channel site="tvguide.co.uk" site_id="993" xmltv_id="SonyMoviesClassic.us">Sony Movies Classic</channel>
<channel site="tvguide.co.uk" site_id="996" xmltv_id="NottsTV.uk">Notts TV</channel>
</settings>

45
sites/tvguide.co.uk.js Normal file
View File

@ -0,0 +1,45 @@
const jsdom = require('jsdom')
const { JSDOM } = jsdom
const dayjs = require('dayjs')
var customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
module.exports = {
url: function ({ date, channel }) {
return `https://www.tvguide.co.uk/mobile/channellisting.asp?ch=${channel.site_id}`
},
parser: function ({ channel, content, date }) {
const programs = []
const dom = new JSDOM(content)
const channelListings = dom.window.document.querySelector('#channel-listings')
const rows = channelListings.querySelectorAll('table:first-of-type > tbody > tr')
rows.forEach(tr => {
const time = (tr.getElementsByClassName('time')[0] || { innerHTML: '' }).innerHTML
.toString()
.trim()
const title = (tr.getElementsByClassName('title')[0] || { innerHTML: '' }).innerHTML
.toString()
.trim()
if (time && title) {
const start = dayjs(time, 'h:mma')
.set('D', date.get('D'))
.set('M', date.get('M'))
.set('y', date.get('y'))
.toString()
programs.push({
title,
description: null,
start,
stop: null,
lang: 'en',
channel: channel['xmltv_id']
})
}
})
return programs
}
}

View File

@ -1,31 +1,4 @@
#!/bin/bash
#backup the current working dir
WG_BCKP_DIR="$(pwd)"
function quit {
#restore previous working dir
cd "$WG_BCKP_DIR"
exit $1;
}
# check if mono can be found
which mono >/dev/null 2>&1 || { echo >&2 "Mono required, but it's not installed."; quit 1; }
# get the absolute path of the link (or relative path)
if [ -L $0 ] ; then
DIR=$(dirname $(readlink -f $0)) ;
else
DUTDIR=$(dirname $0) ;
if [ "${DUTDIR:0:1}" = "/" ]; then
DIR="$DUTDIR";
else
DIR=$PWD/$(dirname $0) ;
fi
fi ;
mono "$DIR/bin/WebGrab+Plus.exe" "$DIR/config/en"
mono "$DIR/bin/WebGrab+Plus.exe" "$DIR/config/ru"
quit 0;
#!/bin/bash
# ./bin/epg-grabber/index.js --config=sites/tv.yandex.ru.config.xml && \
./bin/epg-grabber/index.js --config=sites/tvguide.co.uk.config.xml