From ab42da3b0bf65268589ce6353e47c3019e24a267 Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Sun, 28 Sep 2025 13:06:13 +0300 Subject: [PATCH] LF to CRLF --- sites/allente.no/allente.no.test.js | 118 +- sites/awilime.com/awilime.com.config.js | 188 +- sites/beinsports.com/beinsports.com.test.js | 86 +- sites/cubmu.com/cubmu.com.config.js | 228 +- sites/directv.com.ar/directv.com.ar.config.js | 375 +- sites/directv.com.uy/directv.com.uy.config.js | 345 +- sites/dishtv.in/dishtv.in.config.js | 353 +- sites/dishtv.in/dishtv.in.test.js | 283 +- sites/dtv8.net/dtv8.net.config.js | 174 +- sites/elcinema.com/elcinema.com.config.js | 309 +- sites/epg.112114.xyz/epg.112114.xyz.config.js | 111 +- .../epg.iptvx.one/epg.iptvx.one.channels.xml | 6664 ++++++++--------- sites/epg.iptvx.one/epg.iptvx.one.config.js | 128 +- sites/epg.iptvx.one/epg.iptvx.one.test.js | 92 +- .../epg.telemach.ba/epg.telemach.ba.config.js | 252 +- sites/epg.telemach.ba/epg.telemach.ba.test.js | 188 +- .../epgshare01.online.config.js | 246 +- 17 files changed, 5084 insertions(+), 5056 deletions(-) diff --git a/sites/allente.no/allente.no.test.js b/sites/allente.no/allente.no.test.js index e55c7924..1337a069 100644 --- a/sites/allente.no/allente.no.test.js +++ b/sites/allente.no/allente.no.test.js @@ -1,59 +1,59 @@ -const { parser, url } = require('./allente.no.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2021-11-17', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: 'se#0148', - xmltv_id: 'SVT1.se' -} - -it('can generate valid url', () => { - if (channel.site_id.split('#')[0] !== 'se') { - expect(url({ channel, date })).toBe('https://cs-vcb.allente.se/epg/events?date=2021-11-17') - } else if (channel.site_id.split('#')[0] === 'fi') { - expect(url({ channel, date })).toBe('https://cs-vcb.allente.fi/epg/events?date=2021-11-17') - } else if (channel.site_id.split('#')[0] === 'no') { - expect(url({ channel, date })).toBe('https://cs-vcb.allente.no/epg/events?date=2021-11-17') - } else if (channel.site_id.split('#')[0] === 'dk') { - expect(url({ channel, date })).toBe('https://cs-vcb.allente.dk/epg/events?date=2021-11-17') - } -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) - const result = parser({ content, channel }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result).toMatchObject([ - { - start: '2022-08-22T07:10:00.000Z', - stop: '2022-08-22T07:30:00.000Z', - title: 'Hemmagympa med Sofia', - category: ['other'], - description: - 'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.', - image: - 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440', - season: 4, - episode: 1 - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json')) - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./allente.no.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2021-11-17', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: 'se#0148', + xmltv_id: 'SVT1.se' +} + +it('can generate valid url', () => { + if (channel.site_id.split('#')[0] !== 'se') { + expect(url({ channel, date })).toBe('https://cs-vcb.allente.se/epg/events?date=2021-11-17') + } else if (channel.site_id.split('#')[0] === 'fi') { + expect(url({ channel, date })).toBe('https://cs-vcb.allente.fi/epg/events?date=2021-11-17') + } else if (channel.site_id.split('#')[0] === 'no') { + expect(url({ channel, date })).toBe('https://cs-vcb.allente.no/epg/events?date=2021-11-17') + } else if (channel.site_id.split('#')[0] === 'dk') { + expect(url({ channel, date })).toBe('https://cs-vcb.allente.dk/epg/events?date=2021-11-17') + } +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) + const result = parser({ content, channel }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(result).toMatchObject([ + { + start: '2022-08-22T07:10:00.000Z', + stop: '2022-08-22T07:30:00.000Z', + title: 'Hemmagympa med Sofia', + category: ['other'], + description: + 'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.', + image: + 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440', + season: 4, + episode: 1 + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json')) + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/awilime.com/awilime.com.config.js b/sites/awilime.com/awilime.com.config.js index df6246c1..7e19b5b5 100644 --- a/sites/awilime.com/awilime.com.config.js +++ b/sites/awilime.com/awilime.com.config.js @@ -1,91 +1,97 @@ -const cheerio = require('cheerio') -const axios = require('axios') -const { DateTime } = require('luxon') - -module.exports = { - site: 'awilime.com', - days: 2, - url({ channel, date }) { - return `https://www.awilime.com/tv/napi_musor/${channel.site_id}/${date.format('YYYY_MM_DD')}` - }, - request: { - headers: { - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' - } - }, - parser({ content, date }) { - const programs = [] - const items = parseItems(content) - items.forEach(item => { - const prev = programs[programs.length - 1] - const $item = cheerio.load(item) - let start = parseStart($item, date) - if (!start) return - if (prev) { - prev.stop = start - } - const stop = start.plus({ minute: 30 }) - - programs.push({ - title: parseTitle($item), - sub_title: parseSubTitle($item), - description: parseDescription($item), - start, - stop - }) - }) - - return programs - }, - async channels() { - const html = await axios - .get('https://www.awilime.com/tv/napi_musor', { headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' } }) - .then(r => r.data) - .catch(console.log) - const $ = cheerio.load(html) - const items = $('#body > div.tk > div > div').toArray() - - const channels = [] - items.forEach(item => { - const name = $(item).find('a').text().trim() - const url = $(item).find('a').attr('href') - const [, site_id] = url.match(/\/tv\/napi_musor\/(.*)/) || [null, null] - if (!site_id) return - if (channels.find(channel => channel.site_id === site_id)) return - - channels.push({ - lang: 'hu', - site_id, - name - }) - }) - - return channels - } -} - -function parseTitle($item) { - return $item('b > a').text().trim() -} - -function parseSubTitle($item) { - return $item('i').clone().children().remove('s').end().text().trim() -} - -function parseDescription($item) { - return $item('p').text().trim() -} - -function parseStart($item, date) { - let time = $item('b').clone().children().remove().end().text().trim() - if (!time || !/^\d/.test(time)) return null - time = `${date.format('YYYY-MM-DD')} ${time}` - - return DateTime.fromFormat(time, 'yyyy-MM-dd HH:mm', { zone: 'Europe/Budapest' }).toUTC() -} - -function parseItems(content) { - const $ = cheerio.load(content) - - return $('#body > div.tdc > div.td2 > div').toArray() -} +const cheerio = require('cheerio') +const axios = require('axios') +const { DateTime } = require('luxon') + +module.exports = { + site: 'awilime.com', + days: 2, + url({ channel, date }) { + return `https://www.awilime.com/tv/napi_musor/${channel.site_id}/${date.format('YYYY_MM_DD')}` + }, + request: { + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' + } + }, + parser({ content, date }) { + const programs = [] + const items = parseItems(content) + items.forEach(item => { + const prev = programs[programs.length - 1] + const $item = cheerio.load(item) + let start = parseStart($item, date) + if (!start) return + if (prev) { + prev.stop = start + } + const stop = start.plus({ minute: 30 }) + + programs.push({ + title: parseTitle($item), + sub_title: parseSubTitle($item), + description: parseDescription($item), + start, + stop + }) + }) + + return programs + }, + async channels() { + const html = await axios + .get('https://www.awilime.com/tv/napi_musor', { + headers: { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36' + } + }) + .then(r => r.data) + .catch(console.log) + const $ = cheerio.load(html) + const items = $('#body > div.tk > div > div').toArray() + + const channels = [] + items.forEach(item => { + const name = $(item).find('a').text().trim() + const url = $(item).find('a').attr('href') + const [, site_id] = url.match(/\/tv\/napi_musor\/(.*)/) || [null, null] + if (!site_id) return + if (channels.find(channel => channel.site_id === site_id)) return + + channels.push({ + lang: 'hu', + site_id, + name + }) + }) + + return channels + } +} + +function parseTitle($item) { + return $item('b > a').text().trim() +} + +function parseSubTitle($item) { + return $item('i').clone().children().remove('s').end().text().trim() +} + +function parseDescription($item) { + return $item('p').text().trim() +} + +function parseStart($item, date) { + let time = $item('b').clone().children().remove().end().text().trim() + if (!time || !/^\d/.test(time)) return null + time = `${date.format('YYYY-MM-DD')} ${time}` + + return DateTime.fromFormat(time, 'yyyy-MM-dd HH:mm', { zone: 'Europe/Budapest' }).toUTC() +} + +function parseItems(content) { + const $ = cheerio.load(content) + + return $('#body > div.tdc > div.td2 > div').toArray() +} diff --git a/sites/beinsports.com/beinsports.com.test.js b/sites/beinsports.com/beinsports.com.test.js index e3952df6..cfcf832a 100644 --- a/sites/beinsports.com/beinsports.com.test.js +++ b/sites/beinsports.com/beinsports.com.test.js @@ -1,43 +1,43 @@ -const { parser, url } = require('./beinsports.com.config.js') -const fs = require('fs') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -const date = dayjs.utc('2023-10-22T00:00:00.000', '"YYYY-MM-DDTHH:mm:ss.SSS').startOf('d') -const channel = { site_id: 'C244C48D-3B54-406A-94C9-D63B16318267', xmltv_id: 'beINSportsUSA.us' } - -it('can generate valid url', () => { - const result = url({ date, channel }) - expect(result).toBe( - 'https://www.beinsports.com/api/opta/tv-event?&startBefore=2023-10-23T00:00:00.000Z&endAfter=2023-10-22T00:00:00.000Z&channelIds=C244C48D-3B54-406A-94C9-D63B16318267' - ) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) - const result = parser({ content, channel, date }).map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(result).toMatchObject([ - { - start: '2023-10-20T23:30:00.000Z', - stop: '2023-10-21T01:00:00.000Z', - title: 'Tokyo Day 5 QF 2', - description: 'Exclusive coverage of the 2023 ATP Tour on beIN SPORTS' - } - ]) -}) - -it('can handle empty guide', () => { - const result = parser({ - content: '[]' - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./beinsports.com.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2023-10-22T00:00:00.000', '"YYYY-MM-DDTHH:mm:ss.SSS').startOf('d') +const channel = { site_id: 'C244C48D-3B54-406A-94C9-D63B16318267', xmltv_id: 'beINSportsUSA.us' } + +it('can generate valid url', () => { + const result = url({ date, channel }) + expect(result).toBe( + 'https://www.beinsports.com/api/opta/tv-event?&startBefore=2023-10-23T00:00:00.000Z&endAfter=2023-10-22T00:00:00.000Z&channelIds=C244C48D-3B54-406A-94C9-D63B16318267' + ) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) + const result = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(result).toMatchObject([ + { + start: '2023-10-20T23:30:00.000Z', + stop: '2023-10-21T01:00:00.000Z', + title: 'Tokyo Day 5 QF 2', + description: 'Exclusive coverage of the 2023 ATP Tour on beIN SPORTS' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + content: '[]' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/cubmu.com/cubmu.com.config.js b/sites/cubmu.com/cubmu.com.config.js index d59090e5..335a555d 100644 --- a/sites/cubmu.com/cubmu.com.config.js +++ b/sites/cubmu.com/cubmu.com.config.js @@ -1,114 +1,114 @@ -const dayjs = require('dayjs') -const timezone = require('dayjs/plugin/timezone') -const utc = require('dayjs/plugin/utc') - -dayjs.extend(timezone) -dayjs.extend(utc) - -module.exports = { - site: 'cubmu.com', - days: 2, - url({ channel, date }) { - return `https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=${date.format( - 'YYYY-MM-DD' - )}&channel_id=${channel.site_id}` - }, - parser({ content, channel }) { - const programs = [] - const items = parseItems(content) - items.forEach(item => { - programs.push({ - title: parseTitle(item), - description: parseDescription(item, channel.lang), - episode: parseEpisode(item), - start: parseStart(item).toISOString(), - stop: parseStop(item).toISOString() - }) - }) - - return programs - }, - async channels({ lang }) { - const axios = require('axios') - const cheerio = require('cheerio') - const result = await axios - .get('https://cubmu.com/live-tv') - .then(response => response.data) - .catch(console.error) - - const $ = cheerio.load(result) - - // retrieve service api data - const config = JSON.parse($('#__NEXT_DATA__').text()).runtimeConfig || {} - - const options = { - headers: { - Origin: 'https://cubmu.com', - Referer: 'https://cubmu.com/live-tv' - } - } - // login to service bus - await axios - .post( - `https://servicebuss.transvision.co.id/tvs/login/external?email=${config.email}&password=${config.password}&deviceId=${config.deviceId}&deviceType=${config.deviceType}&deviceModel=${config.deviceModel}&deviceToken=&serial=&platformId=${config.platformId}`, - options - ) - .then(response => response.data) - .catch(console.error) - // list channels - const subscribedChannels = await axios - .post( - `https://servicebuss.transvision.co.id/tvs/subscribe_product/list?platformId=${config.platformId}`, - options - ) - .then(response => response.data) - .catch(console.error) - - const channels = [] - const included = [] - if (Array.isArray(subscribedChannels.channelPackageList)) { - subscribedChannels.channelPackageList.forEach(pkg => { - pkg.channelList.forEach(channel => { - if (included.indexOf(channel.id) < 0) { - included.push(channel.id) - channels.push({ - lang, - site_id: channel.id, - name: channel.name - }) - } - }) - }) - } - - return channels - } -} - -function parseItems(content) { - return content ? JSON.parse(content.trim()).result || [] : [] -} - -function parseTitle(item) { - return item.scehedule_title -} - -function parseDescription(item, lang = 'id') { - return lang === 'id' ? item.schedule_json.primarySynopsis : item.schedule_json.secondarySynopsis -} - -function parseEpisode(item) { - return item.schedule_json.episodeName -} - -function parseStart(item) { - return dayjs.tz(item.schedule_date, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') -} - -function parseStop(item) { - return dayjs.tz( - [item.schedule_date.split(' ')[0], item.schedule_end_time].join(' '), - 'YYYY-MM-DD HH:mm:ss', - 'Asia/Jakarta' - ) -} +const dayjs = require('dayjs') +const timezone = require('dayjs/plugin/timezone') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(timezone) +dayjs.extend(utc) + +module.exports = { + site: 'cubmu.com', + days: 2, + url({ channel, date }) { + return `https://servicebuss.transvision.co.id/v2/cms/getEPGData?app_id=cubmu&tvs_platform_id=standalone&schedule_date=${date.format( + 'YYYY-MM-DD' + )}&channel_id=${channel.site_id}` + }, + parser({ content, channel }) { + const programs = [] + const items = parseItems(content) + items.forEach(item => { + programs.push({ + title: parseTitle(item), + description: parseDescription(item, channel.lang), + episode: parseEpisode(item), + start: parseStart(item).toISOString(), + stop: parseStop(item).toISOString() + }) + }) + + return programs + }, + async channels({ lang }) { + const axios = require('axios') + const cheerio = require('cheerio') + const result = await axios + .get('https://cubmu.com/live-tv') + .then(response => response.data) + .catch(console.error) + + const $ = cheerio.load(result) + + // retrieve service api data + const config = JSON.parse($('#__NEXT_DATA__').text()).runtimeConfig || {} + + const options = { + headers: { + Origin: 'https://cubmu.com', + Referer: 'https://cubmu.com/live-tv' + } + } + // login to service bus + await axios + .post( + `https://servicebuss.transvision.co.id/tvs/login/external?email=${config.email}&password=${config.password}&deviceId=${config.deviceId}&deviceType=${config.deviceType}&deviceModel=${config.deviceModel}&deviceToken=&serial=&platformId=${config.platformId}`, + options + ) + .then(response => response.data) + .catch(console.error) + // list channels + const subscribedChannels = await axios + .post( + `https://servicebuss.transvision.co.id/tvs/subscribe_product/list?platformId=${config.platformId}`, + options + ) + .then(response => response.data) + .catch(console.error) + + const channels = [] + const included = [] + if (Array.isArray(subscribedChannels.channelPackageList)) { + subscribedChannels.channelPackageList.forEach(pkg => { + pkg.channelList.forEach(channel => { + if (included.indexOf(channel.id) < 0) { + included.push(channel.id) + channels.push({ + lang, + site_id: channel.id, + name: channel.name + }) + } + }) + }) + } + + return channels + } +} + +function parseItems(content) { + return content ? JSON.parse(content.trim()).result || [] : [] +} + +function parseTitle(item) { + return item.scehedule_title +} + +function parseDescription(item, lang = 'id') { + return lang === 'id' ? item.schedule_json.primarySynopsis : item.schedule_json.secondarySynopsis +} + +function parseEpisode(item) { + return item.schedule_json.episodeName +} + +function parseStart(item) { + return dayjs.tz(item.schedule_date, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta') +} + +function parseStop(item) { + return dayjs.tz( + [item.schedule_date.split(' ')[0], item.schedule_end_time].join(' '), + 'YYYY-MM-DD HH:mm:ss', + 'Asia/Jakarta' + ) +} diff --git a/sites/directv.com.ar/directv.com.ar.config.js b/sites/directv.com.ar/directv.com.ar.config.js index 65503989..fef6a12f 100644 --- a/sites/directv.com.ar/directv.com.ar.config.js +++ b/sites/directv.com.ar/directv.com.ar.config.js @@ -1,184 +1,191 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 -const dayjs = require('dayjs') -const axios = require('axios') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'directv.com.ar', - days: 2, - url: 'https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming', - request: { - method: 'POST', - headers: { - Cookie: 'PGCSS=16; PGLang=S; PGCulture=es-AR;', - Accept: '*/*', - 'Accept-Language': 'es-419,es;q=0.9', - Connection: 'keep-alive', - 'Content-Type': 'application/json; charset=UTF-8', - Origin: 'https://www.directv.com.ar', - Referer: 'https://www.directv.com.ar/guia/ChannelDetail.aspx?id=1740&name=TLCHD', - 'Sec-Fetch-Dest': 'empty', - 'Sec-Fetch-Mode': 'cors', - 'Sec-Fetch-Site': 'same-origin', - 'User-Agent': - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', - 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"Windows"', - 'X-Requested-With': 'XMLHttpRequest' - }, - data({ channel, date }) { - const [channelNum, channelName] = channel.site_id.split('#') - - return { - filterParameters: { - day: date.date(), - time: 0, - minute: 0, - month: date.month() + 1, - year: date.year(), - offSetValue: 0, - homeScreenFilter: '', - filtersScreenFilters: [''], - isHd: '', - isChannelDetails: 'Y', - channelNum, - channelName: channelName.replace('&', '&') - } - } - } - }, - parser({ content, channel }) { - let programs = [] - const items = parseItems(content, channel) - items.forEach(item => { - programs.push({ - title: item.title, - description: item.description, - rating: parseRating(item), - start: parseStart(item), - stop: parseStop(item) - }) - }) - - return programs - }, - async channels() { - let channels = [] - const cookies = await axios.get('https://www.directv.com.ar/guia/guia.aspx', { - headers: { - Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', - 'Accept-Encoding': 'gzip, deflate, br, zstd', - 'Accept-Language': 'es-419,es;q=0.9', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - Host: 'www.directv.com.ar', - Pragma: 'no-cache', - Referer: 'https://www.google.com/', - 'Sec-Fetch-Dest': 'document', - 'Sec-Fetch-Mode': 'navigate', - 'Sec-Fetch-Site': 'same-origin', - 'Sec-Fetch-User': '?1', - 'Sec-GPC': 1, - 'Upgrade-Insecure-Requests': 1, - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', - 'sec-ch-ua': '"Not;A=Brand";v="99", "Brave";v="139", "Chromium";v="139"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"Windows"' - }}) - const cookieHeader = cookies.headers['set-cookie'].map(cookie => cookie.split(';')[0]).join('; ') - - const date = dayjs().tz('America/Argentina/Buenos_Aires') - - const response = await axios.post( - 'https://www.directv.com.ar/guia/guia.aspx/GetProgramming', - { - filterParam: { - day: date.date(), - time: date.hour(), - minute: 0, - month: date.month() + 1, - year: date.year(), - offSetValue: 0, - homeScreenFilter: '', - filtersScreenFilters: [''], - isHd: '' - } - }, - { - headers: { - Accept: '*/*', - 'Accept-Encoding': 'gzip, deflate, br, zstd', - 'Accept-Language': 'es-419,es;q=0.9', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - 'Content-Type': 'application/json; charset=UTF-8', - Cookie: cookieHeader, - Host: 'www.directv.com.ar', - Origin: 'https://www.directv.com.ar', - Pragma: 'no-cache', - Referer: 'https://www.directv.com.ar/guia/guia.aspx', - 'Sec-Fetch-Dest': 'empty', - 'Sec-Fetch-Mode': 'cors', - 'Sec-Fetch-Site': 'same-origin', - 'Sec-GPC': 1, - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', - 'X-Requested-With': 'XMLHttpRequest', - 'sec-ch-ua': '"Not;A=Brand";v="99", "Brave";v="139", "Chromium";v="139"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"Windows"', - 'uzlc': true, - } - } - ) - .then(r => r.data) - .catch(console.log) - - response.d.forEach(item => { - channels.push({ - site_id: `${item.ContentChannelID}#${item.ChannelName.replace(/&/g, '&')}`, - name: item.ChannelFullName, - logo: item.ImageUrl, - lang: 'es' - }) - }) - - return channels - } -} - -function parseRating(item) { - return item.rating - ? { - system: 'MPA', - value: item.rating - } - : null -} - -function parseStart(item) { - return dayjs.tz(item.startTimeString, 'M/D/YYYY h:mm:ss A', 'America/Argentina/Buenos_Aires') -} - -function parseStop(item) { - return dayjs.tz(item.endTimeString, 'M/D/YYYY h:mm:ss A', 'America/Argentina/Buenos_Aires') -} - -function parseItems(content, channel) { - if (!content) return [] - let [ChannelNumber, ChannelName] = channel.site_id.split('#') - ChannelName = ChannelName.replace('&', '&') - const data = JSON.parse(content) - if (!data || !Array.isArray(data.d)) return [] - const channelData = data.d.find( - c => c.ChannelNumber == ChannelNumber && c.ChannelName === ChannelName - ) - - return channelData && Array.isArray(channelData.ProgramList) ? channelData.ProgramList : [] -} +process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 +const dayjs = require('dayjs') +const axios = require('axios') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'directv.com.ar', + days: 2, + url: 'https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming', + request: { + method: 'POST', + headers: { + Cookie: 'PGCSS=16; PGLang=S; PGCulture=es-AR;', + Accept: '*/*', + 'Accept-Language': 'es-419,es;q=0.9', + Connection: 'keep-alive', + 'Content-Type': 'application/json; charset=UTF-8', + Origin: 'https://www.directv.com.ar', + Referer: 'https://www.directv.com.ar/guia/ChannelDetail.aspx?id=1740&name=TLCHD', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not.A/Brand";v="8", "Chromium";v="114", "Google Chrome";v="114"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'X-Requested-With': 'XMLHttpRequest' + }, + data({ channel, date }) { + const [channelNum, channelName] = channel.site_id.split('#') + + return { + filterParameters: { + day: date.date(), + time: 0, + minute: 0, + month: date.month() + 1, + year: date.year(), + offSetValue: 0, + homeScreenFilter: '', + filtersScreenFilters: [''], + isHd: '', + isChannelDetails: 'Y', + channelNum, + channelName: channelName.replace('&', '&') + } + } + } + }, + parser({ content, channel }) { + let programs = [] + const items = parseItems(content, channel) + items.forEach(item => { + programs.push({ + title: item.title, + description: item.description, + rating: parseRating(item), + start: parseStart(item), + stop: parseStop(item) + }) + }) + + return programs + }, + async channels() { + let channels = [] + const cookies = await axios.get('https://www.directv.com.ar/guia/guia.aspx', { + headers: { + Accept: + 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', + 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'Accept-Language': 'es-419,es;q=0.9', + 'Cache-Control': 'no-cache', + Connection: 'keep-alive', + Host: 'www.directv.com.ar', + Pragma: 'no-cache', + Referer: 'https://www.google.com/', + 'Sec-Fetch-Dest': 'document', + 'Sec-Fetch-Mode': 'navigate', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-User': '?1', + 'Sec-GPC': 1, + 'Upgrade-Insecure-Requests': 1, + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not;A=Brand";v="99", "Brave";v="139", "Chromium";v="139"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"' + } + }) + const cookieHeader = cookies.headers['set-cookie'] + .map(cookie => cookie.split(';')[0]) + .join('; ') + + const date = dayjs().tz('America/Argentina/Buenos_Aires') + + const response = await axios + .post( + 'https://www.directv.com.ar/guia/guia.aspx/GetProgramming', + { + filterParam: { + day: date.date(), + time: date.hour(), + minute: 0, + month: date.month() + 1, + year: date.year(), + offSetValue: 0, + homeScreenFilter: '', + filtersScreenFilters: [''], + isHd: '' + } + }, + { + headers: { + Accept: '*/*', + 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'Accept-Language': 'es-419,es;q=0.9', + 'Cache-Control': 'no-cache', + Connection: 'keep-alive', + 'Content-Type': 'application/json; charset=UTF-8', + Cookie: cookieHeader, + Host: 'www.directv.com.ar', + Origin: 'https://www.directv.com.ar', + Pragma: 'no-cache', + Referer: 'https://www.directv.com.ar/guia/guia.aspx', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-GPC': 1, + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', + 'X-Requested-With': 'XMLHttpRequest', + 'sec-ch-ua': '"Not;A=Brand";v="99", "Brave";v="139", "Chromium";v="139"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + uzlc: true + } + } + ) + .then(r => r.data) + .catch(console.log) + + response.d.forEach(item => { + channels.push({ + site_id: `${item.ContentChannelID}#${item.ChannelName.replace(/&/g, '&')}`, + name: item.ChannelFullName, + logo: item.ImageUrl, + lang: 'es' + }) + }) + + return channels + } +} + +function parseRating(item) { + return item.rating + ? { + system: 'MPA', + value: item.rating + } + : null +} + +function parseStart(item) { + return dayjs.tz(item.startTimeString, 'M/D/YYYY h:mm:ss A', 'America/Argentina/Buenos_Aires') +} + +function parseStop(item) { + return dayjs.tz(item.endTimeString, 'M/D/YYYY h:mm:ss A', 'America/Argentina/Buenos_Aires') +} + +function parseItems(content, channel) { + if (!content) return [] + let [ChannelNumber, ChannelName] = channel.site_id.split('#') + ChannelName = ChannelName.replace('&', '&') + const data = JSON.parse(content) + if (!data || !Array.isArray(data.d)) return [] + const channelData = data.d.find( + c => c.ChannelNumber == ChannelNumber && c.ChannelName === ChannelName + ) + + return channelData && Array.isArray(channelData.ProgramList) ? channelData.ProgramList : [] +} diff --git a/sites/directv.com.uy/directv.com.uy.config.js b/sites/directv.com.uy/directv.com.uy.config.js index b96ed1ef..6dd1a268 100644 --- a/sites/directv.com.uy/directv.com.uy.config.js +++ b/sites/directv.com.uy/directv.com.uy.config.js @@ -1,169 +1,176 @@ -process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'directv.com.uy', - days: 2, - url: 'https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming', - request: { - method: 'POST', - headers: { - 'Content-Type': 'application/json; charset=UTF-8', - Cookie: 'PGCSS=16384; PGLang=S; PGCulture=es-UY;' - }, - data({ channel, date }) { - const [channelNum, channelName] = channel.site_id.split('#') - - return { - filterParameters: { - day: date.date(), - time: 0, - minute: 0, - month: date.month() + 1, - year: date.year(), - offSetValue: 0, - filtersScreenFilters: [''], - isHd: '', - isChannelDetails: 'Y', - channelNum, - channelName: channelName.replace('&', '&') - } - } - } - }, - parser({ content, channel }) { - let programs = [] - const items = parseItems(content, channel) - items.forEach(item => { - programs.push({ - title: item.title, - description: item.description, - rating: parseRating(item), - start: parseStart(item), - stop: parseStop(item) - }) - }) - - return programs - }, - async channels() { - let channels = [] - const cookies = await axios.get('https://www.directv.com.uy/guia/guia.aspx', { - headers: { - Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', - 'Accept-Encoding': 'gzip, deflate, br, zstd', - 'Accept-Language': 'es-419,es;q=0.9', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - Host: 'www.directv.com.ar', - Pragma: 'no-cache', - Referer: 'https://www.google.com/', - 'Sec-Fetch-Dest': 'document', - 'Sec-Fetch-Mode': 'navigate', - 'Sec-Fetch-Site': 'same-origin', - 'Sec-Fetch-User': '?1', - 'Sec-GPC': 1, - 'Upgrade-Insecure-Requests': 1, - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', - 'sec-ch-ua': '"Not;A=Brand";v="99", "Brave";v="139", "Chromium";v="139"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"Windows"' - }}) - const cookieHeader = cookies.headers['set-cookie'].map(cookie => cookie.split(';')[0]).join('; ') - - const date = dayjs().tz('America/Montevideo') - - const response = await axios.post( - 'https://www.directv.com.uy/guia/guia.aspx/GetProgramming', - { - filterParam: { - day: date.date(), - time: date.hour(), - minute: 0, - month: date.month() + 1, - year: date.year(), - offSetValue: 0, - homeScreenFilter: '', - filtersScreenFilters: [''], - isHd: '' - } - }, - { - headers: { - Accept: '*/*', - 'Accept-Encoding': 'gzip, deflate, br, zstd', - 'Accept-Language': 'es-419,es;q=0.9', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - 'Content-Type': 'application/json; charset=UTF-8', - Cookie: cookieHeader, - Host: 'www.directv.com.ar', - Origin: 'https://www.directv.com.uy', - Pragma: 'no-cache', - Referer: 'https://www.directv.com.uy/guia/guia.aspx', - 'Sec-Fetch-Dest': 'empty', - 'Sec-Fetch-Mode': 'cors', - 'Sec-Fetch-Site': 'same-origin', - 'Sec-GPC': 1, - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', - 'X-Requested-With': 'XMLHttpRequest', - 'sec-ch-ua': '"Not;A=Brand";v="99", "Brave";v="139", "Chromium";v="139"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"Windows"', - 'uzlc': true, - } - } - ) - .then(r => r.data) - .catch(console.log) - - response.d.forEach(item => { - channels.push({ - site_id: `${item.ContentChannelID}#${item.ChannelName.replace(/&/g, '&')}`, - name: item.ChannelFullName, - logo: item.ImageUrl, - lang: 'es' - }) - }) - - return channels - } -} - -function parseRating(item) { - return item.rating - ? { - system: 'MPA', - value: item.rating - } - : null -} - -function parseStart(item) { - return dayjs.tz(item.startTimeString, 'M/D/YYYY h:mm:ss A', 'America/Montevideo') -} - -function parseStop(item) { - return dayjs.tz(item.endTimeString, 'M/D/YYYY h:mm:ss A', 'America/Montevideo') -} - -function parseItems(content, channel) { - if (!content) return [] - let [ChannelNumber, ChannelName] = channel.site_id.split('#') - ChannelName = ChannelName.replace('&', '&') - const data = JSON.parse(content) - if (!data || !Array.isArray(data.d)) return [] - const channelData = data.d.find( - c => c.ChannelNumber == ChannelNumber && c.ChannelName === ChannelName - ) - - return channelData && Array.isArray(channelData.ProgramList) ? channelData.ProgramList : [] -} +process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'directv.com.uy', + days: 2, + url: 'https://www.directv.com.uy/guia/ChannelDetail.aspx/GetProgramming', + request: { + method: 'POST', + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + Cookie: 'PGCSS=16384; PGLang=S; PGCulture=es-UY;' + }, + data({ channel, date }) { + const [channelNum, channelName] = channel.site_id.split('#') + + return { + filterParameters: { + day: date.date(), + time: 0, + minute: 0, + month: date.month() + 1, + year: date.year(), + offSetValue: 0, + filtersScreenFilters: [''], + isHd: '', + isChannelDetails: 'Y', + channelNum, + channelName: channelName.replace('&', '&') + } + } + } + }, + parser({ content, channel }) { + let programs = [] + const items = parseItems(content, channel) + items.forEach(item => { + programs.push({ + title: item.title, + description: item.description, + rating: parseRating(item), + start: parseStart(item), + stop: parseStop(item) + }) + }) + + return programs + }, + async channels() { + let channels = [] + const cookies = await axios.get('https://www.directv.com.uy/guia/guia.aspx', { + headers: { + Accept: + 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8', + 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'Accept-Language': 'es-419,es;q=0.9', + 'Cache-Control': 'no-cache', + Connection: 'keep-alive', + Host: 'www.directv.com.ar', + Pragma: 'no-cache', + Referer: 'https://www.google.com/', + 'Sec-Fetch-Dest': 'document', + 'Sec-Fetch-Mode': 'navigate', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-Fetch-User': '?1', + 'Sec-GPC': 1, + 'Upgrade-Insecure-Requests': 1, + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', + 'sec-ch-ua': '"Not;A=Brand";v="99", "Brave";v="139", "Chromium";v="139"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"' + } + }) + const cookieHeader = cookies.headers['set-cookie'] + .map(cookie => cookie.split(';')[0]) + .join('; ') + + const date = dayjs().tz('America/Montevideo') + + const response = await axios + .post( + 'https://www.directv.com.uy/guia/guia.aspx/GetProgramming', + { + filterParam: { + day: date.date(), + time: date.hour(), + minute: 0, + month: date.month() + 1, + year: date.year(), + offSetValue: 0, + homeScreenFilter: '', + filtersScreenFilters: [''], + isHd: '' + } + }, + { + headers: { + Accept: '*/*', + 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'Accept-Language': 'es-419,es;q=0.9', + 'Cache-Control': 'no-cache', + Connection: 'keep-alive', + 'Content-Type': 'application/json; charset=UTF-8', + Cookie: cookieHeader, + Host: 'www.directv.com.ar', + Origin: 'https://www.directv.com.uy', + Pragma: 'no-cache', + Referer: 'https://www.directv.com.uy/guia/guia.aspx', + 'Sec-Fetch-Dest': 'empty', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Site': 'same-origin', + 'Sec-GPC': 1, + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36', + 'X-Requested-With': 'XMLHttpRequest', + 'sec-ch-ua': '"Not;A=Brand";v="99", "Brave";v="139", "Chromium";v="139"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + uzlc: true + } + } + ) + .then(r => r.data) + .catch(console.log) + + response.d.forEach(item => { + channels.push({ + site_id: `${item.ContentChannelID}#${item.ChannelName.replace(/&/g, '&')}`, + name: item.ChannelFullName, + logo: item.ImageUrl, + lang: 'es' + }) + }) + + return channels + } +} + +function parseRating(item) { + return item.rating + ? { + system: 'MPA', + value: item.rating + } + : null +} + +function parseStart(item) { + return dayjs.tz(item.startTimeString, 'M/D/YYYY h:mm:ss A', 'America/Montevideo') +} + +function parseStop(item) { + return dayjs.tz(item.endTimeString, 'M/D/YYYY h:mm:ss A', 'America/Montevideo') +} + +function parseItems(content, channel) { + if (!content) return [] + let [ChannelNumber, ChannelName] = channel.site_id.split('#') + ChannelName = ChannelName.replace('&', '&') + const data = JSON.parse(content) + if (!data || !Array.isArray(data.d)) return [] + const channelData = data.d.find( + c => c.ChannelNumber == ChannelNumber && c.ChannelName === ChannelName + ) + + return channelData && Array.isArray(channelData.ProgramList) ? channelData.ProgramList : [] +} diff --git a/sites/dishtv.in/dishtv.in.config.js b/sites/dishtv.in/dishtv.in.config.js index ea43b9c0..fd5fc6af 100644 --- a/sites/dishtv.in/dishtv.in.config.js +++ b/sites/dishtv.in/dishtv.in.config.js @@ -1,176 +1,177 @@ -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const tz = require('dayjs/plugin/timezone') -const timezone = 'Asia/Kolkata' - -dayjs.extend(utc) -dayjs.extend(tz) - -let authToken - -module.exports = { - site: 'dishtv.in', - days: 2, - url: 'https://epg.mysmartstick.com/dishtv/api/v1/epg/entities/programs', - request: { - method: 'POST', - async headers() { - await fetchToken() - - return { - Authorization: authToken - } - }, - data({ channel, date }) { - return { - allowPastEvents: true, - channelid: channel.site_id, - date: date.format('DD/MM/YYYY') - } - } - }, - parser: ({ content }) => { - const programs = [] - const items = parseItems(content) - items.forEach(item => { - programs.push({ - title: parseTitle(item), - description: parseDescription(item), - category: parseCategory(item), - actors: item.credits.actors, - directors: item.credits.directors, - producers: item.credits.producers, - date: item.productionyear, - icon: parseIcon(item), - image: parseImage(item), - episode: parseEpisode(item), - start: dayjs(item.start), - stop: dayjs(item.stop) - }) - }) - - return programs - }, - async channels() { - await fetchToken() - - const totalPages = await fetchPages() - - const queue = Array.from(Array(totalPages).keys()).map(i => { - const data = new FormData() - data.append('pageNum', i + 1) - data.append('date', dayjs.tz(dayjs(), timezone).format('DD/MM/YYYY')) - - return { - method: 'post', - url: 'https://www.dishtv.in/services/epg/channels', - data, - headers: { - 'authorization-token': authToken - } - } - }) - - const channels = [] - for (let item of queue) { - const data = await axios(item) - .then(r => r.data) - .catch(console.error) - - data.programDetailsByChannel.forEach(channel => { - channels.push({ - lang: 'en', - site_id: channel.channelid, - name: channel.channelname - }) - }) - } - - return channels - } -} - -function parseTitle(item) { - return Object.values(item.regional) - .map(region => ({ - lang: region.languagecode, - value: region.title - })) - .filter(i => Boolean(i.value)) -} - -function parseDescription(item) { - return Object.values(item.regional) - .map(region => ({ - lang: region.languagecode, - value: region.desc - })) - .filter(i => Boolean(i.value)) -} - -function parseCategory(item) { - return Object.values(item.regional) - .map(region => ({ - lang: region.languagecode, - value: region.genre - })) - .filter(i => Boolean(i.value)) -} - -function parseEpisode(item) { - return item['episode-num'] ? parseInt(item['episode-num']) : null -} - -function parseIcon(item) { - return item.programmeurl || null -} - -function parseImage(item) { - return item?.images?.landscape?.['1280x720'] ? item.images.landscape['1280x720'] : null -} - -function parseItems(content) { - try { - const data = JSON.parse(content) - - return Array.isArray(data) ? data : [] - } catch { - return [] - } -} - -async function fetchToken() { - if (authToken) return - - const data = await axios - .post('https://www.dishtv.in/services/epg/signin', null, { - headers: { - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - 'x-requested-with': 'XMLHttpRequest', - Referer: 'https://www.dishtv.in/channel-guide.html', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' - } - }) - .then(r => r.data) - .catch(console.error) - - authToken = data.token -} - -async function fetchPages() { - const formData = new FormData() - formData.append('pageNum', 1) - formData.append('date', dayjs.tz(dayjs(), timezone).format('DD/MM/YYYY')) - - const data = await axios - .post('https://www.dishtv.in/services/epg/channels', formData, { - headers: { 'authorization-token': authToken } - }) - .then(r => r.data) - .catch(console.error) - - return data.totalPages ? parseInt(data.totalPages) : 0 -} +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const tz = require('dayjs/plugin/timezone') +const timezone = 'Asia/Kolkata' + +dayjs.extend(utc) +dayjs.extend(tz) + +let authToken + +module.exports = { + site: 'dishtv.in', + days: 2, + url: 'https://epg.mysmartstick.com/dishtv/api/v1/epg/entities/programs', + request: { + method: 'POST', + async headers() { + await fetchToken() + + return { + Authorization: authToken + } + }, + data({ channel, date }) { + return { + allowPastEvents: true, + channelid: channel.site_id, + date: date.format('DD/MM/YYYY') + } + } + }, + parser: ({ content }) => { + const programs = [] + const items = parseItems(content) + items.forEach(item => { + programs.push({ + title: parseTitle(item), + description: parseDescription(item), + category: parseCategory(item), + actors: item.credits.actors, + directors: item.credits.directors, + producers: item.credits.producers, + date: item.productionyear, + icon: parseIcon(item), + image: parseImage(item), + episode: parseEpisode(item), + start: dayjs(item.start), + stop: dayjs(item.stop) + }) + }) + + return programs + }, + async channels() { + await fetchToken() + + const totalPages = await fetchPages() + + const queue = Array.from(Array(totalPages).keys()).map(i => { + const data = new FormData() + data.append('pageNum', i + 1) + data.append('date', dayjs.tz(dayjs(), timezone).format('DD/MM/YYYY')) + + return { + method: 'post', + url: 'https://www.dishtv.in/services/epg/channels', + data, + headers: { + 'authorization-token': authToken + } + } + }) + + const channels = [] + for (let item of queue) { + const data = await axios(item) + .then(r => r.data) + .catch(console.error) + + data.programDetailsByChannel.forEach(channel => { + channels.push({ + lang: 'en', + site_id: channel.channelid, + name: channel.channelname + }) + }) + } + + return channels + } +} + +function parseTitle(item) { + return Object.values(item.regional) + .map(region => ({ + lang: region.languagecode, + value: region.title + })) + .filter(i => Boolean(i.value)) +} + +function parseDescription(item) { + return Object.values(item.regional) + .map(region => ({ + lang: region.languagecode, + value: region.desc + })) + .filter(i => Boolean(i.value)) +} + +function parseCategory(item) { + return Object.values(item.regional) + .map(region => ({ + lang: region.languagecode, + value: region.genre + })) + .filter(i => Boolean(i.value)) +} + +function parseEpisode(item) { + return item['episode-num'] ? parseInt(item['episode-num']) : null +} + +function parseIcon(item) { + return item.programmeurl || null +} + +function parseImage(item) { + return item?.images?.landscape?.['1280x720'] ? item.images.landscape['1280x720'] : null +} + +function parseItems(content) { + try { + const data = JSON.parse(content) + + return Array.isArray(data) ? data : [] + } catch { + return [] + } +} + +async function fetchToken() { + if (authToken) return + + const data = await axios + .post('https://www.dishtv.in/services/epg/signin', null, { + headers: { + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-origin', + 'x-requested-with': 'XMLHttpRequest', + Referer: 'https://www.dishtv.in/channel-guide.html', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' + } + }) + .then(r => r.data) + .catch(console.error) + + authToken = data.token +} + +async function fetchPages() { + const formData = new FormData() + formData.append('pageNum', 1) + formData.append('date', dayjs.tz(dayjs(), timezone).format('DD/MM/YYYY')) + + const data = await axios + .post('https://www.dishtv.in/services/epg/channels', formData, { + headers: { 'authorization-token': authToken } + }) + .then(r => r.data) + .catch(console.error) + + return data.totalPages ? parseInt(data.totalPages) : 0 +} diff --git a/sites/dishtv.in/dishtv.in.test.js b/sites/dishtv.in/dishtv.in.test.js index 65e063ac..bf833b24 100644 --- a/sites/dishtv.in/dishtv.in.test.js +++ b/sites/dishtv.in/dishtv.in.test.js @@ -1,141 +1,142 @@ -const { parser, url, request } = require('./dishtv.in.config.js') -const fs = require('fs') -const path = require('path') -const axios = require('axios') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -jest.mock('axios') - -axios.post.mockImplementation((url, data, params) => { - if ( - url === 'https://www.dishtv.in/services/epg/signin' && - data === null && - JSON.stringify(params) === - JSON.stringify({ - headers: { - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - 'x-requested-with': 'XMLHttpRequest', - Referer: 'https://www.dishtv.in/channel-guide.html', - 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' - } - }) - ) { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/session.json')) - - return Promise.resolve({ - data: JSON.parse(content) - }) - } else { - return Promise.resolve({ - data: '' - }) - } -}) - -const date = dayjs.utc('2025-01-26', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: '142639', xmltv_id: 'AndpriveHD.in' } - -it('can generate valid url', () => { - expect(url).toBe('https://epg.mysmartstick.com/dishtv/api/v1/epg/entities/programs') -}) - -it('can generate valid request method', () => { - expect(request.method).toBe('POST') -}) - -it('can generate valid request headers', async () => { - expect(await request.headers()).toMatchObject({ - Authorization: - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRpZCI6ImRpc2h0di13ZWJzaXRlIiwicGxhdGZvcm0iOiJkaXNodHYiLCJpYXQiOjE3Mzc2ODIxNjEsImV4cCI6MTczNzc2ODU2MX0.sPrYfodVTbf1kJ-wGICDlnH-Yt3J0-mB-M2YROU8v2Q' - }) -}) - -it('can generate valid request data', () => { - expect(request.data({ channel, date })).toMatchObject({ - allowPastEvents: true, - channelid: '142639', - date: '26/01/2025' - }) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) - let results = parser({ content }) - results = results.map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(results.length).toBe(16) - expect(results[0]).toMatchObject({ - start: '2025-01-26T00:30:00.000Z', - stop: '2025-01-26T02:05:00.000Z', - title: [ - { lang: 'en', value: 'Train to Busan 2: Peninsula' }, - { lang: 'hi', value: 'ट्रेन टू बुसान 2: पेनीनसुला' }, - { lang: 'ta', value: 'ட்ரெயின் டு பூசன் ப்ரெசென்ட்ஸ்: பெனின்சுலா' }, - { lang: 'te', value: 'ట్రేన్ టు బూసాన్ ప్రజెంట్స్: పెనిన్సులా' } - ], - description: [ - { - lang: 'en', - value: - 'Jung Seok, a former soldier, along with his teammates, sets out on a mission to battle hordes of post-apocalyptic zombies in the Korean peninsula wastelands.' - }, - { - lang: 'hi', - value: - 'एक भूतपूर्व सैनिक जंग सोक अपने साथियों के साथ कोरियाई प्रायद्वीप के बंजर इलाकों में सर्वनाश के बाद की जोंबी से लड़ने के मिशन पर निकलता है।' - }, - { - lang: 'ta', - value: - 'கொரிய தீபகற்பத்தின் தரிசு நிலங்களில் அபோகாலிப்டிக் ஜாம்பிக்களின் கூட்டத்தை எதிர்த்து தன் குழுவுடன் போரிடும் ஜங் சியோக்.' - }, - { - lang: 'te', - value: - 'మాజీ సైనికుడు జంగ్ సియోక్ తన సహచరులతో కలిసి కొరియా ద్వీపకల్పంలో పోస్ట్-అపోకలిప్టిక్ జాంబీలతో యుద్దానికి సిద్దమవుతాడు.' - } - ], - category: [ - { lang: 'en', value: 'Film' }, - { lang: 'hi', value: 'फ़िल्म' }, - { lang: 'ta', value: '??????????' }, - { lang: 'te', value: 'సినిమా' }, - { lang: 'mr', value: 'चित्रपट' } - ], - actors: [ - 'Gang Dong-won', - 'Lee Jung-hyun', - 'Lee Re', - 'Kwon Hae-hyo', - 'John D. Michaels', - 'Kim Min-jae', - 'Kim Doyun', - 'Lee Ye-won', - 'Daniel Joey Albright', - 'Pierce Conran', - 'Geoffrey Giuliano', - 'Milan-Devi LaBrey' - ], - producers: [], - directors: ['Yeon Sang-ho'], - icon: 'https://dtil.tmsimg.com/assets/p17850257_v_h9_al.jpg?lock=880x660', - image: 'https://dtil.tmsimg.com/assets/p17850257_v_h8_am.jpg?lock=1280x720', - date: '2020' - }) -}) - -it('can handle empty guide', () => { - const results = parser({ content: '[]' }) - - expect(results).toMatchObject([]) -}) +const { parser, url, request } = require('./dishtv.in.config.js') +const fs = require('fs') +const path = require('path') +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +jest.mock('axios') + +axios.post.mockImplementation((url, data, params) => { + if ( + url === 'https://www.dishtv.in/services/epg/signin' && + data === null && + JSON.stringify(params) === + JSON.stringify({ + headers: { + 'sec-fetch-dest': 'empty', + 'sec-fetch-mode': 'cors', + 'sec-fetch-site': 'same-origin', + 'x-requested-with': 'XMLHttpRequest', + Referer: 'https://www.dishtv.in/channel-guide.html', + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' + } + }) + ) { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/session.json')) + + return Promise.resolve({ + data: JSON.parse(content) + }) + } else { + return Promise.resolve({ + data: '' + }) + } +}) + +const date = dayjs.utc('2025-01-26', 'YYYY-MM-DD').startOf('d') +const channel = { site_id: '142639', xmltv_id: 'AndpriveHD.in' } + +it('can generate valid url', () => { + expect(url).toBe('https://epg.mysmartstick.com/dishtv/api/v1/epg/entities/programs') +}) + +it('can generate valid request method', () => { + expect(request.method).toBe('POST') +}) + +it('can generate valid request headers', async () => { + expect(await request.headers()).toMatchObject({ + Authorization: + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRpZCI6ImRpc2h0di13ZWJzaXRlIiwicGxhdGZvcm0iOiJkaXNodHYiLCJpYXQiOjE3Mzc2ODIxNjEsImV4cCI6MTczNzc2ODU2MX0.sPrYfodVTbf1kJ-wGICDlnH-Yt3J0-mB-M2YROU8v2Q' + }) +}) + +it('can generate valid request data', () => { + expect(request.data({ channel, date })).toMatchObject({ + allowPastEvents: true, + channelid: '142639', + date: '26/01/2025' + }) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) + let results = parser({ content }) + results = results.map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(16) + expect(results[0]).toMatchObject({ + start: '2025-01-26T00:30:00.000Z', + stop: '2025-01-26T02:05:00.000Z', + title: [ + { lang: 'en', value: 'Train to Busan 2: Peninsula' }, + { lang: 'hi', value: 'ट्रेन टू बुसान 2: पेनीनसुला' }, + { lang: 'ta', value: 'ட்ரெயின் டு பூசன் ப்ரெசென்ட்ஸ்: பெனின்சுலா' }, + { lang: 'te', value: 'ట్రేన్ టు బూసాన్ ప్రజెంట్స్: పెనిన్సులా' } + ], + description: [ + { + lang: 'en', + value: + 'Jung Seok, a former soldier, along with his teammates, sets out on a mission to battle hordes of post-apocalyptic zombies in the Korean peninsula wastelands.' + }, + { + lang: 'hi', + value: + 'एक भूतपूर्व सैनिक जंग सोक अपने साथियों के साथ कोरियाई प्रायद्वीप के बंजर इलाकों में सर्वनाश के बाद की जोंबी से लड़ने के मिशन पर निकलता है।' + }, + { + lang: 'ta', + value: + 'கொரிய தீபகற்பத்தின் தரிசு நிலங்களில் அபோகாலிப்டிக் ஜாம்பிக்களின் கூட்டத்தை எதிர்த்து தன் குழுவுடன் போரிடும் ஜங் சியோக்.' + }, + { + lang: 'te', + value: + 'మాజీ సైనికుడు జంగ్ సియోక్ తన సహచరులతో కలిసి కొరియా ద్వీపకల్పంలో పోస్ట్-అపోకలిప్టిక్ జాంబీలతో యుద్దానికి సిద్దమవుతాడు.' + } + ], + category: [ + { lang: 'en', value: 'Film' }, + { lang: 'hi', value: 'फ़िल्म' }, + { lang: 'ta', value: '??????????' }, + { lang: 'te', value: 'సినిమా' }, + { lang: 'mr', value: 'चित्रपट' } + ], + actors: [ + 'Gang Dong-won', + 'Lee Jung-hyun', + 'Lee Re', + 'Kwon Hae-hyo', + 'John D. Michaels', + 'Kim Min-jae', + 'Kim Doyun', + 'Lee Ye-won', + 'Daniel Joey Albright', + 'Pierce Conran', + 'Geoffrey Giuliano', + 'Milan-Devi LaBrey' + ], + producers: [], + directors: ['Yeon Sang-ho'], + icon: 'https://dtil.tmsimg.com/assets/p17850257_v_h9_al.jpg?lock=880x660', + image: 'https://dtil.tmsimg.com/assets/p17850257_v_h8_am.jpg?lock=1280x720', + date: '2020' + }) +}) + +it('can handle empty guide', () => { + const results = parser({ content: '[]' }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/dtv8.net/dtv8.net.config.js b/sites/dtv8.net/dtv8.net.config.js index 3abb8482..76b61b36 100644 --- a/sites/dtv8.net/dtv8.net.config.js +++ b/sites/dtv8.net/dtv8.net.config.js @@ -1,87 +1,87 @@ -const cheerio = require('cheerio') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') - -dayjs.extend(utc) -dayjs.extend(timezone) -dayjs.extend(customParseFormat) - -module.exports = { - site: 'dtv8.net', - days: 2, - url({ date }) { - const day = date.format('dddd') - - return `https://dtv8.net/tv-listings/${day.toLowerCase()}/` - }, - parser({ content, date }) { - let programs = [] - - const items = parseItems(content) - items.forEach(item => { - const $item = cheerio.load(item) - let prev = programs[programs.length - 1] - let start = parseStart($item, date) - if (prev) { - if (start < prev.start) { - start = start.add(1, 'd') - date = date.add(1, 'd') - } - prev.stop = start - } - const stop = start.add(30, 'm') - - programs.push({ - title: parseTitle($item), - description: parseDescription($item), - image: parseImage($item), - start, - stop - }) - }) - - return programs - } -} - -function parseTitle($item) { - return $item( - 'td:nth-child(2) > strong:nth-child(1),td:nth-child(2) > span > strong,td:nth-child(2) > span > b' - ).text() -} - -function parseDescription($item) { - return ( - $item( - 'td:nth-child(2) > strong:nth-child(3) > span,td:nth-child(2) > p:nth-child(3) > strong > span' - ).text() || null - ) -} - -function parseImage($item) { - return $item('td:nth-child(1) > img.size-full').attr('src') || null -} - -function parseStart($item, date) { - const time = $item('td:nth-child(1)').text() - - return dayjs.tz( - `${date.format('YYYY-MM-DD')} ${time}`, - 'YYYY-MM-DD HH:mm [hrs.]', - 'America/Guyana' - ) -} - -function parseItems(content) { - const $ = cheerio.load(content) - - return $('table tr') - .filter((i, el) => { - const firstColumn = $(el).find('td').text() - - return Boolean(firstColumn) && !firstColumn.includes('Time') - }) - .toArray() -} +const cheerio = require('cheerio') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') + +dayjs.extend(utc) +dayjs.extend(timezone) +dayjs.extend(customParseFormat) + +module.exports = { + site: 'dtv8.net', + days: 2, + url({ date }) { + const day = date.format('dddd') + + return `https://dtv8.net/tv-listings/${day.toLowerCase()}/` + }, + parser({ content, date }) { + let programs = [] + + const items = parseItems(content) + items.forEach(item => { + const $item = cheerio.load(item) + let prev = programs[programs.length - 1] + let start = parseStart($item, date) + if (prev) { + if (start < prev.start) { + start = start.add(1, 'd') + date = date.add(1, 'd') + } + prev.stop = start + } + const stop = start.add(30, 'm') + + programs.push({ + title: parseTitle($item), + description: parseDescription($item), + image: parseImage($item), + start, + stop + }) + }) + + return programs + } +} + +function parseTitle($item) { + return $item( + 'td:nth-child(2) > strong:nth-child(1),td:nth-child(2) > span > strong,td:nth-child(2) > span > b' + ).text() +} + +function parseDescription($item) { + return ( + $item( + 'td:nth-child(2) > strong:nth-child(3) > span,td:nth-child(2) > p:nth-child(3) > strong > span' + ).text() || null + ) +} + +function parseImage($item) { + return $item('td:nth-child(1) > img.size-full').attr('src') || null +} + +function parseStart($item, date) { + const time = $item('td:nth-child(1)').text() + + return dayjs.tz( + `${date.format('YYYY-MM-DD')} ${time}`, + 'YYYY-MM-DD HH:mm [hrs.]', + 'America/Guyana' + ) +} + +function parseItems(content) { + const $ = cheerio.load(content) + + return $('table tr') + .filter((i, el) => { + const firstColumn = $(el).find('td').text() + + return Boolean(firstColumn) && !firstColumn.includes('Time') + }) + .toArray() +} diff --git a/sites/elcinema.com/elcinema.com.config.js b/sites/elcinema.com/elcinema.com.config.js index ed8453b9..154b235c 100644 --- a/sites/elcinema.com/elcinema.com.config.js +++ b/sites/elcinema.com/elcinema.com.config.js @@ -1,154 +1,155 @@ -const cheerio = require('cheerio') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const customParseFormat = require('dayjs/plugin/customParseFormat') -require('dayjs/locale/ar') - -dayjs.extend(customParseFormat) -dayjs.extend(timezone) -dayjs.extend(utc) - -const headers = { - 'User-Agent': -'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0' } - -module.exports = { - site: 'elcinema.com', - days: 2, - request: { headers }, - url({ channel }) { - const lang = channel.lang === 'en' ? 'en/' : '/' - - return `https://elcinema.com/${lang}tvguide/${channel.site_id}/` - }, - parser({ content, channel, date }) { - const programs = [] - const items = parseItems(content, channel, date) - items.forEach(item => { - const start = parseStart(item, date) - const duration = parseDuration(item) - const stop = start.add(duration, 'm') - programs.push({ - title: parseTitle(item), - description: parseDescription(item), - category: parseCategory(item), - image: parseImage(item), - start, - stop - }) - }) - - return programs - }, - async channels({ lang }) { - const axios = require('axios') - let data = '' - try { - const res = await axios.get(`https://elcinema.com/${lang}/tvguide/`, { - headers: headers - }) - data = res && res.data ? res.data : '' - } catch (err) { - console.log(err) - return [] - } - - const $ = cheerio.load(data) - - return $('.tv-line') - .map((_, el) => { - const link = $(el).find('.channel > div > div.hide-for-small-only > a') - const name = $(link).text() - const href = $(link).attr('href') || '' - const match = href.match(/\/(\d+)\/$/) - const site_id = match ? match[1] : null - - return { - lang, - site_id, - name - } - }) - .get() - } -} - -function parseImage(item) { - const $ = cheerio.load(item) - const imgSrc = - $('.row > div.columns.small-3.large-1 > a > img').data('src') || - $('.row > div.columns.small-5.large-1 > img').data('src') - - return imgSrc || null -} - -function parseCategory(item) { - const $ = cheerio.load(item) - const category = $('.row > div.columns.small-6.large-3 > ul > li:nth-child(2)').text() - - return category.replace(/\(\d+\)/, '').trim() || null -} - -function parseDuration(item) { - const $ = cheerio.load(item) - const duration = - $('.row > div.columns.small-3.large-2 > ul > li:nth-child(2) > span').text() || - $('.row > div.columns.small-7.large-11 > ul > li:nth-child(2) > span').text() - - return duration.replace(/\D/g, '') || '' -} - -function parseStart(item, initDate) { - const $ = cheerio.load(item) - let time = - $('.row > div.columns.small-3.large-2 > ul > li:nth-child(1)').text() || - $('.row > div.columns.small-7.large-11 > ul > li:nth-child(2)').text() || - '' - - time = time - .replace(/\[.*\]/, '') - .replace('مساءً', 'PM') - .replace('صباحًا', 'AM') - .trim() - - time = `${initDate.format('YYYY-MM-DD')} ${time}` - - return dayjs.tz(time, 'YYYY-MM-DD hh:mm A', dayjs.tz.guess()) -} - -function parseTitle(item) { - const $ = cheerio.load(item) - - return ( - $('.row > div.columns.small-6.large-3 > ul > li:nth-child(1) > a').text() || - $('.row > div.columns.small-7.large-11 > ul > li:nth-child(1)').text() || - null - ) -} - -function parseDescription(item) { - const $ = cheerio.load(item) - const excerpt = $('.row > div.columns.small-12.large-6 > ul > li:nth-child(3)').text() || '' - - return excerpt.replace('...اقرأ المزيد', '').replace('...Read more', '') -} - -function parseItems(content, channel, date) { - const $ = cheerio.load(content) - - const dateString = date.locale(channel.lang).format('dddd D') - - const list = $('.dates') - .filter((i, el) => { - let parsedDateString = $(el).text().trim() - parsedDateString = parsedDateString.replace(/\s\s+/g, ' ') - - return parsedDateString.includes(dateString) - }) - .first() - .parent() - .next() - - return $('.padded-half', list).toArray() -} +const cheerio = require('cheerio') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') +require('dayjs/locale/ar') + +dayjs.extend(customParseFormat) +dayjs.extend(timezone) +dayjs.extend(utc) + +const headers = { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0' +} + +module.exports = { + site: 'elcinema.com', + days: 2, + request: { headers }, + url({ channel }) { + const lang = channel.lang === 'en' ? 'en/' : '/' + + return `https://elcinema.com/${lang}tvguide/${channel.site_id}/` + }, + parser({ content, channel, date }) { + const programs = [] + const items = parseItems(content, channel, date) + items.forEach(item => { + const start = parseStart(item, date) + const duration = parseDuration(item) + const stop = start.add(duration, 'm') + programs.push({ + title: parseTitle(item), + description: parseDescription(item), + category: parseCategory(item), + image: parseImage(item), + start, + stop + }) + }) + + return programs + }, + async channels({ lang }) { + const axios = require('axios') + let data = '' + try { + const res = await axios.get(`https://elcinema.com/${lang}/tvguide/`, { + headers: headers + }) + data = res && res.data ? res.data : '' + } catch (err) { + console.log(err) + return [] + } + + const $ = cheerio.load(data) + + return $('.tv-line') + .map((_, el) => { + const link = $(el).find('.channel > div > div.hide-for-small-only > a') + const name = $(link).text() + const href = $(link).attr('href') || '' + const match = href.match(/\/(\d+)\/$/) + const site_id = match ? match[1] : null + + return { + lang, + site_id, + name + } + }) + .get() + } +} + +function parseImage(item) { + const $ = cheerio.load(item) + const imgSrc = + $('.row > div.columns.small-3.large-1 > a > img').data('src') || + $('.row > div.columns.small-5.large-1 > img').data('src') + + return imgSrc || null +} + +function parseCategory(item) { + const $ = cheerio.load(item) + const category = $('.row > div.columns.small-6.large-3 > ul > li:nth-child(2)').text() + + return category.replace(/\(\d+\)/, '').trim() || null +} + +function parseDuration(item) { + const $ = cheerio.load(item) + const duration = + $('.row > div.columns.small-3.large-2 > ul > li:nth-child(2) > span').text() || + $('.row > div.columns.small-7.large-11 > ul > li:nth-child(2) > span').text() + + return duration.replace(/\D/g, '') || '' +} + +function parseStart(item, initDate) { + const $ = cheerio.load(item) + let time = + $('.row > div.columns.small-3.large-2 > ul > li:nth-child(1)').text() || + $('.row > div.columns.small-7.large-11 > ul > li:nth-child(2)').text() || + '' + + time = time + .replace(/\[.*\]/, '') + .replace('مساءً', 'PM') + .replace('صباحًا', 'AM') + .trim() + + time = `${initDate.format('YYYY-MM-DD')} ${time}` + + return dayjs.tz(time, 'YYYY-MM-DD hh:mm A', dayjs.tz.guess()) +} + +function parseTitle(item) { + const $ = cheerio.load(item) + + return ( + $('.row > div.columns.small-6.large-3 > ul > li:nth-child(1) > a').text() || + $('.row > div.columns.small-7.large-11 > ul > li:nth-child(1)').text() || + null + ) +} + +function parseDescription(item) { + const $ = cheerio.load(item) + const excerpt = $('.row > div.columns.small-12.large-6 > ul > li:nth-child(3)').text() || '' + + return excerpt.replace('...اقرأ المزيد', '').replace('...Read more', '') +} + +function parseItems(content, channel, date) { + const $ = cheerio.load(content) + + const dateString = date.locale(channel.lang).format('dddd D') + + const list = $('.dates') + .filter((i, el) => { + let parsedDateString = $(el).text().trim() + parsedDateString = parsedDateString.replace(/\s\s+/g, ' ') + + return parsedDateString.includes(dateString) + }) + .first() + .parent() + .next() + + return $('.padded-half', list).toArray() +} diff --git a/sites/epg.112114.xyz/epg.112114.xyz.config.js b/sites/epg.112114.xyz/epg.112114.xyz.config.js index 469a89cd..c87ae693 100644 --- a/sites/epg.112114.xyz/epg.112114.xyz.config.js +++ b/sites/epg.112114.xyz/epg.112114.xyz.config.js @@ -1,54 +1,57 @@ -const axios = require('axios') -const parser = require('epg-parser') - -module.exports = { - site: 'epg.112114.xyz', - days: 1, - url: 'https://epg.112114.xyz/pp.xml', - request: { - cache: { - ttl: 24 * 60 * 60 * 1000 // 1 day - } - }, - parser: function ({ content, channel, date }) { - let programs = [] - const items = parseItems(content, channel, date) - items.forEach(item => { - programs.push({ - title: item.title?.[0]?.value, - start: item.start, - stop: item.stop - }) - }) - - return programs - }, - async channels() { - const data = await axios - .get('https://epg.112114.xyz/pp.xml') - .then(r => r.data) - .catch(e => { console.log(e); return null }) - if (!data) return [] - - const { channels = [] } = parser.parse(data) - - const seen = new Set() - return channels - .filter(ch => { - if (seen.has(ch.id)) return false - seen.add(ch.id) - return true - }) - .map(channel => ({ - lang: 'zh', - site_id: channel.id, - name: channel.displayName?.[0]?.value || '' - })) - } -} - -function parseItems(content, channel, date) { - const { programs } = parser.parse(content) - - return programs.filter(p => p.channel === channel.site_id && date.isSame(p.start, 'day')) -} +const axios = require('axios') +const parser = require('epg-parser') + +module.exports = { + site: 'epg.112114.xyz', + days: 1, + url: 'https://epg.112114.xyz/pp.xml', + request: { + cache: { + ttl: 24 * 60 * 60 * 1000 // 1 day + } + }, + parser: function ({ content, channel, date }) { + let programs = [] + const items = parseItems(content, channel, date) + items.forEach(item => { + programs.push({ + title: item.title?.[0]?.value, + start: item.start, + stop: item.stop + }) + }) + + return programs + }, + async channels() { + const data = await axios + .get('https://epg.112114.xyz/pp.xml') + .then(r => r.data) + .catch(e => { + console.log(e) + return null + }) + if (!data) return [] + + const { channels = [] } = parser.parse(data) + + const seen = new Set() + return channels + .filter(ch => { + if (seen.has(ch.id)) return false + seen.add(ch.id) + return true + }) + .map(channel => ({ + lang: 'zh', + site_id: channel.id, + name: channel.displayName?.[0]?.value || '' + })) + } +} + +function parseItems(content, channel, date) { + const { programs } = parser.parse(content) + + return programs.filter(p => p.channel === channel.site_id && date.isSame(p.start, 'day')) +} diff --git a/sites/epg.iptvx.one/epg.iptvx.one.channels.xml b/sites/epg.iptvx.one/epg.iptvx.one.channels.xml index a4212f83..651740f7 100644 --- a/sites/epg.iptvx.one/epg.iptvx.one.channels.xml +++ b/sites/epg.iptvx.one/epg.iptvx.one.channels.xml @@ -1,3332 +1,3332 @@ - - - Горящий камин - 1HD Music - Первый областной Благовещенск - ТВ2 Могилёв - 2x2 (+2) - 2x2 (+4) - 2x2 (+7) - TV3 Gold [EE] - 3+ (Латвия) - 4fun - 4fun Fit&Dance - 4fun Kids - 4K Русское кино - 4 канал (Екатеринбург) - 5 TV [AM] - 5 канал (Таганрог) - 5 канал (Караганда) - Пятый канал +2 - Пятый канал +4 - Пятый канал +7 - 5 канал (Україна) - 5Sport Gold - 5Sport Live - 5Sport Plus - 5Sport Stars - 6 канал (Владимир) - 6 ТВ - 7 канал (Нефтеюганск) - 7 канал (Красноярск) - 7 канал (Казахстан) - 8 канал Беларусь - 8 канал (Красноярский край) - 8 канал (Новосибирск) - 8TV [LV] - 8 канал (Владивосток) - 9 канал (Израиль) - 10 канал / РенТВ Саранск - Десятка (Новокузнецк) - 11 канал Днепр - 11 канал (Усолье) - 12 канал Омск - 13 Ulica [PL] - 21 канал (Ужгород) - 24 [UA] - 25 регион (Владивосток) - 26 регион - 31 канал (Челябинск) - 31 канал (Казахстан) - 36,6 TV - 41 регион (Петропавловск-Камчатский) - 43 канал (Туапсе) - 49 канал - UA:Дніпро - 77TV - 86 Сургут - 360° International - 360TV (Латвия) - 360° Подмосковье - A2 HD [TR] - A Haber HD - A News HD - A Para HD - A Spor HD - Абакан 24 - ACC Network [US] - Ачинское телевидение - Active Family [PL] - Adventure in 90's - Adventure [PL] - Афонтово Красноярск - Айғак - Аист - AIVA - Актис - Аква ТВ - Al Jazeera International - Алау - Ale Kino+ HD - Алматы - AMC - A HOME OF HBO 1 - A HOME OF HBO 2 - Angel TV - Animal Planet HD - Animal Planet [PL] - Animaux - Funny Kids - Anime TV - Antena 1 RO - Анжерское ТВ - Апостроф TV - Аппетитный - Aquarium 4K - Arena4 [HU] - Arena Adrenalin [RS] - Arena Esport [RS] - Arena Fight HD - Arena Premium 1 - Arena Premium 2 - Arena Premium 3 - Arena Sport 1 HD [RS] - Arena Sport 1 [HR] - Arena Sport 1 [SK] - Arena Sport 1 [SI] - Arena Sport 2 HD [RS] - Arena Sport 2 [HR] - Arena Sport 2 [SK] - Arena Sport 2 [SI] - Arena Sport 3 HD [RS] - Arena Sport 3 [HR] - Arena Sport 3 [SI] - Arena Sport 4 HD [RS] - Arena Sport 4 [HR] - Arena Sport 4 [SI] - Arena Sport 5 HD [RS] - Arena Sport 5 [HR] - Arena Sport 6 HD [RS] - Arena Sport 6 [HR] - Arena Sport 7 HD [RS] - Arena Sport 7 [HR] - Arena Sport 8 HD [RS] - Arena Sport 8 [HR] - Arena Sport 9 [HR] - Arena Sport 9 [RS] - Arena Sport 10 [HR] - Arena Sport 10 [RS] - Arena Tenis [RS] - Ариг Ус 24 HD - Arirang - Арктик-TV - Арктика 24 - Армения ТВ - Armnews [AM] - Арт - Arte HD - ARTN - Астана - Астрахань Live - Astro Arena 1 HD - Astro Arena 2 HD - Astro Arena Bola 1 - Astro Arena Bola 2 - Astro Badminton - Astro Sports Plus - Astro Premier League HD - Astro Premier League 2 HD - Astro Grandstand HD - Astro Football HD - Astro Sports UHD - АСТВ Южно-Сахалинск - Асыл Арна - ATV Армения - ATV HD [TR] - АТВ-Медиа - АТВ-Ставрополь - Auto Moto Sport Channel [DE] - AXN Black HD - AXN HD - AXN Spin HD - AXN White HD - AzTV - Babes TV - Baby TV - Балашиха ТВ - Балет Опера - Balkanika - Balticum Platinum - Balticum HD - Barely Legal - Barely Legal Украина - Барс - Батайск ТВ - BBC - BBC America [US] - BBC Brit [PL] - BBC CBeebies [PL] - BBC Earth [PL] - BBC First [PL] - BBC Four [UK] - BBC Lifestyle [PL] - BCU Action HD - BCU Catastrophe HD - BCU Cinema HD - BCU Cinema+ HD - BCU Comedy HD - BCU Cosmo HD - BCU Cosmo HDR - BCU Criminal HD - BCU Fantastic HD - BCU FilMystic HD - BCU History HD - BCU Kids HD - BCU Kids 4K - BCU Kids+ HD - BCU Kinorating HD - BCU Кинозал Premiere 1 HD - BCU Кинозал Premiere 2 HD - BCU Кинозал Premiere 3 HD - BCU Little HD - BCU Marvel HD - BCU Premium Marvel 4K HDR - BCU Kinozakaz - BCUMedia Premium 4K HDR - BCU Мультсериал HD - BCU Premiere HD - BCU Premiere Ultra 4K - BCU Premium Action 4K HDR - BCU Premium Comedy 4K HDR - BCU Premium Crime 4K HDR - BCU Premium Fantastic 4K HDR - BCU Premium Franchise 4K HDR - BCU Premium History 4K HDR - BCU Premium Horror 4K HDR - BCU Premium Kids 4K HDR - BCU Premium Kinozakaz 4K HDR - BCU Premium Kinozakaz+ 4K HDR - BCU Premium 80 лет Победы 4K HDR - BCU Premium Premiere 4K HDR - BCU Premium Premiere+ 4K HDR - BCU Premium Russian 4K HDR - BCU Premium СССР 4K HDR - BCU Reality HD - BCU Romantic HD - BCU RUSerial HD - BCU Russia 90s - BCU Russian HD - BCU Кинозал СССР - BCU СССР HDR - BCU Stars HD - BCU Survival HD - BCU Сваты HD - BCU Сваты 4K - BCU TruMotion HD - BCU Ultra 4K - BCU VHS HD - beIN Sports 1 [FR] - beIN Sports 2 [FR] - beIN Sports 3 [FR] - beIN Sports 1 [UK] - beIN Sports 1 Singapore - beIN Sports 1 [TR] - beIN Sports 2 [UK] - beIN Sports 2 Singapore - beIN Sports 2 [TR] - beIN Sports 3 Singapore - beIN Sports 3 [TR] - beIN Sports 4 [TR] - beIN Sports 4K - beIN Sports 5 [TR] - beIN Sports FTA - beIN Sports Haber [TR] - beIN Sports Max 1 [TR] - beIN Sports Max 2 [TR] - beIN Sports Xtra [US] - Беларусь 1 HD - Беларусь 2 HD - Беларусь 3 HD - Беларусь 4 Брест - Беларусь 4 Гомель - Беларусь 4 Гродно - Беларусь 4 Могилев - Беларусь 4 Витебск - Беларусь 5 HD - Беларусь 5 Интернет - Беларусь-24 - МузТВ Беларусь - BelSat - Белвиасат +ТВ - Best4Sport TV - Best4Sport 2 - BET Gospel [US] - BET Her [US] - BET Jams [US] - BET Soul [US] - Beyaz TV HD TR - BG Music Channel - Big Ten Network [US] - Бiгудi - Бийское ТВ - Блокбастер HD - Bloomberg - Bloomberg HT TR - Blue Hustler 24 - Blue Hustler Украина - Bolajon Telekanali [UZ] - Большой эфир - Bolt Россия - Boomerang - BOX Anime HD - BOX Apocalypse HD - BOX AutoTrend HD - BOX Be ON Edge HD - BOX Be ON Edge 1 Live HD - BOX Be ON Edge 2 Live HD - BOX Be ON Edge 3 Live HD - BOX Cyber HD - BOX Docu. HD - BOX Fantasy HD - BOX Franchise HD - BOX Franchise HDR - BOX Game HD - BOX Gangster HD - BOX Ghost HD - BOX Gurman HD - BOX History 4K - BOX Hybrid HD - BOX Kosmo 4K - BOX LoFi HD - BOX M.Serial HD - BOX Memory HD - BOX Metall HD - BOX Music 4K - Box Music TV BG - BOX Mayday HD - BOX Oscar HD - BOX Premiere+ 4K HDR - BOX Relax 4K - BOX Remast 4K - BOX Remast+ 4K - BOX RU.RAP HD - BOX Russian 4K - BOX Serial HD - BOX Serial 4K - BOX Serial Premiere 4K - BOX Sitcom HD - BOX Sport 1 Live HD - BOX Sport 2 Live HD - BOX Sport 3 Live HD - BOX Sport 4 Live HD - BOX Sport 5 Live HD - BOX Sport 6 Live HD - BOX Sport 7 Live HD - BOX Sport 8 Live HD - BOX Sport 9 Live HD - BOX Sport 10 Live 4K - BOX Sport 11 Live 4K - BOX SportCast HD - BOX SportCast Live 1 HD - BOX SportCast Live 2 HD - BOX SportCast Live 3 HD - BOX SportCast Live 4 HD - BOX SportCast Live 5 HD - BOX SportCast Live 6 HD - BOX SportCast Live 7 HD - BOX SportCast Live 8 HD - BOX SportCast Live 9 HD - BOX Spy HD - BOX SR Sport 2 Live 4K HDR - BOX SR Sport 3 Live 4K HDR - BOX SR Sport 4 Live 4K HDR - BOX SR Sport 4K HDR - BOX SR Sport 1 Live 4K HDR - BOX СССР 4K - BOX Stories HD - BOX Travel HD - BOX Travel Premiere HD - BOX UltraStars 4K - BOX Western HD - BOX Zombie HD - Brazzers TV - Brazzers TV Россия - Брянск 24 - Брянская Губерния - Bridge TV Deluxe - Bridge TV - Bridge TV Classic - Bridge TV Hits - Bridge TV Этно - Bridge TV Фрэш - Bridge TV Rock - Bridge TV Русский хит - Bridge TV Шлягер - БСТ Братск - BT Sport 1 HD - BT Sport 2 HD - BT Sport 3 HD - BT Sport 4 HD - BT Sport 5 HD - BT Sport 6 HD - BT Sport 7 HD - BT Sport 8 HD - BT Sport 9 HD - BT Sports 10 HD - BT Sport 4K - БТВ - Буряад ТВ - C-Cartoon - C-Comedy - C-History - C-Holiday - C-Inquest - Citrus Live HD - C-Marvel - Canal 11 [PT] - Canal+ 1 HD - Canal+ 4K - Canal+ Dokument HD - Canal+ Domo HD - Canal+ Extra 1 [PL] - Canal+ Extra 2 [PL] - Canal+ Extra 3 [PL] - Canal+ Extra 4 [PL] - Canal+ Extra 5 [PL] - Canal+ Extra 6 [PL] - Canal+ Extra 7 [PL] - Canal+ 360 [PL] - Canal+ Film HD - Canal+ Foot [FR] - Canal+ Kuchnia HD - Canal+ Premier League [FR] - Canal+ Premium HD - Canal+ Seriale HD - Canal+ Sport 2 [CZ] - Canal+ Sport 360 [FR] - Canal+ Sport 1 [PL] - Canal+ Sport 2 [PL] - Canal+ Sport 3 [PL] - Canal+ Sport 4 [PL] - Canal+ Sport 5 [PL] - Canal+ Sport [CZ] - Canal+ Sport [FR] - Candy - CandyMan - Cartoon Classics - Cartoons 90 - Cartoons Big - Cartoons Short - CCTV4 - CCTV-Русский - ЦТ - Channel 11 IL - Channel 12 IL - Channel 13 IL - Чаваш ЕН - Че - Че +2 - Че +4 - Че +7 - Чемодан - CI Polsat - Cine+ Legend HD - Cine+ Mix - Cinema Cosmos TV - Cinema 1 MD - CineMan - CineMan Action - CineMan Air Crash - CineMan Комедия - CineMan Фитнес - CineMan Криминальные Сериалы - CineMan Катастрофы - CineMan Kids 4K - CineMan Комедийные сериалы - CineMan Лесник - CineMan Marvel - CineMan Melodrama - CineMan MiniSeries - CineMan Ментовские Войны - CineMan OLD 4K - CineMan ПёС + Лихач - CineMan Premium - CineMan Relax 4K - CineMan РуКино - CineMan Симпсоны - CineMan Скорая помощь - CineMan CCCP 4K - CineMan CCCP FHD - CineMan Сваты - CineMan Thriller - CineMan Top - CineMan Ужасы - CineMan VHS - CineMan Военные Сериалы - Cinemax 2 - City TV [BG] - СК1 - Clarity4K Anime - Clarity4K Asia - Clarity4K Авто Блог - Clarity4K Боевик - Clarity4K Боевик VHS - Clarity4K HDR Cinema MIX 1 - Clarity4K HDR Cinema MIX 2 - Clarity4K HDR Cinema MIX 3 - Clarity4K HDR Cinema MIX 4 - Clarity4K HDR Cinema MIX 5 - Clarity4K HDR Cinema MIX 6 - Clarity4K HDR Cinema MIX 7 - Clarity4K HDR Cinema MIX 8 - Clarity4K HDR Cinema MIX 9 - Clarity4K HDR Cinema MIX 10 - Clarity4K Комедия VHS - Clarity4K Драмы - Clarity4K Единоборства - Clarity4K Фантастика - Clarity4K Фантастика (siries) - Clarity4K Фэнтези - Clarity4K Galaxy Films - Clarity4K Gamefilm - Clarity4K HBO series - Clarity4K Ужасы VHS - Clarity4K Kинодети CССР - Clarity4K КиноФраншизы - Clarity4K КиноНовинки - Clarity4K КиноШарм - Clarity4K Комедия - Clarity4K Комедия СССР 1 - Clarity4K Комедия СССР 2 - Clarity4K Космомир - Clarity4K Космомир 2 - Clarity4K Marvel - Clarity4K Молодежные комедии - Clarity4K Мультимир - Clarity4K Мультляндия - Clarity4K Наше кино - Clarity4K Netflix - Clarity4K Приключения - Clarity4K Travel Blog - Clarity4К Города - Clarity4K Ретро-Сказка 1 - Clarity4K Ретро-Сказка 2 - Clarity4K Русские сериалы - Clarity4K КиноСССР - Clarity4K Семейный - Clarity4K Сумеречный Эфир - Clarity4K Театр - Clarity4K Триллер - Clarity4K UFO - Clarity4K Вселенная - Clarity4K Ужасы - Clarity4K Ужасы VHS (siries) - Clarity4K Walt Disney - Clarity4K Классика кино - Clarity4K Запал - Clarity4K Звериный мир - Clubland UK - C More Mix HD - CNBC - GNC Европа - GNC Сибирь - CNN TÜRK HD - Comedy Stage - Comedy Hub - Courtside 1891 - Crime Golden - Crime Today - ČT4 Sport - Curiosity Stream - D1 - Da Vinci Learning Europe - Дайвинг.TV - DAZN 1 [ES] - DAZN 2 [ES] - DAZN F1 [ES] - DAZN 1 HD - DAZN 2 HD - Deejay TV [IT] - Delfi.TV - Deluxe Music [DE] - DetectiveJam - Детское кино (TvikselTV) - Детское кино International - Детское кино - Deutsche Welle Europe - Deutsche Welle Russia - Девятка ТВ - Девон-Инфо - Digi 4K [RO] - Digital Desire HD - DIGI World RO - Дикий HD - Discovery Channel [PL] - Discovery Historia [PL] - Discovery Life [PL] - Discovery Science [PL] - Disney - Disney Channel [PL] - Disney Junior [PL] - Disney XD [PL] - DiviSport - DMAX HD TR - ДнiпроTV - DocuBox HD - Домашний +2 - Домашний +4 - Домашний +7 - Дом кино International - Домашний Очаг [KZ] - Домодедово - Dorcel - Достық [KZ] - Доверие - Dream Türk [TR] - DSTV [BG] - DTX [PL] - ДумаТВ - Duo 5 LV - Duo 7 [EE] - Duo 7 [LV] - Duo One [EE] - Душевное SD - Душевное HD - Дзержинск ТВ - E! Entertainment [PL] - Телеканал Е HD - EarthTV The World Live - Эх! - Эхо TV - Эхо ТВ 24 - Еда Премиум Int. HD - Edge Sport HD DE - Эфир - ЕГЭ - Эко-ТВ - DAZN 1 PT - DAZN 2 PT - DAZN 3 PT - DAZN 4 PT - DAZN 5 PT - DAZN 6 PT - Eleven Sports 1 [PL] - Eleven Sports 2 [PL] - Eleven Sports 3 [PL] - Eleven Sports 4 [PL] - Енисей регион - Enter-фильм - Epic - eQtv - Эра - Еркир Медия (Армения) - EroLuxe 4k - EroLuxe 4k60fps - EroLuxe 60fps - EroLuxe Anal - EroLuxe Asian - EroLuxe Babysitter - EroLuxe BBW - EroLuxe BDSM - EroLuxe BigCock - EroLuxe Blonde - EroLuxe Blowjob - EroLuxe Brunette - EroLuxe Cheerleader - EroLuxe Cinema - EroLuxe Cosplay - EroLuxe Creampie - EroLuxe Cuckold - EroLuxe Ebony - EroLuxe FakeTaxi - EroLuxe Fisting - EroLuxe FootFetish - EroLuxe Gangbang - EroLuxe Gays - EroLuxe Gloryhole - EroLuxe Henati - EroLuxe Japanese - EroLuxe Lesbians - EroLuxe Massage - EroLuxe MILF - EroLuxe Orgy - EroLuxe Parody - EroLuxe POV - EroLuxe Pregnant - EroLuxe PublicAgent - EroLuxe RedHeads - EroLuxe Russian - EroLuxe Schoolgirl - EroLuxe Shemale - EroLuxe Solo - EroLuxe Stepfamily - Erox (Украина) - Eroxxx HD - ESPN 1 [NL] - ESPN 2 [NL] - ESPN 3 [NL] - ESPN3 [US] - ESPN 4 [NL] - ESPN News [US] - ESPN U [US] - Ethno World - Етно канал HD - ETV2 Эстония - ETV Эстония - ETV+ Эстония - EU.Music - EuroNews - Euronews (английский) - Европа Плюс ТВ - Eurosport 1 [PL] - Eurosport 2 [PL] - Евпатория 24 - EWTN Украина - Экспресс - Extasy 4K - Extreme Channel [PL] - Extreme sports - Extreme Sports [RU] - Exxxotica HD - FamilyJam - FAN HD - Fashion One 4K - Fashion TV Europe - FashionBox HD - Fast&FunBox HD - FEN TV [BG] - FEN TV Folk [BG] - Феникс+ Кино - Festival 4K - Fight Network [US] - FightBox HD - FightBox [PL] - FightKlub [PL] - FightTVPlus - FilmBox Action [PL] - FilmBox ArtHouse - FilmBox Arthouse [PL] - FilmBox Extra [PL] - FilmBox Family [PL] - FilmBox Premium [PL] - FilmBox Russia - Film.Ua Drama - FilmZone [LT] - FilmZone [LV] - FilmZone+ [EE] - FilmZone+ [LT] - FilmZone+ [LV] - FiredUp Network - Food Network Европа - Food Network [PL] - Foodman.club - Мяч - NOW TR - Fox Soccer Plus [US] - FOX Sports HD [AR] - Fox Sports [MX] - FOX Sports 2 HD [AR] - Fox Sports 2 [MX] - FOX Sports 3 HD [AR] - Fox Sports 3 [MX] - France 24 Arabian - France 24 English - France 24 Francais - FrenchLover - Fresh Adventure - Fresh Cinema - Fresh Comedy - Fresh Family - Fresh Fantastic - Fresh Horror - Fresh Kids - Fresh Premiere - Fresh Rating - Fresh Romantic - Fresh Russian - Fresh Series - Fresh Soviet - Fresh Thriller - Fresh VHS - Фронт - Fashion TV 4K - FTV Telekanali [UZ] - Fubo Sports Network [US] - Fuel TV HD - FunBox UHD - Futbol TV Telekanali [UZ] - FX Comedy [PL] - FX [PL] - FX Sports 1 [US] - FX Sports 2 [US] - FX HD TR - Gags Network - Galaxy-TV - ГИС Самара - Глазами туриста 4K - GLN 24 (Геленджик) - Go3 Sport 4 - Gold Line Brief - Gold Line Chef - Gold Line Детектив - Gold Line Evidence - Gold Line Exist - Gold Line Girlfight - Gold Line Hostage - Gold Line Island - Gold Line Motivation - Gold Line Naked&Funny - Gold Line Невский - Gold Line Psycho - Gold Line Series - Gold Line Survival - Golf+ [FR] - Город - Город 24 - Городской телеканал Ярославль - Госфильмофонд. Машина времени - Гродно Плюс - Губерния Самара - Hajduk TV [HR] - Халык Арна - HGTV [PL] - HISTORY [PL] - Viasat History Baltic - Hollywood HD - Horror TV - Ictimai - ICTV Серіали - ICTV - ID Xtra EU - Idman - Игра - Iльдана - Иллюзион + - Импульс Севера - Индийское кино International - Инфо 24 (Шадринск) - Информационный Канал Севастополя - InRating - Insight TV HD - Инсит-ТВ - Insomnia HD - Интекс Барановичи - Inter TV - Iнтер+ - Iнтер - InUltra [PL] - Ирбис - Исландия - iTV [LV] - ITV [UA] - Ивановское общественное телевидение - Ижевск - JimJam Polsat - JOJ Šport 2 [CZ] - JOJ Sport [CZ] - Jukebox [DE] - juQ Comedy - juQ Ужасы - juQ-World - JurnalTV - К1 - К2 - К16 - Кабардино-Балкария - Kabel 1 - Kabel 1 Classics - Kabel 1 Doku - Kanal 2 (Эстония) - Kanal 7 HD TR - Duo 4 EE - Канал 12 Череповец - Duo 5 EE - Kanal D HD - Караван ТВ - Карибу - Карусель (+2) - Карусель (+3) - Карусель (+4) - Карусель (+7) - Карусель (+8) - Каскад-24 - Kazakh TV - Казахстан - KAZsport - KBC+100500 - KBC-Animals - KBC-Aниме - KBC-Comics - KBC-Драмаtic - KBC-Elite Comedys - KBC-Family Animation - KBC-Fantastic - KBC-Goblin - KBC-History - KBC-Кошмарное - KBC-Союзмультzal - KBC-MusKino - KBC-Наш Rock - KBC-Newfilm - KBC-Гай Ritchie And Tarantino - KBC-Russian Комедия - KBC-Сказочный Remake - KBC-СпортМикс - KBC-Шпионское - KBC-Страна СССР - KBC-Ultra - KBC-Видак - KBC-ВОВ - KBC-WAR - KBC-Вестерн - Kernel TV Аладдин - Kernel TV Алиса - Kernel TV Аниме - Kernel TV Барбоскины - Kernel TV Бен 10 - Kernel TV Буба - Kernel TV Бумажный дом - Kernel TV Царевны - Kernel TV Черепашки ниндзя - Kernel TV Чёрный плащ - Kernel TV Чип и Дейл - Kernel TV Доктор - Kernel TV Драконы и всадники Олуха - Kernel TV Фиксики - Kernel TV Финис и Ферб - Kernel TV Футурама - Kernel TV Герой - Kernel TV Подружки - Kernel TV Гравити Фолз - Kernel TV Губка Боб Квадратные Штаны - Kernel TV Счастливого нового года - Kernel TV Интерны - Kernel TV Команда Турбо - Kernel TV Комедия - Kernel TV Космос - Kernel TV Леди Баг и Супер Кот - Kernel TV Лего - Kernel TV Лило и Стич - Kernel TV Люк путешественник во времени - Kernel TV Лунтик - Kernel TV Магия - Kernel TV Мой маленький Пони - Kernel TV Малыш - Kernel TV Марвел vs DC - Kernel TV Мервел сериалы - Kernel TV Маша и Медведь - Kernel TV Ми-ми-мишки - Kernel TV МиниФорс - Kernel TV Новинки - Kernel TV Щенячий патруль - Kernel TV Пушистики - Kernel TV Русалочка - Kernel TV Шкодники - Kernel TV Смешарики - Kernel TV Сонник Бум - Kernel TV Человек-паук - Kernel TV Супер крылья - Kernel TV Сваты - Kernel TV Тимон и Пумба - Kernel TV Том и Джерри - Kernel TV Три кота - Kernel TV Утиные истории - Kernel TV Винни и его друзья - Kernel TV Время - Kernel TV Звёздные войны - Хит HD - Кино 1 - Кино 1 International - Кино 2 - Kino 7 [LV] - Кино без границ - Кино и Жизнь - Кино Стрим Live - КиноТВ - Kino TV HD - КиноТВ (+4) - КиноТВ (+7) - КиноБоевик KZ - KinoKazka - Кинокомедия International - КиноКульт - Кинолента 24 - Киномикс International - Киномульт - Кинопоказ SD - Кинопоказ HD - Kino Polska HD - Kino Polska Muzyka HD - Кинопремьера International - Киносемья International - Киносерия International - Киносвидание International - Kinosweet - Киноужас International - Kinowelt - Кинохит International - Kiss TV RO - Köktem - Колыма-Плюс - Комедийное SD - Комедийное HD - Компас ТВ - Конгресс ТВ - Конкурент.Україна - Королев ТВ - Котлас ТВ - Краснодар - Криминальное HD - КТК - КТВ-Луч (Сызрань) - Россия К - Россия К +2 - Россия К +4 - Россия К +7 - Суспільне Культура - Кунел ТВ Татарстан - Курай - Кузбасс Первый - КХЛ ТВ - КХЛ HD - Київ FM - Музыка Live - Ladies Story HD - LaLiga TV Hypermotion [ES] - Ланет Relax - Лапки Live - Лавстори - Лавстори HD - Легенда - Лента - Liberty Аниме - Liberty Аванпост - Liberty Автогир - Liberty Азия 4K HDR - Liberty BBC - Liberty Бебимульт - Liberty Боевики - Liberty Боевики 4K HDR - Liberty DC - Liberty Disney - Liberty Документалка - Liberty Драма 4K HDR - Liberty Dreamworks - Liberty Эротика - Liberty Fan - Liberty Фан 4K HDR - Liberty Индия - Liberty Кино ENG - Liberty Кино Микс - Liberty Кино UKR - Liberty Кино UKR 4K - Liberty Кинохит 4K HDR - Liberty Комедии - Liberty Комедии 4K HDR - Liberty Короткометражный - Liberty Криминал - Liberty Крош - Liberty Куб - Liberty Легенда - Liberty Marvel - Liberty Медивал 4K - Liberty Мелодрамы - Liberty МиксMusic - Liberty Мим - Liberty Мульт - Liberty Мульт ENG - Liberty Мультверсия FHD - Liberty Мульт UKR - Liberty Мульт UKR 4K - Liberty Мюзикл - Liberty Наука - Liberty Netflix - Liberty Оскар 4K HDR - Liberty Pixar - Liberty Планета360 - Liberty Планктон - Liberty Приключения 4K HDR - Liberty РусФильм - Liberty Семейный - Liberty Сериал - Liberty Сериалы - Liberty Шоу - Liberty Симпсоны - Liberty Скандинавия 4K HDR - Liberty Сказки - Liberty South Park - Liberty Союз - Liberty Сваты - Liberty Триллеры - Liberty ТуркФильм - Liberty Ужасы - Liberty Ужасы 4K HDR - Liberty XX Век - Liberty Занавес - Лида - Lietuvos ryto televizija - Липецк 24 - Liuks! - Лен ТВ 24 - Love Nature 4K - LRT Kultūra - Луч - Луч (ЯНАО) - Luxe HD - Luxury HD - М1 - М2 - M4 Sport [HU] - M6 Music [FR] - M+ Deportes 2 [ES] - M+ Deportes 3 [ES] - M+ Deportes 4 [ES] - M+ Deportes 5 [ES] - M+ Deportes 6 [ES] - M+ Deportes 7 [ES] - M+ Deportes 8 [ES] - M+ Deportes [ES] - M+ Golf [ES] - M+ LALIGA [ES] - M+ Liga de Campeones [ES] - M+ Vamos [ES] - М-студіо - Мадаинят тарах Тыл (Киргизия) - Магия кухни - Magic Action - Magic Adventure - Magic Comedy - Magic Disney - Magic Family - Magic Galaxy - Magic Horror - Magic Karate - Magic Love - Magic Premiere - Magic Russian - Magic Thriller - Magic TV [BG] - Magic TV RO - Magic VHS - Maincast - Мамонт ТВ - MU TV - Март ТВ - Масон ТВ - Match4 [HU] - Max Sport 1 [HR] - Max Sport 2 [HR] - Мегаполис - Megogo Футбол 1 - Megogo Футбол 2 - Megogo Футбол 3 - Megogo Футбол 4 - Megogo Футбол 5 - Megogo Гонг - Megogo Live - Megogo Спорт - Melody [FR] - МЭТР - Metro TV [PL] - Миг ТВ Ноябрьск - MiniJam - Minika Çocuk [TR] - MinikaGO [TR] - MM 007 HD - MM Агата Кристи HD - MS Animated HD - MM Боевик HD - MM Боевик Classic HD - MM Celebrity HD - MM Classic HD - MM Комедия HD - MM Комедия Classic HD - MM Драма HD - MM Experiment HD - MM Семейный 1 HD - MM Семейный 2 HD - MM Фантастика HD - MM Flip UHD - MM Фобия HD - MM Гриффины HD - MM Грайндхаус HD - MM Honey HD - MM История HD - MM Катастрофа HD - MM Киберпанк HD - MM Кинофестиваль HD - MM Криминал HD - MM Крутые 90-е HD - MM Кунг-Фу HD - MM Квартирник HD - MM Lesson HD - MM Live Planet HD - MM Love HD - MM Макромир HD - MM Мегамир HD - MM Микромир HD - MM Мифология HD - MS Crime HD - MS Magic 4K - MS Prisons HD - MS Toons HD - MS Young Blood HD - MM USSR Мультфильм HD - MM NewFilm 1 HD - MM NewFilm 2 HD - MM NewFilm 3 HD - MM NewFilm RU HD - MM Нуар HD - MM OldSchool HD - MM Открытия HD - MM Погружение HD - MM Полицейский С Рублёвки HD - MM Приключения HD - MM Роскино HD - MM Синематограф HD - MM Ситком HD - MM Ситком 2.0 HD - MM Скорость HD - MM Smile HD - MM Спорт HD - MM Стивен Кинг HD - MM Супергерои HD - MM Сваты HD - MM Tom And Jerry HD - MM Translation HD - MM Триллер HD - MM UFO HD - MM Ужасы HD - MM Ужасы Classic HD - MM Ужастик HD - MM USSR 1941-1945 HD - MM USSR Детектив HD - MM USSR Драма HD - MM USSR Комедия HD - MM USSR Приключения HD - MM USSR Сказки HD - MM Воронины HD - MM Walt Disney HD - MM Вестерн HD - MM Затмение HD - MiniMini+ HD - Яснае ТВ - Мир KZ - Мир (+2) - Мир (+4) - Мир (+7) - Кто Куда - Мир вокруг - Мировое Кино KZ - Mixtape [PL] - МКТВ Молодечно - MÖDO Armageddon - MÖDO Beer Land - MÖDO Candy Land - MÖDO Cocaine - MÖDO Documental - MÖDO Fantasies - MÖDO Fire Action - MÖDO Фильмы СССР - MÖDO Green World - MÖDO Камин - MÖDO Love Stories - MÖDO Mafia Island - MÖDO Man Like - MÖDO Мультфильмы СССР - MÖDO Mixed 4K - MÖDO Music 2021 - MÖDO Music 2022 - MÖDO Music 2023 - MÖDO Music RU-UA 2023 - MÖDO Music Club - MÖDO Music 2024 - MÖDO Music RU-UA 2024 - MÖDO Music Movies - MÖDO New Blood - MÖDO Night Scary - MÖDO Novelty HDR - MÖDO Rus Movies - MÖDO Snoop Gun - MÖDO Spaceship - MÖDO Sunshine - MÖDO Super Hero - MÖDO Tarantino-G.Ritchie - MÖDO Toon 4K - MÖDO Top Movies - MÖDO Top Series - MÖDO VHS Mix 4K - MÖDO Video Show - MÖDO Village - MÖDO Wild West - MÖDO Zombie land - Mooz Dance [RO] - Mooz Hits [RO] - Mooz [RO] - More Than Sports TV [DE] - Мосфильм. Золотая коллекция - Мосфильм. Золотая коллекция (+2) - Мосфильм. Золотая коллекция (+4) - Москва-24 - MostVideo - Motor Trend [IT] - Motorvision+ [DE] - Motowizja [PL] - Movify History - Movify Series - MSG [US] - МТК - MTV 90s [UK] - MTV 2 [US] - MTV 80's [UK] - MTV Classic [US] - MTV Dance - MTV Europe - MTV Hits [FR] - MTV Max [FI] - MTV Music [UK] - MTV Rocks - MTV Urheilu 1 [FI] - MTV Urheilu 2 [FI] - MTV Urheilu 3 [FI] - MTV [US] - МТВ Волгоград - Мультимания LV - МультСезон - Муравленко 24 - Муром ТВ - Museum 4K - Museum HD - Music Channel RO - MusicBox - Music Box [PL] - Musicmix - Муви ТВ - Мужское кино International - МузСоюз - Муз-ТВ (+2) - Муз-ТВ (+4) - Муз-ТВ (+7) - Музыка Мода ТВ - Мы и город - Ми - Україна - Ми - Україна+ - MyHits [EE] - МЫ - MyZen 4К - myZen.tv - n-tv HD - Национальный Жилищный Канал - Nano HD - Народ Всё Видит - NASA 4K - #НАШ канал - Наш Кинопоказ HD - Наша Сибирь 4K - Любимое SD - Любимое HD - Наше любимое кино Украина - #НАШЕ music - Наше Мужское HD - Наше Наследие - Наше новое кино International - Наше HD - Наше SD - Наши Города (Когалым) - Настоящее время HD - Nat Geo People [PL] - National Geographic Wild [PL] - Натали - National Geographic Baltic - National Geographic [PL] - National TV - Научпоп - Наука 2.0 - NavigatorTV - Navo Telekanali [UZ] - NBA TV - NEXT-TV - NFL Network - Nick Jr - Nick Jr. Baltic - Nickelodeon Baltic - NickMusic [US] - Ника FM - Ника ТВ - NO EPG (заглушка) - NO EPG Cinema (заглушка) - NO EPG Mult (заглушка) - NO EPG Music (заглушка) - NO EPG News (заглушка) - NO EPG Radio (заглушка) - NO EPG Sport (заглушка) - NO EPG XXX 18+ (заглушка) - Nor Hayastan (Армения) - Noroc TV Moldova - Nova Sport 5 [CZ] - Nova Sport 6 [CZ] - Nova Sport [BG] - Novela TV [PL] - Novelas+ [PL] - Novella TV - Новгородское Областное телевидение - Новочеркасск ТВ - Новое телевидение - Новое время - Новороссийск ТВ - Новошахтинск ТВ - Новый канал - Новый век (Тамбов) - Новый христианский - Now 70's - Now 80's - Now 90s & 00s [UK] - NOW Series - Новый игровой канал - NR1 Türk [TR] - NRJ Hits [FR] - НТК (Нягань) - НТК (Зеленогорск) - НТРК Ингушетия - НТС-Ирбит - НТС (Иркутск) - НТС (Севастополь) - NTV HD TR - НТВ-Мир - НТВ (+1) - НТВ (+2) - НТВ (+3) - НТВ (+4) - НТВ (+7) - Nu.ART TV - Nuta TV [PL] - Обком - Область 45 - Окко.Футбол - Okko.Герои - Окко.Спорт - Окко.Прайм Спорт - Okko TV - Olsib Action comdey FHD - Olsib Australia cinema FHD - Olsib Black Sails FHD - Olsib Беспринципные FHD - Olsib Black Comedy - Olsib Canada cinema FHD - Olsib Catastrophe FHD - Olsib China cinema FHD - Olsib Чужой район FHD - Olsib Comedy FHD - Olsib Crime FHD - Olsib Czech Republic cinema FHD - Olsib Disco-80 FHD - Olsib Documentary FHD - Olsib Два холма FHD - Olsib Fantasy FHD - Olsib French cinema FHD - Olsib Galicia FHD - Olsib GAlicia_2 FHD - Olsib Germany cinema FHD - Olsib India cinema FHD - Olsib Italian cinema FHD - Olsib Japan cinema FHD - Olsib Юмор шоу FHD - Olsib Kids FHD - Olsib Киносказки FHD - Olsib Киноуроки FHD - Olsib Knives FHD - Olsib Конфетка FHD - Olsib Криминальная Одесса FHD - Olsib Легавый FHD - Olsib Литейный, 4 FHD - Olsib Love story FHD - Olsib Marvel FHD - Olsib Меч FHD - Olsib Mexico cinema FHD - Olsib Мир Человека FHD - Olsib Multfilm FHD - Olsib Наш флаг означает Смерть FHD - Olsib Netflix Orig FHD - Olsib The newest FHD - Olsib New Year FHD - Olsib The old best HD - Olsib Остров FHD - Olsib Первый отдел FHD - Olsib Pirates of the Caribbean FHD - Olsib Poland cinema FHD - Olsib Полярный FHD - Olsib Память Победы! FHD - Olsib ППС FHD - Olsib Pro100 Kitchen FHD - Olsib Radio FHD - Olsib Ремейк FHD - Olsib Ancient Rome FHD - Olsib RU.Music FHD - Olsib RuAction FHD - Olsib Science-fiction FHD - Olsib Сериалы - Жарков FHD - Olsib Шеф FHD - Olsib Show FHD - Olsib Spain cinema FHD - Olsib Star Wars FHD - Olsib STB FHD - Olsib The Best FHD - Olsib Time Travel FHD - Olsib British cinema FHD - Olsib USSR 30 FHD - Olsib USSR 40 FHD - Olsib USSR 50 FHD - Olsib USSR 60 FHD - Olsib USSR 70 FHD - Olsib USSR 80 FHD - Olsib USSR 90 FHD - Olsib USSR Classic FHD - Olsib USSR serial FHD - Olsib Великолепная пятёрка FHD - Olsib VHS - Olsib Водный Мир FHD - Olsib Walt Disney FHD - Olsib War FHD - Olsib Живой мир FHD - Olsib Звездные врата FHD - Омск ТВ - ONE2 - Первый музыкальный - Oneplay Sport 1 [CZ] - Oneplay Sport 2 [CZ] - Oneplay Sport 3 [CZ] - Oneplay Sport 4 [CZ] - ORF Sport + - ОРТ-Планета (Оренбург) - Остросюжетное SD - Остросюжетное HD - OstWest - OstWest24 - ОТР - ОТР (+2) - ОТР (+4) - ОТР (+6) - ОТР (+8) - ОТВ Челябинск - ОТВ Екатеринбург - OTV [LV] - ОТВ Одинцово - ОТВ Приморье - Отырар TV - Охотник и рыболов HD - Охотник и Рыболов Международный - Панорама ТВ Тверь - Paradise HD - Paradox HD - Comedy Central - Paramount Network - PassionXXX HD - Патриот - Penthouse Gold HD - Penthouse HD - Penthouse Passion Украина - Penthouse Reality TV - Перец Int - Перпетуум Мобиле - Первоуральск ТВ - Первый городской (Гомель) - Первый городской (Киров) - Первый городской (Кривой Рог) - Первый городской (Одесса) - Первый городской (Омск) - Первый канал СНГ - Первый канал Европа - Первый канал США - Первый Карагандинский - Первый канал -1 - Первый мытищинский - Первый областной Орел - Первый канал +1 - Первый канал +2 - Первый канал +3 - Первый канал +4 - Первый канал +5 - Первый канал +6 - Первый канал +7 - Первый канал +8 - Первый канал +9 - Первый Приднестровский - Первый Ростовский - Первый Севастопольский - Первый Ярославский - Пятница Int KZ - Пятница! (+2) - Пятница! (+3) - Пятница! (+4) - Пятница! (+7) - Пятый Int - Pink Erotic 1 [RS] - Pink Erotic 2 [RS] - Pink Erotic 3 [RS] - Pink Erotic 4 [RS] - Пинск ТВ - Пиксель - Plan B - Planeta Folk [BG] - Planeta HD [BG] - Planete+ HD [PL] - Playboy TV [UK] - Playboy TV UK (Украина) - Поединок - Поиск-ТВ - Полёт ТВ - Polsat Comedy C. E. - Polsat Music HD - Polsat Sport Premium 3 - Polsat Sport Premium 4 - Polsat Sport Premium 5 - Polsat Sport Premium 6 - Power Türk [TR] - Power TV [PL] - Премиальное SD - Премиальное HD - Premier Sport 1 [SK] - Premier Sport 2 [SK] - Premier Sport 3 [SK] - Premier Sports Asia - Premier Sports 1 [UK] - Premier Sports 2 [UK] - Premiere HD - Premier League TV HD - Premiere HD 1 - Premiere HD 2 - Premiere HD 3 - Premiere HD 4 - Premium HD - Премиум Кино KZ - Приключения HD - Прим 24 - Prima Sport 1 HD - Prima Sport 2 HD - Prima Sport 3 HD - Prima Sport 4 HD - Prima Sport 5 HD - Prime Fight - Про100 ТВ - Pro Arena - Про Астрахань - Pro TV Moldova - Pro Всё - Про жизнь - Продвижение (+3) - Продвижение (+4) - Продвижение (+7) - ProSieben Fun HD - ProSieben Maxx HD - ПТРК Павлоград - Q Football - Киносериал HD [KZ] - Кинодрама HD [KZ] - Q Live 1 - Q Live 2 - Q Live 3 - Q Live 4 - Q League - QAZAQSTAN HD Int - Q Sport Киргизия - Q Arena - Quadro 4K - QVC Style [DE] - Рада - Radio Italia TV [IT] - Радио Мир - Радіо НВ - Телеканал Радио Страна ФМ - РАІ - RAZ 1 - RAZ 2 - Развлекательное ТВ [KZ] - РБК - Re:TV - Real Time [IT] - Reality Kings - Rebel [CZ] - Reble! - Регион 29 - Регион 67 - РенТВ International - Истоки - РенТВ Молдова - Рен ТВ (+2) - Рен ТВ (+4) - Рен ТВ (+7) - Репортер - Репортер 73 - Retro Music - Revel TV - Резонанс - RFM TV [FR] - РГВК Дагестан - Рифей-ТВ - Riga TV24 - Рика - РИМ - RING.BG - RMC Sport 1 [FR] - RMC Sport 2 [FR] - RMC Sport Access [FR] - Rock TV RO - Родное кино International - Romance - Романтичное SD - Романтичное HD - Россия 1 - Россия 1 (-1) - Россия 1 (+1) - Россия 1 (+2) - Россия 1 (+3) - Россия 1 (+4) - Россия 1 (+5) - Россия 1 (+6) - Россия 1 (+7) - Россия 1 (+8) - Россия 1 (+9) - Россия 24 - Розпакуй.TV - RT News - RT Д English - RT Д Русский - RTG International - RTL - RTL 2 - RTL Nitro [DE] - RTLup [DE] - РТР-Планета Америка - РТР-Планета Армения - РТР-Планета Украина - РТС - Абакан - RTVI Retro - RTVI США - RTVS Sport [SK] - RU.TV Беларусь - РуКино HD - Russia Hualiang TV - Русская история - Русь Кострома - Русский корабль - Russias Future - Русская комедия - RUTUBE TV - Рыбалка - Рыбалка и охота - Рыбинск-40 - С1 Сургут - S Sport 2 [TR] - S Sport [TR] - Saga TV - Sälem, älem! [KZ] - Самара 24 - Самотлор (Нижневартовск) - Сампо ТВ - Саров 24 - Sat.1 HD - Sat.1 Emotions HD - Sat.1 Gold HD DE - Саха - Щёлково - Schlager Deluxe [DE] - Sci Fi [PL] - Scream - Сделано в Кузбассе - Семейное Кино KZ - Семейный Теле Сигнал [KZ] - Senzi TV [SK] - Serial HD - Сериал - Setanta Sports 1 Georgia - Setanta Sports 1 KZ - Setanta Sports 1 Lietuva - Setanta Sports 2 Georgia - Setanta Sports 2 KZ - Setanta Sports 2 Lietuva - Setanta Sports 3 Georgia - Setanta Kyrgyzstan - Setanta Казахстан - Setanta Sport+ [KZ] - Setanta+ Украина - Setanta Sports Premium [UA] - Setanta Sports+ - Setanta Украина - Сейм Курск - Шахты ТВ - Шансон-TB - Шант Kids HD - Шант Music HD - Шант Premium HD - Шант Serial HD - Шокирующее SD - Шокирующее HD - Show HD TR - Show KZ - Сибирь 24 - Silk Way Cinema - Silk Way - Симферополь 24 - Simpsons Channel - Sixx [DE] - СкиФ-Витебск - Sky Atlantic HD - Sky Caccia e Pesca - Sky Cinema Action HD - Sky Cinema Classics HD - Sky Cinema Family HD - Sky Cinema Highlights HD - Sky Cinema Premiere HD - Sky News [UK] - Sky Sport 24 [IT] - Sky Sport Arena [IT] - Sky Sport Austria HD - Sky Sport Bundesliga 1 HD - Sky Sport Bundesliga 2 HD - Sky Sport Bundesliga 3 HD - Sky Sport Bundesliga 4 HD - Sky Sport Bundesliga 5 HD - Sky Sport Bundesliga 6 HD - Sky Sport Bundesliga UHD [DE] - Sky Sport Bundesliga HD [DE] - Sky Sport Calcio [IT] - Sky Sport F1 [DE] - Sky Sport F1 [IT] - Sky Sport Golf [DE] - Sky Sport Golf [IT] - Sky Sport 1 [NZ] - Sky Sport 2 [NZ] - Sky Sport 3 [NZ] - Sky Sport 4 [NZ] - Sky Sport 5 [NZ] - Sky Sport 6 [NZ] - Sky Sport 7 [NZ] - Sky Sport Premier League [NZ] - Sky Sport 9 [NZ] - Sky Sport Legend [IT] - Sky Sport Max [IT] - Sky Sport Mix [DE] - Sky Sport Mix [IT] - Sky Sport MotoGP [IT] - Sky Sport NBA [IT] - Sky Sport News [DE] - Sky Sport Premier League [DE] - Sky Sport Select [NZ] - Sky Sport Tennis [DE] - Sky Sport Tennis [IT] - Sky Sport Top Event [DE] - Sky Sport UHD [DE] - Sky Sport Uno [IT] - Sky Sports 1 UHD [UK] - Sky Sports 2 UHD [UK] - Sky Sports Action / NFL [UK] - Sky Sports Premier League [UK] - Sky Sports + [UK] - Sky Sports Box Office [UK] - Sky Sports Cricket [UK] - Sky Sports Darts / F1 [UK] - Sky Sports F1 UHD [UK] - Sky Sports Football [UK] - Sky Sports Golf [UK] - Sky Sports LaLiga [MX] - Sky Sports Main Event [UK] - Sky Sports Mix [UK] - Sky Sports [MX] - Sky Sports News [UK] - Sky Sports Racing [UK] - Sky Sports Tennis [UK] - SkyCam +100500 - SkyCam Action - SkyCam Catastrophe - SkyCam Goblin - SkyCam Horrors - SkyCam Relax - SkyCam Romantic - SkyCam RuKino - SkyCam Симпсоны - SkyCam Южный Парк - SkyCam Victory - SKY HIGH CLASSIC HD - SKY HIGH 2D CLASSIC HDR - SKY HIGH 3D CLASSIC HDR - SKY HIGH 911 S 4K HDR - SKY HIGH ADULT - SKY HIGH ANIME HD - SKY HIGH ASIAN HDR - SKY HIGH AUTUMN HDR - SKY HIGH BIO HDR - SKY HIGH BLOOD 4K HDR - SKY HIGH BLOODY HDR - SKY HIGH BRAIN - BUNNY HD - SKY HIGH CENTURY HDR - SKY HIGH CHBU - SKY HIGH CINEMA 4K HDR - SKY HIGH SMILE HDR - SKY HIGH COMICS 4K HDR - SKY HIGH CONCERT HD - SKY HIGH COSMOS HDR - SKY HIGH CRIME 4K HDR - SKY HIGH CRIME HDR - SKY HIGH CRIMES 4K HDR - SKY HIGH DANCE - SKY HIGH DARK S 4K HDR - SKY HIGH DC 4K HDR - SKY HIGH DCU S 4K HDR - SKY HIGH DEAD S 4K HDR - SKY HIGH DECTS 4K HDR - SKY HIGH DETECT HDR - SKY HIGH DLOVE 4K HDR - SKY HIGH DOC - SKY HIGH DOC UHD - SKY HIGH DRAMA 4K HDR - SKY HIGH EPOCH HD - SKY HIGH FAMILY 4K HDR - SKY HIGH FAMILY VHS HDR - SKY HIGH FIGHT+ HD - SKY HIGH FRESH HD - SKY HIGH FRESH HDR - SKY HIGH FUN S 4K HDR - SKY HIGH GALAXY HDR - SKY HIGH GOT S 4K HDR - SKY HIGH HEROES HD - SKY HIGH HISTORY 4K HDR - SKY HIGH HIST S 4K HDR - SKY HIGH HORROR 4K HDR - SKY HIGH HORROR VHS HDR - SKY HIGH JETIX HDR - SKY HIGH JETIX HD - SKY HIGH KID 0+ 4K HDR - SKY HIGH KID 6+ 4K HDR - SKY HIGH KID 12+ 4K HDR - SKY HIGH KID 16+ 4K HDR - SKY HIGH KID 18+ 4K HDR - SKY HIGH KIDS USSR - SKY HIGH LEGENDS HDR - SKY HIGH MAGIC S 4K HDR - SKY HIGH MAN HD - SKY HIGH MARVEL 4K HDR - SKY HIGH MCU S 4K HDR - SKY HIGH MIX 4K - SKY HIGH MYSTIC VHS HDR - SKY HIGH NATURE HD - SKY HIGH NATURE 4K - SKY HIGH NATURE 4K HDR - SKY HIGH NEW 4K HDR - SKY HIGH NOIR HD - SKY HIGH NON STOP HDR - SKY HIGH NSTOP 4K HDR - SKY HIGH ORIG - SKY HIGH POLIT S 4K HDR - SKY HIGH PUPPET HDR - SKY HIGH ROMAN VHS HDR - SKY HIGH RUSSIAN - SKY HIGH SADLY HDR - SKY HIGH SERIES HD - SKY HIGH SMASH 4K HDR - SKY HIGH SMASH VHS HDR - SKY HIGH SMILE 4K HDR - SKY HIGH SPACE 4K HDR - SKY HIGH SPIRIT HD - SKY HIGH SPNS 4K HDR - SKY HIGH SPRING HDR - SKY HIGH STANDUP - SKY HIGH STARWS 4K HDR - SKY HIGH SUNNY HDR - SKY HIGH THRILLER 4K HDR - SKY HIGH TOON 4K HDR - SKY HIGH UHD HDR - SKY HIGH VAMPIRE HDR - SKY HIGH VERSE S 4K HDR - SKY HIGH VHS DEJAVU HDR - SKY HIGH VHS FUTURE HDR - SKY HIGH VHS UHD - SKY HIGH WBROS HDR - SKY HIGH WESTERN HDR - SKY HIGH WEST S 4K HDR - SKY HIGH WINTER HDR - Šláger Muzika [CZ] - Šláger Original [CZ] - Sláger TV [HU] - Соль - Солнце (+2) - Солнце (+4) - Солнце (+7) - Соловьев.Live - Сонце - Song TV Armenia - Song TV Georgia - Song TV Russia - Duo 3 [EE] - Duo 3 Baltic - Sony Sports Ten 1 HD - Sony Sports Ten 2 HD - Sony Sports Ten 3 HD - Sony Sports Ten 4 HD - Sony Sports Ten 5 HD - Duo 6 Baltic - Duo 6 [EE] - Советская киноклассика - Советская киноклассика HD - Спас (+2) - Спас (+7) - Spiler 1 [HU] - Spiler 2 [HU] - Spor Smart 2 TR - Spor Smart TR - Sport1 HD - Sport1+ HD - Sport TV 1 Slovenia - Спорт 1 Украина - Sport TV 2 Slovenia - Спорт 2 Украина - Sport TV 3 Slovenia - Спорт 3 Украина - Спорт 4 Украина - Спорт 5 - Sport 1 [CZ] - Sport 1 [HU] - Sport 2 [CZ] - Sport 2 [HU] - Sport Extra [RO] - Sport+ Qazaqstan - Sportdigital Fussball 2 - ТВ Спорт - Sport Klub 1 [SI] - Sport Klub 2 [SI] - SportKlub - Спортмастер ТВ - Sportska Televizija [HR] - Sportsnet 360 [CA] - SNY: SportsNet New York [US] - Sportsnet One [CA] - Sportsnet World [CA] - Sports TV [TR] - Sport TV 1 [PT] - Sport TV 2 [PT] - Sport TV 3 [PT] - Sport TV 4 [PT] - Sport TV 5 [PT] - Sport TV 6 [PT] - Sport TV 7 [PT] - Sport TV+ [PT] - Star Cinema Россия - Star Cinema [EU] - Star Cinema UA - Star Family Россия - Star Family [EU] - Star Family UA - Star TV HD TR - Stars.TV - Stingray Classica [FR] - Stingray Djazz [FR] - СТК-Солигорск - СТРК HD - СТС International - СТС International (-7) - СТС Kids HD - СТС Love (+2) - СТС Love (+4) - СТС Love (+7) - СТС (+2) - СТС (+4) - СТС (+7) - СТВ 24 - СТВ Беларусь - STV Pirmā! - Sumiko - Sundance TV [PL] - Super Baltic - Super One HD - Суббота! (+2) - Суббота! (+4) - Суббота! (+7) - Super Plus - Супермама - Super-Tennis - Suspense - Суспільне Спорт - Світ навиворіт+ - Світ+ - Svoboda - Своё ТВ Березники - Своё ТВ Ставрополь - Тагил-ТВ 24 - Такт - Танцуй! HD - Тарарам! - Тараз 24 - Татарстан-24 - Таврия ТВ - ТБН Россия - ТДК 42 - Teledeporte [ES] - Телеканал народной музыки - Телекон 24 (Нижний Тагил) - Телемикс - Телепутешествия HD - TeleToon+ HD - Temptation TV - Tennis Channel [US] - Тео ТВ - ТЕТ - Teve2 HD - The Country Network [US] - The Explorers - The Fishing and Hunting - The Voice BG - Thriller HD - Tiny4k UHD - Tivibu Spor [TR] - Tivibu Spor 1 [TR] - Tivibu Spor 4 [TR] - ТиВиСи HD - ТК Вариант - TLC Balkans - TLC [PL] - TLC TR - ТНТ4 (+2) - ТНТ4 (+4) - ТНТ4 (+6) - ТНТ4 (+7) - Exclusiv TV [MD] - ТНТ-International (Беларусь) - ТНТ-International (СНГ) - ТНТ-International (Европа) - ТНТ KZ - ТНТ-Music - ТНТ (+2) - ТНТ (+3) - ТНТ (+4) - ТНТ (+7) - TNT Sports Premium HD [AR] - ТНВ - Точка - Толк - Толпар-ТВ (Уфа) - Томское время - Тонус ТВ - Тооку - Той Думан - Trace Brasil - Trace Latina [FR] - Trash - Travel&Adventure - Travel Channel [PL] - Travel Guide-TV - Travel XP 4K - Travel XP HD - Третий Цифровой - ТРК Чернівці - ТКР Рязань - ТРК Юганск - TRT 4K [TR] - TRT 1 HD - TRT 2 HD - TRT 3 HD - TRT Çocuk [TR] - TRT Haber HD - TRT MÜZİK [TR] - TRT Spor Yıldız [TR] - TRT Türk [TR] - ТСН 24 (Тула) - ТСТ (Черемхово) - TTV [PL] - Туапсе 24 - Туран ТВ - Турк Сааҭ - Тува 24 - TV1 KG HD (Кыргызстан) - TV 2 Sport 1 [NO] - TV 2 Sport 2 [NO] - ТВ3 Беларусь - TV3 EE - TV3 LT - TV3 LV - TV3 Plus [LT] - ТВ3 - ТВ3 (+2) - ТВ3 (+3) - ТВ3 (+4) - ТВ3 (+7) - TV4 (Латвия) - TV4 [PL] - TV4 Tennis [SE] - TV-4 (Тернопіль) - TV5 Monde Europe - TV6 EE - TV6 LT - TV6 LV - TV6 [PL] - ТВ-7 Абакан - TV8 [LT] - TV8 Moldova - TV8 HD TR - ТВ-21M - ТВ-21+ - TV 8.5 [TR] - TV999 [BG] - TV1000 Global Kino - Go3 Films - TV BRICS - ТВ-ИН (Магнитогорск) - TV Puls 2 - TV RUS - TV RUS+ - ТВА - TVC 21 - ТВ Центр +2 - ТВ Центр +4 - ТВ Центр +7 - Тверской проспект - Твiй серiал - ТВК6 Красноярск - TVM3 [CH] - TVN 7 HD - TVN 24 BiS HD - TVN 24 HD - TVN Fabuła HD - TVN HD - TVN Style HD - TVN Turbo HD - Твоё ТВ - Юмор - Твой 2007 - Твоє кіно. Action - Твоє кіно. Relax - Твоє кіно. Хіт - TVоя Тюмень - Твоё ТВ HD - Твоё ТВ Казахстан - TVP 1 - TVP 2 - TVP 3 - TVP 3 Wrocław - TVR1 [RO] - TVR2 [RO] - TVR Sport [RO] - TVRi [RO] - ТВС - 9 канал - TVS [PL] - ТВС (Саранск) - ТВТУР - 4Y Baltic - TyC Sports HD [AR] - UA:Буковина - UA:Черкаси - UA:Чернігів - Суспільне Донбас - UA:Карпати - UA:Кропивницький - UA:Крим - UA:Київ - UA:Львів - UA:Миколаїв - UA:Одеса - UA:Перший - UA:Поділля - UA:Полтава - UA:Рівне - UA:Суми - UA:Тернопіль - FreeДОМ - UA:Волинь - UA:Вінниця - UA:Харків - UA:Херсон - UA:Закарпаття - UA:Запоріжжя - UA:Житомир - Удар - Ugra Travel - УР1 - УР2 - УР3 - Ульяновская правда - Ultra TV 4K [PL] - Унiан - УПЛ ТВ - URAL1 - Урал-24 - УрФО24 - USSR HD - UTravel - ЮТВ Чебоксары - UTV Нефтекамск - UTV RO - UTV Салават - UTV Стерлитамак - UzSport - UzSport 2 - В мире животных HD - V Sport 1 [NO] - V Sport 2 [NO] - V Sport 3 [NO] - V Sport Extra [SE] - V Sport Football [SE] - V Sport+ [NO] - V Sport Premium [SE] - Vajeu - Варзиш Спорт - Вектор 24 - VeleS 60FPS - VeleS Аниме - VeleS Dj Set - VeleS Гоблин - VeleS Kids - VeleS Киноплёнка - VeleS Киносерия - VeleS Комедия - VeleS Криминальный - VeleS Магнитофон - VeleS Movie Hits - VeleS Наше Кино - VeleS Premiere - VeleS Семейный - VeleS СССР - VeleS Страшное - VeleS Триллер - VeleS Вестерн - Velilla TV Action War Films HD - Velilla TV Adult Channel HD - Velilla TV Cartoons Disney 4K - Velilla TV Cinema 4K - Velilla TV Детский HD - Velilla TV Домашний HD - Velilla TV EuroCup 1984 - Velilla TV EuroCup 1988 - Velilla TV EuroCup 1992 - Velilla TV EuroCup 1996 - Velilla TV Eurodance 90s - Velilla TV Hard And Heavy Concerts HD - Velilla TV Кухня + Отель Элеон HD - Velilla TV Legendary Matches HD - Velilla TV Морские дьяволы HD - Velilla TV Морские дьяволы 2 HD - Velilla TV Мосгаз HD - Velilla TV ИП Пирогова HD - Velilla TV Pop And Rock Concerts HD - Velilla TV Russiandance 90s - Velilla TV Русский Сериал HD - Velilla TV Русские Мелодрамы HD - Velilla TV Счастливы вместе - Velilla TV Том и Джерри HD - Velilla TV World Cup 1966 - Velilla TV World Cup 1970 - Velilla TV World Cup 1974 - Velilla TV World Cup 1978 - Velilla TV World Cup 1990 - Velilla TV World Cup 1994 - Velilla TV World Cup 1998 - Velilla TV World Cup 2002 - Velilla TV World Cup 2006 - Velilla TV World Cup 2010 - Velilla TV World Cup 2014 - Velilla TV World Cup 2018 - Velilla TV World Cup 2022 - Ветта 24 Пермь - VF Два с половиной человека - VF Привет из 90х - VF Adventure - VF Американская история ужасов - VF Anime - VF Art house - VF Баня - VF Беларусьфильм - VF Бесстыжие - VF Без цензуры - VF Боевик - VF Cartoon - VF Чернобыль - VF Classic - VF Comedy - VF Comedy Woman - VF Comics - VF Detective - VF Disney Cartoon - VF Disney Movie - VF Джеки Чан - VF Ёлки - VF Ералаш - VF Family - VF Fantastic - VF Fantasy - VF Фильмы СССР - VF Друзья - VF Леонид Гайдай - VF Гарри Поттер - VF Городок - VF Граиндхаус - VF HBO - VF Доктор Хаус - VF Игра престолов - VF Индия - VF История - VF Каламбур - VF Карточный домик - VF Катастрофы - VF Кино 4K - VF Киностудия им. Горького - VF Классика - VF Комедия - VF Концерты - VF Криминал - VF Кухня - VF КВН - VF Ленфильм - VF Луи де Фюнес - VF Малыш - VF Marvel - VF Маски Шоу - VF Melodrama - VF Мосфильм - VF Мультфильмы СССР - VF Музыка - VF Мыльные оперы - VF Mystic - VF Наша Раша - VF Netflix - VF New Year - VF Новогодние мультфильмы - VF Новогодний - VF Одесская киностудия - VF Однажды в России - VF Орел и решка - VF Оскар - VF Охота - VF Наша победа - VF Премьера - VF Premiere - VF Реальные пацаны - VF Рижская киностудия - VF Эльдар Рязанов - VF СашаТаня - VF Счастливы Вместе - VF Сериал - VF Сериал 4K - VF Сериалы Турции - VF Series - VF Секс в большом городе - VF Скуби-Ду - VF След - VF С новым Годом! - VF Солдаты - VF Союзмультфильм - VF Стройка - VF Сверхъестественное - VF Свердловская киностудия - VF Сваты - VF Тайны следствия - VF Теория большого взрыва - VF Thriller - VF TOP Series - VF Универ - VF Универ новая общага - VF Уральские пельмени - VF Ужасы - VF Ужасы VHS - VF VHS - VF VHS Cartoon - VF Военные - VF Воронины - VF Владимир Высоцкий - VF Ходячие мертвецы - VF Вестерн - VF The X-Files - VF Юмор 18+ - VH1 Classic - VHS HD - VHS-ка Сериал - Viasat Explore CEE - Viasat History Ukraine - Viasat Hockey HD - Viasat Nature CEE - Viasat Serial - Viasat Sport HD [SE] - Victory HD - viju TV1000 Новелла - viju TV1000 romantica - Vivid Red - Vivid Touch HD - Vivid TV - Вкус - Вкусное TV - Военное кино - Волейбол - Восточный экспресс - Восток 24 - ВОТ ТВ - VOX - Vox Music TV [PL] - VOXup [DE] - Время Арктики - Волга 24 - Вселенная мультфильмов - Вся Уфа - Всесвітня служба радіомовлення України - ВТК Аргус - Выборг ТВ - Waidwerk HD DE - Women's Magazine - World Fashion Channel En - WP - Wydarzenia 24 - Хабаровск - Хамдан-Калмыкия 24 (Элиста) - Xezer - Хоккей ТВ - Хроніка+ - Yaban TV [TR] - Ямал-Регион - Yes 1 - Yes 3 - Yes 4 - Yes Action - yes Bollywood - Yes Comedy - Yes Drama - YES Network [US] - Yes Sport 1 - Yes Sport 2 - Yes Sport 3 - Yes Sport 4 - - YOSSO TV 4K - YOSSO TV 4K HDR - YOSSO TV Adrenaline - YOSSO TV Adventure - YOSSO TV BEST - YOSSO TV BEST 60fps - YOSSO TV BEST Box 60fps - YOSSO TV Ковбойское - YOSSO TV Disney - YOSSO TV Food - YOSSO TV Grand - YOSSO TV Kids - YOSSO TV Мелодрама - YOSSO TV Music Hits - YOSSO TV Nature - YOSSO TV Наше детское - YOSSO TV Netflix - YOSSO TV New Кино - YOSSO TV Oblivion - YOSSO TV Русские фильмы - YOSSO TV Science - YOSSO TV Шансон - YOSSO TV Советские фильмы - YOSSO TV Советские фильмы 4K - YOSSO TV Союзмульт - YOSSO TV Thriller - YOSSO TV Трагичное - YOSSO TV Travel - YOSSO TV VHS - YOSSO TV Забавное - Your Play! - Ю +2 - Ю +4 - Ю +7 - Югра - РТК Забайкалье - Закон ТВ - Зал 1 (Шерлок Холмс и доктор Ватсон) - Зал 2 (След) - Зал 3 (Ментовские войны) - Зал 4 (Мелодрамы) - Зал 5 (Солдаты) - Зал 6 (Некрасивая подружка) - Зал 7 (Три кота) - Зал 8 (Доказательства вины) - Зал 9 (Анна-детективъ) - Зал 10 (Советские мультфильмы) - Зал 11 (Смешарики) - Зал 12 (Комедии) - Зал 14 (Белка и Стрелка) - Зал 15 (Шукки и Бейта) - Зал 16 (Диностер) - Зал 17 (Боевики HD) - Зал 18 (Бодо Бородо) - Зал 19 (Ужасы HD) - Зал 20 (Исторический HD) - Зал 21 (Робозуна) - Зал 22 (Детские песенки) - Зал 23 (Советские фильмы) - Зал 24 (Глухарь) - Зал 25 (Горюнов) - Зал 26 (Балабол) - Зал 27 (Улицы разбитых фонарей) - Зал 28 (6 кадров) - Зал 29 (Женский детектив) - Зал 30 (Мажор) - Зал 31 (Осторожно, Модерн!) - Зал 32 (Бандитский Петербург) - Зал 33 (Восток-Запад) - Запад 24 - Заречный - Жетысу - Живи - Живи активно - Ziggo Sport 1 [NL] - Ziggo Sport 2 [NL] - Ziggo Sport 3 [NL] - Ziggo Sport 4 [NL] - Ziggo Sport 5 [NL] - Ziggo Sport 6 [NL] - Знаєм 24 - Знание ТВ - ZU TV [RO] - Звезда (+2) - Звезда (+4) - Звезда (+7) - 1+1 - 1+1 International - 1+1 Україна - 1+2 - 2+2 - 2x2 - Три Ангела - 4ever Cinema - 4ever Drama - 4ever Music - 4ever Theater - 5Sport 4K - 5Sport - 6 соток - 13th Street HD - Хабар 24 - 78 - 312 Кино - 312 Музыка - 312 Сериал - 360° Новости - 360TuneBox - 365 дней ТВ - А1 - А2 - Abai TV - ABC News Live [US] - Adult Channel - Agro TV Moldova - Ajara TV - Алмазный край - Altai - Анекдот ТВ - Ani - AQJAIYQ - AQTOBE - Арис 24 - Архыз 24 - Armenia 1 - Armenia 2 - Армія ТБ - Арсенал ТВ - Астрахань 24 - Astro Cricket - Atameken Business - ATR - ATV Bazmoc TV - ATV Filmzone - ATV Kinoman - ATYRAY - Авто Плюс - Аверс - Авто24 - Baby Time - Balapan - Баластан - Balticum Auksinis - Башкортостан 24 - BCU Charm HD - Бьюти.TV - beIN Sports 1 - beIN Sports 2 - beIN Sports 3 - beIN Sports 4 - beIN Sports 5 - beIN Sports 6 - beIN Sports 7 - beIN Sports AFC - beIN Sports NBA - beIN Sports News - beIN Sports [US] - Белгород 24 - БелРос - Benfica TV - Большая Азия - Big Planet - .black - Блокбастер - Blue Hustler - Бобер - Бокс ТВ - Bollywood - Bolt - БСТ - BTV - Буг-ТВ - Карусель - Карусель International - Cars & Stars TV - Cartoon Network - Caspian News - CBC - CBC Sport - CBS Reality [PL] - CBS Sports Network [US] - CGTN - Пятый канал - 8 канал - 8 канал International - Первый канал - Первый канал Евразия - Чижик - Cinema - Cinemax - Cine+ - Cine+ Hit - Cine+ Kids - Classic Music - Clubbing TV - C More Fotboll HD - C More Hockey HD - CNBC [US] - CNN International - Comedy Central [PL] - Continent E - Крым 24 - ČT1 - ČT2 - ČT24 - Cum4k UHD - Дача - Das Erste - Da Vinci Learning - DAZN LALIGA 2 [ES] - DAZN LALIGA [ES] - День Победы - Детский мир - Диалоги о рыбалке - Diema Sport 2 - Diema Sport 3 - Diema Sport - DIGI Sport 1 - DIGI Sport 2 - DIGI Sport 3 - DIGI Sport 4 - Дикая охота HD - Дикая рыбалка HD - Дом - Discovery Channel - Discovery Science - Доктор - Домашние животные - Домашний - Домашний International - Дом кино - Дом кино Премиум - Дон 24 - Дорама - Dorcel XXX - Драйв - ducktv - ducktv plus - Dynamo Kyiv TV - Еда - Eesti Kanal - English Class - English Club TV - Epic Drama - Equalympic - Eromania 4K - Erox - ERTIS - Eska Rock TV - Eska TV - Eska TV Extra - ESPN2 [US] - ESPN [US] - Еспресо TV - Евразия - Eurochannel - Eurosport 1 - Eurosport 2 - Eurosport 4K - Еврокино - Extasy TV - Fashion One - Fashion TV - Fast Sports 1 - Fast Sports 2 - Fast Sports - Фауна - Fenerbahçe TV - FilmZone [EE] - FlixSnip - Food Network - FoodTime - Fox Business [US] - Fox News - France 24 - Fresh TV - Пятница! - Пятница! International - Футбол - FX - FX Life - Galatasaray TV - ОТБ Галичина - Gametoon - Genuine TV - GINX Esports TV - Глазами туриста - GNC Америка - TV3 Sport 2 - TV3 Sport 3 - TV3 Sport Open - Gold TV - Golf Channel [US] - Грозный - Губерния - Губерния 33 - Gulli - HBO2 HD - HBO3 HD - HBO HD - Точка.РФ - HD Медиа - HGTV - H2 [PL] - History - Хит - HIT TV - HITV - Hollywood - Home 4K - Надежда - Надія - Hustler HD - Hustler TV - Хузур ТВ - ICTV2 - ID Fashion - Индия - Индийское кино - Info TV - Init Ekstra TV - Init TV - Insight UHD - История - Известия - Jambyl - JimJam - Just TV - Калейдоскоп ТВ - Камеди - Капитан Фантастика - Катунь 24 - Кавказ 24 - KBS World - Kentron TV - Хабар - Kids TV - Kidzone Max - Kidzone Mini - Кинеко - Kino 1 - Kino 2 - Кино 18+ - Кино 18+ International - Kino 24 - Кинохит - Kinojam 1 - Kinojam 2 - Кинокомедия - KinoLiving - Киномикс - Kino Polska Muzyka International - Кинопремьера - Киносат - Киносемья - Киносерия - КиноСезон - Киносвидание - Кино UHD - Киноужас - Kinowood - KION Хит - Ключ - Kokshe - Конный мир - Крик-ТВ - Кто есть кто - Кубань 24 - Кухня ТВ - Кус-кус - Квартал ТВ - КВН ТВ - Київ - Lale - Latvijas Šlāgerkanāls - ЛДПР ТВ - Легендарный 24 - Домашний магазин - Leo TV - Лёва - Липецкое время - Live Music Channel HD - LNK - LRT Lituanica - LRT Televizija - LTV1 - LTV7 - Luxury - Magnat - Майдан - Мама - Mangystay - Матч! - Матч! Арена - Матч! Боец - Матч! Футбол 1 - Матч! Футбол 2 - Матч! Футбол 3 - Матч! Игра - Матч! Планета - Матч! Премьер - Матч! Страна - Матур ТВ - MAX Sport 1 - MAX Sport 2 - MAX Sport 3 - MAX Sport 4 - MCM Pop - MCM Top - Medeniyyet TV - Мега - Mezzo - Mezzo Live HD - Milady Television - Milan TV - Миллет - Министерство идей - Мир 24 - Мир баскетбола - Мир Белогорья - Мир - Мир сериала - MLB Network [US] - MMA-TV - Moldova 1 - Moldova 2 - Мордовия 24 - Московский образовательный - Классика Кино - Movify Kino - Моя Планета - Моя стихия - MSNBC [US] - MTV DE - MTV Hits - MTV Live [US] - MTV Live HD - MTV U [US] - Мульт - Мультиландия - Мультимузыка - КТРК Музыка - Мужское кино HD - Мужской - Mūzikas Video Kanāls - MuzLife - Muzsika TV - Муз-ТВ - Музвар - Музыка Первого - MuzZone - N4 - Нано - Наша Сибирь - Наша тема - Наш дом - Любимое кино - Наше Мужское - Наше новое кино - Наш КиноМир - Наш Кинопоказ - National Geographic - Nat Geo Wild - Наука - Nautical Channel - NBA TV [US] - Неизвестная Планета - NewsMax TV [US] - NewsNation US - NFL Network [US] - NHK World - NHL Network [US] - Nickelodeon - NickMusic - Nicktoons - Niki Junior - Niki Kids - Нижний Новгород 24 - ННТ - ННТВ - Ностальгия - Nova Sport - Nova Sport 1 - Nova Sport 2 - Nova Sport 3 - Nova Sport 4 - Новый мир - Now Rock - НСТ - НТА - НТК - НТМ - НТН - НТВ - НТВ-Америка - НТВ-Беларусь - НТВ-Хит - НТВ Право - НТВ Сериал - НТВ Стиль - О2ТВ - О! - OBOZ TV - Ocean TV - Óčko - Óčko Black - Óčko Expres - Óčko Star - Охотник и рыболов - Охота и рыбалка - О!Кино - ONE - One Planet - ОНТ - Ontustik - Orizont TV - Оружие - Осетия-Ирыстон - Открытый мир - ОТС - Оце - ОТВ Сахалин - Перший автомобільний - Перший Західний - Первый информационный - Первый крымский - Первый Космический - Первый Псковский - Первый тульский - Первый вегетарианский - Пес и Ко - Pingvīns - Пингвин Лоло - Playboy TV - Play TV - ПлюсПлюс - Победа - Поехали! - Polonia 1 - Polsat 2 - Polsat - Polsat Cafe - Polsat Doku - Polsat Film - Polsat Games - Polsat News 2 - Polsat News - Polsat Play - Polsat Rodzina - Polsat Seriale - Polsat Sport 1 - Polsat Sport 2 - Polsat Sport 3 - Polsat Sport Fight - Polsat Sport Premium 1 - Polsat Sport Premium 2 - Polsat Viasat Explore - Polsat Viasat History - Polsat Viasat Nature - Прямий - Прима - Private Spice - Private TV - ПРНК - PRO Business - Продвижение - ProKino - Про Любовь - ProSieben - Просвещение - Provence - Психология 21 - PTV - Qostanai - Quiz TV - Qyzyljar - Qyzylorda - Радио Шансон - Радость моя - Rai News 24 - RAI Sport - Раменское ТВ - Ратник - Real Madrid TV - .red - Redlight HD - Красная линия - Red Lips - Рен ТВ - Ретро - Revolt TV [US] - Рівне 1 - Родное кино - Родной канал - RTG TV - РТР-Беларусь - РТР-Планета Азия - РТР-Планета Европа - RTVi - Setanta Sports - Русский экстрим - Russian Extreme Ultra HD - Russian MusicBox - Русская ночь - Русский бестселлер - Русский детектив - Русский иллюзион - Русский роман - Русский Север - RU.TV - Рыжий - РЖД ТВ - Соль ТВ - Салям - Санкт-Петербург - San Porto - Сапфир - Сарафан - Саратов 24 - Saryarqa - .sci-fi - SCT - Sea TV - Semei - Севастополь 24 - 7ТВ - Север - SextoSenso - Шалун - Шаян ТВ - Shop24 - Shopping Live - Shot TV - Сила - Шелк - Сказки Зайки - SmartZone - Смайлик ТВ - Сочи24 - Солнце - Советские мультфильмы - Советское кино - Союз - Спас - Spectrum SportsNet [US] - Sport 1 - Sport 1 Baltic - Sport 2 Baltic - КТРК Спорт - Sportdigital Fussball - Sport Klub 1 [HR] - Sport Klub 2 [HR] - Sport Klub 3 - Sport Klub 4 - Sport Klub 5 - SPOTV2 - SPOTV - Старт - Start Air - Старт Триумф - Start World - C Music TV - Stingray iConcerts - Страшное HD - СТС - СТС Love - СТБ - Суббота! - Супергерои - Super+ - Super Polsat - Super RTL HD - Сургут 24 - Сварожичи - Светлое ТВ - Світло - Т24 - Тамыр - Тайна - TBN Armenia - Театр - Tele 5 - Телекафе - Теледом - Телевсесвіт - Тернопіль 1 - Терра - Terra - Терра Инкогнита - TiJi - Timeless Dizi Channel - ТипТоп - Tivibu Spor 2 [TR] - Tivibu Spor 3 [TR] - Тивиком - TLC - TMTV - ТНТ4 - ТНТ4 International - ТНТ - ТНВ-Планета - Точка отрыва - Тольятти 24 - Совершенно секретно - Top Shop TV - Trace Sport Stars - Trace Urban - Travel Channel - Travel+Adventure - Трофей - TRT Avaz [TR] - Центр Красноярск - TSN1 - TSN2 - TSN3 - TSN4 - TSN5 - ТСВ - Туган Тел - Turkistan - Тюсо - ТВ3 International - TV3 Life - TV3 Mini - TV3 Sport - ТВ Центр - ТВ Центр International - TV Extra - TV Губерния - TVMChannel - TVP 3 Warszawa - TVP ABC - TVP Dokument - TVP HD - TVP Historia - TVP Info - TVP Kobieta - TVP Kultura 2 - TVP Kultura - TVP Nauka - TVP Polonia - TVP Rozrywka - TVP Seriale - TVP Sport - TV Puls - TVP World - Дождь - TV XXI - Тюменское время - Ю - Учалы ТВ - Удмуртия - Ultra HD Cinema - Ulytau - Уникум - Univer TV - Неизвестная Россия - Усадьба - Успех - UTV Уфа - Варяг - Вестник Надыма - VF Cartoon 18+ - В гостях у сказки - VH1 - VHS-ка - Viasat Kino - Viasat Kino Action - Viasat Kino Comedy - Viasat Kino Megahit - Viasat Kino World - H2 - viju Explore - viju History - viju Nature - viju+ Comedy - viju+ Megahit - viju+ Planet - viju+ Premiere - viju+ Serial - viju+ Sport - viju TV1000 - viju TV1000 Action - viju TV1000 Русское - Витебск - VIVA Russia - Вместе-РФ - Волга - Волгоград 1 - Волгоград 24 - Вопросы и ответы - Восток ТВ - Время - TV1 - V Sport Golf - V Sport Motor - Warner TV - TNT Comedy - TNT Film - TNT Serie - World Business Channel - World Fashion Channel - W-Sport - Xsport - Xsport+ - XXL - Якутия 24 - Yes 2 - Yes Docu - yes Movies Kids - YOSSO TV SEXY - Юрган - Ювелирочка - Загородная жизнь - Загородный - Загородный International - Зал суда - ZDF - Здоровое ТВ - Жара - Жар Птица - Живая планета - Живая природа - Zoom - ZooПарк - Zoo TV - Звезда - Звезда Плюс - Звязда - + + + Горящий камин + 1HD Music + Первый областной Благовещенск + ТВ2 Могилёв + 2x2 (+2) + 2x2 (+4) + 2x2 (+7) + TV3 Gold [EE] + 3+ (Латвия) + 4fun + 4fun Fit&Dance + 4fun Kids + 4K Русское кино + 4 канал (Екатеринбург) + 5 TV [AM] + 5 канал (Таганрог) + 5 канал (Караганда) + Пятый канал +2 + Пятый канал +4 + Пятый канал +7 + 5 канал (Україна) + 5Sport Gold + 5Sport Live + 5Sport Plus + 5Sport Stars + 6 канал (Владимир) + 6 ТВ + 7 канал (Нефтеюганск) + 7 канал (Красноярск) + 7 канал (Казахстан) + 8 канал Беларусь + 8 канал (Красноярский край) + 8 канал (Новосибирск) + 8TV [LV] + 8 канал (Владивосток) + 9 канал (Израиль) + 10 канал / РенТВ Саранск + Десятка (Новокузнецк) + 11 канал Днепр + 11 канал (Усолье) + 12 канал Омск + 13 Ulica [PL] + 21 канал (Ужгород) + 24 [UA] + 25 регион (Владивосток) + 26 регион + 31 канал (Челябинск) + 31 канал (Казахстан) + 36,6 TV + 41 регион (Петропавловск-Камчатский) + 43 канал (Туапсе) + 49 канал + UA:Дніпро + 77TV + 86 Сургут + 360° International + 360TV (Латвия) + 360° Подмосковье + A2 HD [TR] + A Haber HD + A News HD + A Para HD + A Spor HD + Абакан 24 + ACC Network [US] + Ачинское телевидение + Active Family [PL] + Adventure in 90's + Adventure [PL] + Афонтово Красноярск + Айғак + Аист + AIVA + Актис + Аква ТВ + Al Jazeera International + Алау + Ale Kino+ HD + Алматы + AMC + A HOME OF HBO 1 + A HOME OF HBO 2 + Angel TV + Animal Planet HD + Animal Planet [PL] + Animaux + Funny Kids + Anime TV + Antena 1 RO + Анжерское ТВ + Апостроф TV + Аппетитный + Aquarium 4K + Arena4 [HU] + Arena Adrenalin [RS] + Arena Esport [RS] + Arena Fight HD + Arena Premium 1 + Arena Premium 2 + Arena Premium 3 + Arena Sport 1 HD [RS] + Arena Sport 1 [HR] + Arena Sport 1 [SK] + Arena Sport 1 [SI] + Arena Sport 2 HD [RS] + Arena Sport 2 [HR] + Arena Sport 2 [SK] + Arena Sport 2 [SI] + Arena Sport 3 HD [RS] + Arena Sport 3 [HR] + Arena Sport 3 [SI] + Arena Sport 4 HD [RS] + Arena Sport 4 [HR] + Arena Sport 4 [SI] + Arena Sport 5 HD [RS] + Arena Sport 5 [HR] + Arena Sport 6 HD [RS] + Arena Sport 6 [HR] + Arena Sport 7 HD [RS] + Arena Sport 7 [HR] + Arena Sport 8 HD [RS] + Arena Sport 8 [HR] + Arena Sport 9 [HR] + Arena Sport 9 [RS] + Arena Sport 10 [HR] + Arena Sport 10 [RS] + Arena Tenis [RS] + Ариг Ус 24 HD + Arirang + Арктик-TV + Арктика 24 + Армения ТВ + Armnews [AM] + Арт + Arte HD + ARTN + Астана + Астрахань Live + Astro Arena 1 HD + Astro Arena 2 HD + Astro Arena Bola 1 + Astro Arena Bola 2 + Astro Badminton + Astro Sports Plus + Astro Premier League HD + Astro Premier League 2 HD + Astro Grandstand HD + Astro Football HD + Astro Sports UHD + АСТВ Южно-Сахалинск + Асыл Арна + ATV Армения + ATV HD [TR] + АТВ-Медиа + АТВ-Ставрополь + Auto Moto Sport Channel [DE] + AXN Black HD + AXN HD + AXN Spin HD + AXN White HD + AzTV + Babes TV + Baby TV + Балашиха ТВ + Балет Опера + Balkanika + Balticum Platinum + Balticum HD + Barely Legal + Barely Legal Украина + Барс + Батайск ТВ + BBC + BBC America [US] + BBC Brit [PL] + BBC CBeebies [PL] + BBC Earth [PL] + BBC First [PL] + BBC Four [UK] + BBC Lifestyle [PL] + BCU Action HD + BCU Catastrophe HD + BCU Cinema HD + BCU Cinema+ HD + BCU Comedy HD + BCU Cosmo HD + BCU Cosmo HDR + BCU Criminal HD + BCU Fantastic HD + BCU FilMystic HD + BCU History HD + BCU Kids HD + BCU Kids 4K + BCU Kids+ HD + BCU Kinorating HD + BCU Кинозал Premiere 1 HD + BCU Кинозал Premiere 2 HD + BCU Кинозал Premiere 3 HD + BCU Little HD + BCU Marvel HD + BCU Premium Marvel 4K HDR + BCU Kinozakaz + BCUMedia Premium 4K HDR + BCU Мультсериал HD + BCU Premiere HD + BCU Premiere Ultra 4K + BCU Premium Action 4K HDR + BCU Premium Comedy 4K HDR + BCU Premium Crime 4K HDR + BCU Premium Fantastic 4K HDR + BCU Premium Franchise 4K HDR + BCU Premium History 4K HDR + BCU Premium Horror 4K HDR + BCU Premium Kids 4K HDR + BCU Premium Kinozakaz 4K HDR + BCU Premium Kinozakaz+ 4K HDR + BCU Premium 80 лет Победы 4K HDR + BCU Premium Premiere 4K HDR + BCU Premium Premiere+ 4K HDR + BCU Premium Russian 4K HDR + BCU Premium СССР 4K HDR + BCU Reality HD + BCU Romantic HD + BCU RUSerial HD + BCU Russia 90s + BCU Russian HD + BCU Кинозал СССР + BCU СССР HDR + BCU Stars HD + BCU Survival HD + BCU Сваты HD + BCU Сваты 4K + BCU TruMotion HD + BCU Ultra 4K + BCU VHS HD + beIN Sports 1 [FR] + beIN Sports 2 [FR] + beIN Sports 3 [FR] + beIN Sports 1 [UK] + beIN Sports 1 Singapore + beIN Sports 1 [TR] + beIN Sports 2 [UK] + beIN Sports 2 Singapore + beIN Sports 2 [TR] + beIN Sports 3 Singapore + beIN Sports 3 [TR] + beIN Sports 4 [TR] + beIN Sports 4K + beIN Sports 5 [TR] + beIN Sports FTA + beIN Sports Haber [TR] + beIN Sports Max 1 [TR] + beIN Sports Max 2 [TR] + beIN Sports Xtra [US] + Беларусь 1 HD + Беларусь 2 HD + Беларусь 3 HD + Беларусь 4 Брест + Беларусь 4 Гомель + Беларусь 4 Гродно + Беларусь 4 Могилев + Беларусь 4 Витебск + Беларусь 5 HD + Беларусь 5 Интернет + Беларусь-24 + МузТВ Беларусь + BelSat + Белвиасат +ТВ + Best4Sport TV + Best4Sport 2 + BET Gospel [US] + BET Her [US] + BET Jams [US] + BET Soul [US] + Beyaz TV HD TR + BG Music Channel + Big Ten Network [US] + Бiгудi + Бийское ТВ + Блокбастер HD + Bloomberg + Bloomberg HT TR + Blue Hustler 24 + Blue Hustler Украина + Bolajon Telekanali [UZ] + Большой эфир + Bolt Россия + Boomerang + BOX Anime HD + BOX Apocalypse HD + BOX AutoTrend HD + BOX Be ON Edge HD + BOX Be ON Edge 1 Live HD + BOX Be ON Edge 2 Live HD + BOX Be ON Edge 3 Live HD + BOX Cyber HD + BOX Docu. HD + BOX Fantasy HD + BOX Franchise HD + BOX Franchise HDR + BOX Game HD + BOX Gangster HD + BOX Ghost HD + BOX Gurman HD + BOX History 4K + BOX Hybrid HD + BOX Kosmo 4K + BOX LoFi HD + BOX M.Serial HD + BOX Memory HD + BOX Metall HD + BOX Music 4K + Box Music TV BG + BOX Mayday HD + BOX Oscar HD + BOX Premiere+ 4K HDR + BOX Relax 4K + BOX Remast 4K + BOX Remast+ 4K + BOX RU.RAP HD + BOX Russian 4K + BOX Serial HD + BOX Serial 4K + BOX Serial Premiere 4K + BOX Sitcom HD + BOX Sport 1 Live HD + BOX Sport 2 Live HD + BOX Sport 3 Live HD + BOX Sport 4 Live HD + BOX Sport 5 Live HD + BOX Sport 6 Live HD + BOX Sport 7 Live HD + BOX Sport 8 Live HD + BOX Sport 9 Live HD + BOX Sport 10 Live 4K + BOX Sport 11 Live 4K + BOX SportCast HD + BOX SportCast Live 1 HD + BOX SportCast Live 2 HD + BOX SportCast Live 3 HD + BOX SportCast Live 4 HD + BOX SportCast Live 5 HD + BOX SportCast Live 6 HD + BOX SportCast Live 7 HD + BOX SportCast Live 8 HD + BOX SportCast Live 9 HD + BOX Spy HD + BOX SR Sport 2 Live 4K HDR + BOX SR Sport 3 Live 4K HDR + BOX SR Sport 4 Live 4K HDR + BOX SR Sport 4K HDR + BOX SR Sport 1 Live 4K HDR + BOX СССР 4K + BOX Stories HD + BOX Travel HD + BOX Travel Premiere HD + BOX UltraStars 4K + BOX Western HD + BOX Zombie HD + Brazzers TV + Brazzers TV Россия + Брянск 24 + Брянская Губерния + Bridge TV Deluxe + Bridge TV + Bridge TV Classic + Bridge TV Hits + Bridge TV Этно + Bridge TV Фрэш + Bridge TV Rock + Bridge TV Русский хит + Bridge TV Шлягер + БСТ Братск + BT Sport 1 HD + BT Sport 2 HD + BT Sport 3 HD + BT Sport 4 HD + BT Sport 5 HD + BT Sport 6 HD + BT Sport 7 HD + BT Sport 8 HD + BT Sport 9 HD + BT Sports 10 HD + BT Sport 4K + БТВ + Буряад ТВ + C-Cartoon + C-Comedy + C-History + C-Holiday + C-Inquest + Citrus Live HD + C-Marvel + Canal 11 [PT] + Canal+ 1 HD + Canal+ 4K + Canal+ Dokument HD + Canal+ Domo HD + Canal+ Extra 1 [PL] + Canal+ Extra 2 [PL] + Canal+ Extra 3 [PL] + Canal+ Extra 4 [PL] + Canal+ Extra 5 [PL] + Canal+ Extra 6 [PL] + Canal+ Extra 7 [PL] + Canal+ 360 [PL] + Canal+ Film HD + Canal+ Foot [FR] + Canal+ Kuchnia HD + Canal+ Premier League [FR] + Canal+ Premium HD + Canal+ Seriale HD + Canal+ Sport 2 [CZ] + Canal+ Sport 360 [FR] + Canal+ Sport 1 [PL] + Canal+ Sport 2 [PL] + Canal+ Sport 3 [PL] + Canal+ Sport 4 [PL] + Canal+ Sport 5 [PL] + Canal+ Sport [CZ] + Canal+ Sport [FR] + Candy + CandyMan + Cartoon Classics + Cartoons 90 + Cartoons Big + Cartoons Short + CCTV4 + CCTV-Русский + ЦТ + Channel 11 IL + Channel 12 IL + Channel 13 IL + Чаваш ЕН + Че + Че +2 + Че +4 + Че +7 + Чемодан + CI Polsat + Cine+ Legend HD + Cine+ Mix + Cinema Cosmos TV + Cinema 1 MD + CineMan + CineMan Action + CineMan Air Crash + CineMan Комедия + CineMan Фитнес + CineMan Криминальные Сериалы + CineMan Катастрофы + CineMan Kids 4K + CineMan Комедийные сериалы + CineMan Лесник + CineMan Marvel + CineMan Melodrama + CineMan MiniSeries + CineMan Ментовские Войны + CineMan OLD 4K + CineMan ПёС + Лихач + CineMan Premium + CineMan Relax 4K + CineMan РуКино + CineMan Симпсоны + CineMan Скорая помощь + CineMan CCCP 4K + CineMan CCCP FHD + CineMan Сваты + CineMan Thriller + CineMan Top + CineMan Ужасы + CineMan VHS + CineMan Военные Сериалы + Cinemax 2 + City TV [BG] + СК1 + Clarity4K Anime + Clarity4K Asia + Clarity4K Авто Блог + Clarity4K Боевик + Clarity4K Боевик VHS + Clarity4K HDR Cinema MIX 1 + Clarity4K HDR Cinema MIX 2 + Clarity4K HDR Cinema MIX 3 + Clarity4K HDR Cinema MIX 4 + Clarity4K HDR Cinema MIX 5 + Clarity4K HDR Cinema MIX 6 + Clarity4K HDR Cinema MIX 7 + Clarity4K HDR Cinema MIX 8 + Clarity4K HDR Cinema MIX 9 + Clarity4K HDR Cinema MIX 10 + Clarity4K Комедия VHS + Clarity4K Драмы + Clarity4K Единоборства + Clarity4K Фантастика + Clarity4K Фантастика (siries) + Clarity4K Фэнтези + Clarity4K Galaxy Films + Clarity4K Gamefilm + Clarity4K HBO series + Clarity4K Ужасы VHS + Clarity4K Kинодети CССР + Clarity4K КиноФраншизы + Clarity4K КиноНовинки + Clarity4K КиноШарм + Clarity4K Комедия + Clarity4K Комедия СССР 1 + Clarity4K Комедия СССР 2 + Clarity4K Космомир + Clarity4K Космомир 2 + Clarity4K Marvel + Clarity4K Молодежные комедии + Clarity4K Мультимир + Clarity4K Мультляндия + Clarity4K Наше кино + Clarity4K Netflix + Clarity4K Приключения + Clarity4K Travel Blog + Clarity4К Города + Clarity4K Ретро-Сказка 1 + Clarity4K Ретро-Сказка 2 + Clarity4K Русские сериалы + Clarity4K КиноСССР + Clarity4K Семейный + Clarity4K Сумеречный Эфир + Clarity4K Театр + Clarity4K Триллер + Clarity4K UFO + Clarity4K Вселенная + Clarity4K Ужасы + Clarity4K Ужасы VHS (siries) + Clarity4K Walt Disney + Clarity4K Классика кино + Clarity4K Запал + Clarity4K Звериный мир + Clubland UK + C More Mix HD + CNBC + GNC Европа + GNC Сибирь + CNN TÜRK HD + Comedy Stage + Comedy Hub + Courtside 1891 + Crime Golden + Crime Today + ČT4 Sport + Curiosity Stream + D1 + Da Vinci Learning Europe + Дайвинг.TV + DAZN 1 [ES] + DAZN 2 [ES] + DAZN F1 [ES] + DAZN 1 HD + DAZN 2 HD + Deejay TV [IT] + Delfi.TV + Deluxe Music [DE] + DetectiveJam + Детское кино (TvikselTV) + Детское кино International + Детское кино + Deutsche Welle Europe + Deutsche Welle Russia + Девятка ТВ + Девон-Инфо + Digi 4K [RO] + Digital Desire HD + DIGI World RO + Дикий HD + Discovery Channel [PL] + Discovery Historia [PL] + Discovery Life [PL] + Discovery Science [PL] + Disney + Disney Channel [PL] + Disney Junior [PL] + Disney XD [PL] + DiviSport + DMAX HD TR + ДнiпроTV + DocuBox HD + Домашний +2 + Домашний +4 + Домашний +7 + Дом кино International + Домашний Очаг [KZ] + Домодедово + Dorcel + Достық [KZ] + Доверие + Dream Türk [TR] + DSTV [BG] + DTX [PL] + ДумаТВ + Duo 5 LV + Duo 7 [EE] + Duo 7 [LV] + Duo One [EE] + Душевное SD + Душевное HD + Дзержинск ТВ + E! Entertainment [PL] + Телеканал Е HD + EarthTV The World Live + Эх! + Эхо TV + Эхо ТВ 24 + Еда Премиум Int. HD + Edge Sport HD DE + Эфир + ЕГЭ + Эко-ТВ + DAZN 1 PT + DAZN 2 PT + DAZN 3 PT + DAZN 4 PT + DAZN 5 PT + DAZN 6 PT + Eleven Sports 1 [PL] + Eleven Sports 2 [PL] + Eleven Sports 3 [PL] + Eleven Sports 4 [PL] + Енисей регион + Enter-фильм + Epic + eQtv + Эра + Еркир Медия (Армения) + EroLuxe 4k + EroLuxe 4k60fps + EroLuxe 60fps + EroLuxe Anal + EroLuxe Asian + EroLuxe Babysitter + EroLuxe BBW + EroLuxe BDSM + EroLuxe BigCock + EroLuxe Blonde + EroLuxe Blowjob + EroLuxe Brunette + EroLuxe Cheerleader + EroLuxe Cinema + EroLuxe Cosplay + EroLuxe Creampie + EroLuxe Cuckold + EroLuxe Ebony + EroLuxe FakeTaxi + EroLuxe Fisting + EroLuxe FootFetish + EroLuxe Gangbang + EroLuxe Gays + EroLuxe Gloryhole + EroLuxe Henati + EroLuxe Japanese + EroLuxe Lesbians + EroLuxe Massage + EroLuxe MILF + EroLuxe Orgy + EroLuxe Parody + EroLuxe POV + EroLuxe Pregnant + EroLuxe PublicAgent + EroLuxe RedHeads + EroLuxe Russian + EroLuxe Schoolgirl + EroLuxe Shemale + EroLuxe Solo + EroLuxe Stepfamily + Erox (Украина) + Eroxxx HD + ESPN 1 [NL] + ESPN 2 [NL] + ESPN 3 [NL] + ESPN3 [US] + ESPN 4 [NL] + ESPN News [US] + ESPN U [US] + Ethno World + Етно канал HD + ETV2 Эстония + ETV Эстония + ETV+ Эстония + EU.Music + EuroNews + Euronews (английский) + Европа Плюс ТВ + Eurosport 1 [PL] + Eurosport 2 [PL] + Евпатория 24 + EWTN Украина + Экспресс + Extasy 4K + Extreme Channel [PL] + Extreme sports + Extreme Sports [RU] + Exxxotica HD + FamilyJam + FAN HD + Fashion One 4K + Fashion TV Europe + FashionBox HD + Fast&FunBox HD + FEN TV [BG] + FEN TV Folk [BG] + Феникс+ Кино + Festival 4K + Fight Network [US] + FightBox HD + FightBox [PL] + FightKlub [PL] + FightTVPlus + FilmBox Action [PL] + FilmBox ArtHouse + FilmBox Arthouse [PL] + FilmBox Extra [PL] + FilmBox Family [PL] + FilmBox Premium [PL] + FilmBox Russia + Film.Ua Drama + FilmZone [LT] + FilmZone [LV] + FilmZone+ [EE] + FilmZone+ [LT] + FilmZone+ [LV] + FiredUp Network + Food Network Европа + Food Network [PL] + Foodman.club + Мяч + NOW TR + Fox Soccer Plus [US] + FOX Sports HD [AR] + Fox Sports [MX] + FOX Sports 2 HD [AR] + Fox Sports 2 [MX] + FOX Sports 3 HD [AR] + Fox Sports 3 [MX] + France 24 Arabian + France 24 English + France 24 Francais + FrenchLover + Fresh Adventure + Fresh Cinema + Fresh Comedy + Fresh Family + Fresh Fantastic + Fresh Horror + Fresh Kids + Fresh Premiere + Fresh Rating + Fresh Romantic + Fresh Russian + Fresh Series + Fresh Soviet + Fresh Thriller + Fresh VHS + Фронт + Fashion TV 4K + FTV Telekanali [UZ] + Fubo Sports Network [US] + Fuel TV HD + FunBox UHD + Futbol TV Telekanali [UZ] + FX Comedy [PL] + FX [PL] + FX Sports 1 [US] + FX Sports 2 [US] + FX HD TR + Gags Network + Galaxy-TV + ГИС Самара + Глазами туриста 4K + GLN 24 (Геленджик) + Go3 Sport 4 + Gold Line Brief + Gold Line Chef + Gold Line Детектив + Gold Line Evidence + Gold Line Exist + Gold Line Girlfight + Gold Line Hostage + Gold Line Island + Gold Line Motivation + Gold Line Naked&Funny + Gold Line Невский + Gold Line Psycho + Gold Line Series + Gold Line Survival + Golf+ [FR] + Город + Город 24 + Городской телеканал Ярославль + Госфильмофонд. Машина времени + Гродно Плюс + Губерния Самара + Hajduk TV [HR] + Халык Арна + HGTV [PL] + HISTORY [PL] + Viasat History Baltic + Hollywood HD + Horror TV + Ictimai + ICTV Серіали + ICTV + ID Xtra EU + Idman + Игра + Iльдана + Иллюзион + + Импульс Севера + Индийское кино International + Инфо 24 (Шадринск) + Информационный Канал Севастополя + InRating + Insight TV HD + Инсит-ТВ + Insomnia HD + Интекс Барановичи + Inter TV + Iнтер+ + Iнтер + InUltra [PL] + Ирбис + Исландия + iTV [LV] + ITV [UA] + Ивановское общественное телевидение + Ижевск + JimJam Polsat + JOJ Šport 2 [CZ] + JOJ Sport [CZ] + Jukebox [DE] + juQ Comedy + juQ Ужасы + juQ-World + JurnalTV + К1 + К2 + К16 + Кабардино-Балкария + Kabel 1 + Kabel 1 Classics + Kabel 1 Doku + Kanal 2 (Эстония) + Kanal 7 HD TR + Duo 4 EE + Канал 12 Череповец + Duo 5 EE + Kanal D HD + Караван ТВ + Карибу + Карусель (+2) + Карусель (+3) + Карусель (+4) + Карусель (+7) + Карусель (+8) + Каскад-24 + Kazakh TV + Казахстан + KAZsport + KBC+100500 + KBC-Animals + KBC-Aниме + KBC-Comics + KBC-Драмаtic + KBC-Elite Comedys + KBC-Family Animation + KBC-Fantastic + KBC-Goblin + KBC-History + KBC-Кошмарное + KBC-Союзмультzal + KBC-MusKino + KBC-Наш Rock + KBC-Newfilm + KBC-Гай Ritchie And Tarantino + KBC-Russian Комедия + KBC-Сказочный Remake + KBC-СпортМикс + KBC-Шпионское + KBC-Страна СССР + KBC-Ultra + KBC-Видак + KBC-ВОВ + KBC-WAR + KBC-Вестерн + Kernel TV Аладдин + Kernel TV Алиса + Kernel TV Аниме + Kernel TV Барбоскины + Kernel TV Бен 10 + Kernel TV Буба + Kernel TV Бумажный дом + Kernel TV Царевны + Kernel TV Черепашки ниндзя + Kernel TV Чёрный плащ + Kernel TV Чип и Дейл + Kernel TV Доктор + Kernel TV Драконы и всадники Олуха + Kernel TV Фиксики + Kernel TV Финис и Ферб + Kernel TV Футурама + Kernel TV Герой + Kernel TV Подружки + Kernel TV Гравити Фолз + Kernel TV Губка Боб Квадратные Штаны + Kernel TV Счастливого нового года + Kernel TV Интерны + Kernel TV Команда Турбо + Kernel TV Комедия + Kernel TV Космос + Kernel TV Леди Баг и Супер Кот + Kernel TV Лего + Kernel TV Лило и Стич + Kernel TV Люк путешественник во времени + Kernel TV Лунтик + Kernel TV Магия + Kernel TV Мой маленький Пони + Kernel TV Малыш + Kernel TV Марвел vs DC + Kernel TV Мервел сериалы + Kernel TV Маша и Медведь + Kernel TV Ми-ми-мишки + Kernel TV МиниФорс + Kernel TV Новинки + Kernel TV Щенячий патруль + Kernel TV Пушистики + Kernel TV Русалочка + Kernel TV Шкодники + Kernel TV Смешарики + Kernel TV Сонник Бум + Kernel TV Человек-паук + Kernel TV Супер крылья + Kernel TV Сваты + Kernel TV Тимон и Пумба + Kernel TV Том и Джерри + Kernel TV Три кота + Kernel TV Утиные истории + Kernel TV Винни и его друзья + Kernel TV Время + Kernel TV Звёздные войны + Хит HD + Кино 1 + Кино 1 International + Кино 2 + Kino 7 [LV] + Кино без границ + Кино и Жизнь + Кино Стрим Live + КиноТВ + Kino TV HD + КиноТВ (+4) + КиноТВ (+7) + КиноБоевик KZ + KinoKazka + Кинокомедия International + КиноКульт + Кинолента 24 + Киномикс International + Киномульт + Кинопоказ SD + Кинопоказ HD + Kino Polska HD + Kino Polska Muzyka HD + Кинопремьера International + Киносемья International + Киносерия International + Киносвидание International + Kinosweet + Киноужас International + Kinowelt + Кинохит International + Kiss TV RO + Köktem + Колыма-Плюс + Комедийное SD + Комедийное HD + Компас ТВ + Конгресс ТВ + Конкурент.Україна + Королев ТВ + Котлас ТВ + Краснодар + Криминальное HD + КТК + КТВ-Луч (Сызрань) + Россия К + Россия К +2 + Россия К +4 + Россия К +7 + Суспільне Культура + Кунел ТВ Татарстан + Курай + Кузбасс Первый + КХЛ ТВ + КХЛ HD + Київ FM + Музыка Live + Ladies Story HD + LaLiga TV Hypermotion [ES] + Ланет Relax + Лапки Live + Лавстори + Лавстори HD + Легенда + Лента + Liberty Аниме + Liberty Аванпост + Liberty Автогир + Liberty Азия 4K HDR + Liberty BBC + Liberty Бебимульт + Liberty Боевики + Liberty Боевики 4K HDR + Liberty DC + Liberty Disney + Liberty Документалка + Liberty Драма 4K HDR + Liberty Dreamworks + Liberty Эротика + Liberty Fan + Liberty Фан 4K HDR + Liberty Индия + Liberty Кино ENG + Liberty Кино Микс + Liberty Кино UKR + Liberty Кино UKR 4K + Liberty Кинохит 4K HDR + Liberty Комедии + Liberty Комедии 4K HDR + Liberty Короткометражный + Liberty Криминал + Liberty Крош + Liberty Куб + Liberty Легенда + Liberty Marvel + Liberty Медивал 4K + Liberty Мелодрамы + Liberty МиксMusic + Liberty Мим + Liberty Мульт + Liberty Мульт ENG + Liberty Мультверсия FHD + Liberty Мульт UKR + Liberty Мульт UKR 4K + Liberty Мюзикл + Liberty Наука + Liberty Netflix + Liberty Оскар 4K HDR + Liberty Pixar + Liberty Планета360 + Liberty Планктон + Liberty Приключения 4K HDR + Liberty РусФильм + Liberty Семейный + Liberty Сериал + Liberty Сериалы + Liberty Шоу + Liberty Симпсоны + Liberty Скандинавия 4K HDR + Liberty Сказки + Liberty South Park + Liberty Союз + Liberty Сваты + Liberty Триллеры + Liberty ТуркФильм + Liberty Ужасы + Liberty Ужасы 4K HDR + Liberty XX Век + Liberty Занавес + Лида + Lietuvos ryto televizija + Липецк 24 + Liuks! + Лен ТВ 24 + Love Nature 4K + LRT Kultūra + Луч + Луч (ЯНАО) + Luxe HD + Luxury HD + М1 + М2 + M4 Sport [HU] + M6 Music [FR] + M+ Deportes 2 [ES] + M+ Deportes 3 [ES] + M+ Deportes 4 [ES] + M+ Deportes 5 [ES] + M+ Deportes 6 [ES] + M+ Deportes 7 [ES] + M+ Deportes 8 [ES] + M+ Deportes [ES] + M+ Golf [ES] + M+ LALIGA [ES] + M+ Liga de Campeones [ES] + M+ Vamos [ES] + М-студіо + Мадаинят тарах Тыл (Киргизия) + Магия кухни + Magic Action + Magic Adventure + Magic Comedy + Magic Disney + Magic Family + Magic Galaxy + Magic Horror + Magic Karate + Magic Love + Magic Premiere + Magic Russian + Magic Thriller + Magic TV [BG] + Magic TV RO + Magic VHS + Maincast + Мамонт ТВ + MU TV + Март ТВ + Масон ТВ + Match4 [HU] + Max Sport 1 [HR] + Max Sport 2 [HR] + Мегаполис + Megogo Футбол 1 + Megogo Футбол 2 + Megogo Футбол 3 + Megogo Футбол 4 + Megogo Футбол 5 + Megogo Гонг + Megogo Live + Megogo Спорт + Melody [FR] + МЭТР + Metro TV [PL] + Миг ТВ Ноябрьск + MiniJam + Minika Çocuk [TR] + MinikaGO [TR] + MM 007 HD + MM Агата Кристи HD + MS Animated HD + MM Боевик HD + MM Боевик Classic HD + MM Celebrity HD + MM Classic HD + MM Комедия HD + MM Комедия Classic HD + MM Драма HD + MM Experiment HD + MM Семейный 1 HD + MM Семейный 2 HD + MM Фантастика HD + MM Flip UHD + MM Фобия HD + MM Гриффины HD + MM Грайндхаус HD + MM Honey HD + MM История HD + MM Катастрофа HD + MM Киберпанк HD + MM Кинофестиваль HD + MM Криминал HD + MM Крутые 90-е HD + MM Кунг-Фу HD + MM Квартирник HD + MM Lesson HD + MM Live Planet HD + MM Love HD + MM Макромир HD + MM Мегамир HD + MM Микромир HD + MM Мифология HD + MS Crime HD + MS Magic 4K + MS Prisons HD + MS Toons HD + MS Young Blood HD + MM USSR Мультфильм HD + MM NewFilm 1 HD + MM NewFilm 2 HD + MM NewFilm 3 HD + MM NewFilm RU HD + MM Нуар HD + MM OldSchool HD + MM Открытия HD + MM Погружение HD + MM Полицейский С Рублёвки HD + MM Приключения HD + MM Роскино HD + MM Синематограф HD + MM Ситком HD + MM Ситком 2.0 HD + MM Скорость HD + MM Smile HD + MM Спорт HD + MM Стивен Кинг HD + MM Супергерои HD + MM Сваты HD + MM Tom And Jerry HD + MM Translation HD + MM Триллер HD + MM UFO HD + MM Ужасы HD + MM Ужасы Classic HD + MM Ужастик HD + MM USSR 1941-1945 HD + MM USSR Детектив HD + MM USSR Драма HD + MM USSR Комедия HD + MM USSR Приключения HD + MM USSR Сказки HD + MM Воронины HD + MM Walt Disney HD + MM Вестерн HD + MM Затмение HD + MiniMini+ HD + Яснае ТВ + Мир KZ + Мир (+2) + Мир (+4) + Мир (+7) + Кто Куда + Мир вокруг + Мировое Кино KZ + Mixtape [PL] + МКТВ Молодечно + MÖDO Armageddon + MÖDO Beer Land + MÖDO Candy Land + MÖDO Cocaine + MÖDO Documental + MÖDO Fantasies + MÖDO Fire Action + MÖDO Фильмы СССР + MÖDO Green World + MÖDO Камин + MÖDO Love Stories + MÖDO Mafia Island + MÖDO Man Like + MÖDO Мультфильмы СССР + MÖDO Mixed 4K + MÖDO Music 2021 + MÖDO Music 2022 + MÖDO Music 2023 + MÖDO Music RU-UA 2023 + MÖDO Music Club + MÖDO Music 2024 + MÖDO Music RU-UA 2024 + MÖDO Music Movies + MÖDO New Blood + MÖDO Night Scary + MÖDO Novelty HDR + MÖDO Rus Movies + MÖDO Snoop Gun + MÖDO Spaceship + MÖDO Sunshine + MÖDO Super Hero + MÖDO Tarantino-G.Ritchie + MÖDO Toon 4K + MÖDO Top Movies + MÖDO Top Series + MÖDO VHS Mix 4K + MÖDO Video Show + MÖDO Village + MÖDO Wild West + MÖDO Zombie land + Mooz Dance [RO] + Mooz Hits [RO] + Mooz [RO] + More Than Sports TV [DE] + Мосфильм. Золотая коллекция + Мосфильм. Золотая коллекция (+2) + Мосфильм. Золотая коллекция (+4) + Москва-24 + MostVideo + Motor Trend [IT] + Motorvision+ [DE] + Motowizja [PL] + Movify History + Movify Series + MSG [US] + МТК + MTV 90s [UK] + MTV 2 [US] + MTV 80's [UK] + MTV Classic [US] + MTV Dance + MTV Europe + MTV Hits [FR] + MTV Max [FI] + MTV Music [UK] + MTV Rocks + MTV Urheilu 1 [FI] + MTV Urheilu 2 [FI] + MTV Urheilu 3 [FI] + MTV [US] + МТВ Волгоград + Мультимания LV + МультСезон + Муравленко 24 + Муром ТВ + Museum 4K + Museum HD + Music Channel RO + MusicBox + Music Box [PL] + Musicmix + Муви ТВ + Мужское кино International + МузСоюз + Муз-ТВ (+2) + Муз-ТВ (+4) + Муз-ТВ (+7) + Музыка Мода ТВ + Мы и город + Ми - Україна + Ми - Україна+ + MyHits [EE] + МЫ + MyZen 4К + myZen.tv + n-tv HD + Национальный Жилищный Канал + Nano HD + Народ Всё Видит + NASA 4K + #НАШ канал + Наш Кинопоказ HD + Наша Сибирь 4K + Любимое SD + Любимое HD + Наше любимое кино Украина + #НАШЕ music + Наше Мужское HD + Наше Наследие + Наше новое кино International + Наше HD + Наше SD + Наши Города (Когалым) + Настоящее время HD + Nat Geo People [PL] + National Geographic Wild [PL] + Натали + National Geographic Baltic + National Geographic [PL] + National TV + Научпоп + Наука 2.0 + NavigatorTV + Navo Telekanali [UZ] + NBA TV + NEXT-TV + NFL Network + Nick Jr + Nick Jr. Baltic + Nickelodeon Baltic + NickMusic [US] + Ника FM + Ника ТВ + NO EPG (заглушка) + NO EPG Cinema (заглушка) + NO EPG Mult (заглушка) + NO EPG Music (заглушка) + NO EPG News (заглушка) + NO EPG Radio (заглушка) + NO EPG Sport (заглушка) + NO EPG XXX 18+ (заглушка) + Nor Hayastan (Армения) + Noroc TV Moldova + Nova Sport 5 [CZ] + Nova Sport 6 [CZ] + Nova Sport [BG] + Novela TV [PL] + Novelas+ [PL] + Novella TV + Новгородское Областное телевидение + Новочеркасск ТВ + Новое телевидение + Новое время + Новороссийск ТВ + Новошахтинск ТВ + Новый канал + Новый век (Тамбов) + Новый христианский + Now 70's + Now 80's + Now 90s & 00s [UK] + NOW Series + Новый игровой канал + NR1 Türk [TR] + NRJ Hits [FR] + НТК (Нягань) + НТК (Зеленогорск) + НТРК Ингушетия + НТС-Ирбит + НТС (Иркутск) + НТС (Севастополь) + NTV HD TR + НТВ-Мир + НТВ (+1) + НТВ (+2) + НТВ (+3) + НТВ (+4) + НТВ (+7) + Nu.ART TV + Nuta TV [PL] + Обком + Область 45 + Окко.Футбол + Okko.Герои + Окко.Спорт + Окко.Прайм Спорт + Okko TV + Olsib Action comdey FHD + Olsib Australia cinema FHD + Olsib Black Sails FHD + Olsib Беспринципные FHD + Olsib Black Comedy + Olsib Canada cinema FHD + Olsib Catastrophe FHD + Olsib China cinema FHD + Olsib Чужой район FHD + Olsib Comedy FHD + Olsib Crime FHD + Olsib Czech Republic cinema FHD + Olsib Disco-80 FHD + Olsib Documentary FHD + Olsib Два холма FHD + Olsib Fantasy FHD + Olsib French cinema FHD + Olsib Galicia FHD + Olsib GAlicia_2 FHD + Olsib Germany cinema FHD + Olsib India cinema FHD + Olsib Italian cinema FHD + Olsib Japan cinema FHD + Olsib Юмор шоу FHD + Olsib Kids FHD + Olsib Киносказки FHD + Olsib Киноуроки FHD + Olsib Knives FHD + Olsib Конфетка FHD + Olsib Криминальная Одесса FHD + Olsib Легавый FHD + Olsib Литейный, 4 FHD + Olsib Love story FHD + Olsib Marvel FHD + Olsib Меч FHD + Olsib Mexico cinema FHD + Olsib Мир Человека FHD + Olsib Multfilm FHD + Olsib Наш флаг означает Смерть FHD + Olsib Netflix Orig FHD + Olsib The newest FHD + Olsib New Year FHD + Olsib The old best HD + Olsib Остров FHD + Olsib Первый отдел FHD + Olsib Pirates of the Caribbean FHD + Olsib Poland cinema FHD + Olsib Полярный FHD + Olsib Память Победы! FHD + Olsib ППС FHD + Olsib Pro100 Kitchen FHD + Olsib Radio FHD + Olsib Ремейк FHD + Olsib Ancient Rome FHD + Olsib RU.Music FHD + Olsib RuAction FHD + Olsib Science-fiction FHD + Olsib Сериалы - Жарков FHD + Olsib Шеф FHD + Olsib Show FHD + Olsib Spain cinema FHD + Olsib Star Wars FHD + Olsib STB FHD + Olsib The Best FHD + Olsib Time Travel FHD + Olsib British cinema FHD + Olsib USSR 30 FHD + Olsib USSR 40 FHD + Olsib USSR 50 FHD + Olsib USSR 60 FHD + Olsib USSR 70 FHD + Olsib USSR 80 FHD + Olsib USSR 90 FHD + Olsib USSR Classic FHD + Olsib USSR serial FHD + Olsib Великолепная пятёрка FHD + Olsib VHS + Olsib Водный Мир FHD + Olsib Walt Disney FHD + Olsib War FHD + Olsib Живой мир FHD + Olsib Звездные врата FHD + Омск ТВ + ONE2 + Первый музыкальный + Oneplay Sport 1 [CZ] + Oneplay Sport 2 [CZ] + Oneplay Sport 3 [CZ] + Oneplay Sport 4 [CZ] + ORF Sport + + ОРТ-Планета (Оренбург) + Остросюжетное SD + Остросюжетное HD + OstWest + OstWest24 + ОТР + ОТР (+2) + ОТР (+4) + ОТР (+6) + ОТР (+8) + ОТВ Челябинск + ОТВ Екатеринбург + OTV [LV] + ОТВ Одинцово + ОТВ Приморье + Отырар TV + Охотник и рыболов HD + Охотник и Рыболов Международный + Панорама ТВ Тверь + Paradise HD + Paradox HD + Comedy Central + Paramount Network + PassionXXX HD + Патриот + Penthouse Gold HD + Penthouse HD + Penthouse Passion Украина + Penthouse Reality TV + Перец Int + Перпетуум Мобиле + Первоуральск ТВ + Первый городской (Гомель) + Первый городской (Киров) + Первый городской (Кривой Рог) + Первый городской (Одесса) + Первый городской (Омск) + Первый канал СНГ + Первый канал Европа + Первый канал США + Первый Карагандинский + Первый канал -1 + Первый мытищинский + Первый областной Орел + Первый канал +1 + Первый канал +2 + Первый канал +3 + Первый канал +4 + Первый канал +5 + Первый канал +6 + Первый канал +7 + Первый канал +8 + Первый канал +9 + Первый Приднестровский + Первый Ростовский + Первый Севастопольский + Первый Ярославский + Пятница Int KZ + Пятница! (+2) + Пятница! (+3) + Пятница! (+4) + Пятница! (+7) + Пятый Int + Pink Erotic 1 [RS] + Pink Erotic 2 [RS] + Pink Erotic 3 [RS] + Pink Erotic 4 [RS] + Пинск ТВ + Пиксель + Plan B + Planeta Folk [BG] + Planeta HD [BG] + Planete+ HD [PL] + Playboy TV [UK] + Playboy TV UK (Украина) + Поединок + Поиск-ТВ + Полёт ТВ + Polsat Comedy C. E. + Polsat Music HD + Polsat Sport Premium 3 + Polsat Sport Premium 4 + Polsat Sport Premium 5 + Polsat Sport Premium 6 + Power Türk [TR] + Power TV [PL] + Премиальное SD + Премиальное HD + Premier Sport 1 [SK] + Premier Sport 2 [SK] + Premier Sport 3 [SK] + Premier Sports Asia + Premier Sports 1 [UK] + Premier Sports 2 [UK] + Premiere HD + Premier League TV HD + Premiere HD 1 + Premiere HD 2 + Premiere HD 3 + Premiere HD 4 + Premium HD + Премиум Кино KZ + Приключения HD + Прим 24 + Prima Sport 1 HD + Prima Sport 2 HD + Prima Sport 3 HD + Prima Sport 4 HD + Prima Sport 5 HD + Prime Fight + Про100 ТВ + Pro Arena + Про Астрахань + Pro TV Moldova + Pro Всё + Про жизнь + Продвижение (+3) + Продвижение (+4) + Продвижение (+7) + ProSieben Fun HD + ProSieben Maxx HD + ПТРК Павлоград + Q Football + Киносериал HD [KZ] + Кинодрама HD [KZ] + Q Live 1 + Q Live 2 + Q Live 3 + Q Live 4 + Q League + QAZAQSTAN HD Int + Q Sport Киргизия + Q Arena + Quadro 4K + QVC Style [DE] + Рада + Radio Italia TV [IT] + Радио Мир + Радіо НВ + Телеканал Радио Страна ФМ + РАІ + RAZ 1 + RAZ 2 + Развлекательное ТВ [KZ] + РБК + Re:TV + Real Time [IT] + Reality Kings + Rebel [CZ] + Reble! + Регион 29 + Регион 67 + РенТВ International + Истоки + РенТВ Молдова + Рен ТВ (+2) + Рен ТВ (+4) + Рен ТВ (+7) + Репортер + Репортер 73 + Retro Music + Revel TV + Резонанс + RFM TV [FR] + РГВК Дагестан + Рифей-ТВ + Riga TV24 + Рика + РИМ + RING.BG + RMC Sport 1 [FR] + RMC Sport 2 [FR] + RMC Sport Access [FR] + Rock TV RO + Родное кино International + Romance + Романтичное SD + Романтичное HD + Россия 1 + Россия 1 (-1) + Россия 1 (+1) + Россия 1 (+2) + Россия 1 (+3) + Россия 1 (+4) + Россия 1 (+5) + Россия 1 (+6) + Россия 1 (+7) + Россия 1 (+8) + Россия 1 (+9) + Россия 24 + Розпакуй.TV + RT News + RT Д English + RT Д Русский + RTG International + RTL + RTL 2 + RTL Nitro [DE] + RTLup [DE] + РТР-Планета Америка + РТР-Планета Армения + РТР-Планета Украина + РТС - Абакан + RTVI Retro + RTVI США + RTVS Sport [SK] + RU.TV Беларусь + РуКино HD + Russia Hualiang TV + Русская история + Русь Кострома + Русский корабль + Russias Future + Русская комедия + RUTUBE TV + Рыбалка + Рыбалка и охота + Рыбинск-40 + С1 Сургут + S Sport 2 [TR] + S Sport [TR] + Saga TV + Sälem, älem! [KZ] + Самара 24 + Самотлор (Нижневартовск) + Сампо ТВ + Саров 24 + Sat.1 HD + Sat.1 Emotions HD + Sat.1 Gold HD DE + Саха + Щёлково + Schlager Deluxe [DE] + Sci Fi [PL] + Scream + Сделано в Кузбассе + Семейное Кино KZ + Семейный Теле Сигнал [KZ] + Senzi TV [SK] + Serial HD + Сериал + Setanta Sports 1 Georgia + Setanta Sports 1 KZ + Setanta Sports 1 Lietuva + Setanta Sports 2 Georgia + Setanta Sports 2 KZ + Setanta Sports 2 Lietuva + Setanta Sports 3 Georgia + Setanta Kyrgyzstan + Setanta Казахстан + Setanta Sport+ [KZ] + Setanta+ Украина + Setanta Sports Premium [UA] + Setanta Sports+ + Setanta Украина + Сейм Курск + Шахты ТВ + Шансон-TB + Шант Kids HD + Шант Music HD + Шант Premium HD + Шант Serial HD + Шокирующее SD + Шокирующее HD + Show HD TR + Show KZ + Сибирь 24 + Silk Way Cinema + Silk Way + Симферополь 24 + Simpsons Channel + Sixx [DE] + СкиФ-Витебск + Sky Atlantic HD + Sky Caccia e Pesca + Sky Cinema Action HD + Sky Cinema Classics HD + Sky Cinema Family HD + Sky Cinema Highlights HD + Sky Cinema Premiere HD + Sky News [UK] + Sky Sport 24 [IT] + Sky Sport Arena [IT] + Sky Sport Austria HD + Sky Sport Bundesliga 1 HD + Sky Sport Bundesliga 2 HD + Sky Sport Bundesliga 3 HD + Sky Sport Bundesliga 4 HD + Sky Sport Bundesliga 5 HD + Sky Sport Bundesliga 6 HD + Sky Sport Bundesliga UHD [DE] + Sky Sport Bundesliga HD [DE] + Sky Sport Calcio [IT] + Sky Sport F1 [DE] + Sky Sport F1 [IT] + Sky Sport Golf [DE] + Sky Sport Golf [IT] + Sky Sport 1 [NZ] + Sky Sport 2 [NZ] + Sky Sport 3 [NZ] + Sky Sport 4 [NZ] + Sky Sport 5 [NZ] + Sky Sport 6 [NZ] + Sky Sport 7 [NZ] + Sky Sport Premier League [NZ] + Sky Sport 9 [NZ] + Sky Sport Legend [IT] + Sky Sport Max [IT] + Sky Sport Mix [DE] + Sky Sport Mix [IT] + Sky Sport MotoGP [IT] + Sky Sport NBA [IT] + Sky Sport News [DE] + Sky Sport Premier League [DE] + Sky Sport Select [NZ] + Sky Sport Tennis [DE] + Sky Sport Tennis [IT] + Sky Sport Top Event [DE] + Sky Sport UHD [DE] + Sky Sport Uno [IT] + Sky Sports 1 UHD [UK] + Sky Sports 2 UHD [UK] + Sky Sports Action / NFL [UK] + Sky Sports Premier League [UK] + Sky Sports + [UK] + Sky Sports Box Office [UK] + Sky Sports Cricket [UK] + Sky Sports Darts / F1 [UK] + Sky Sports F1 UHD [UK] + Sky Sports Football [UK] + Sky Sports Golf [UK] + Sky Sports LaLiga [MX] + Sky Sports Main Event [UK] + Sky Sports Mix [UK] + Sky Sports [MX] + Sky Sports News [UK] + Sky Sports Racing [UK] + Sky Sports Tennis [UK] + SkyCam +100500 + SkyCam Action + SkyCam Catastrophe + SkyCam Goblin + SkyCam Horrors + SkyCam Relax + SkyCam Romantic + SkyCam RuKino + SkyCam Симпсоны + SkyCam Южный Парк + SkyCam Victory + SKY HIGH CLASSIC HD + SKY HIGH 2D CLASSIC HDR + SKY HIGH 3D CLASSIC HDR + SKY HIGH 911 S 4K HDR + SKY HIGH ADULT + SKY HIGH ANIME HD + SKY HIGH ASIAN HDR + SKY HIGH AUTUMN HDR + SKY HIGH BIO HDR + SKY HIGH BLOOD 4K HDR + SKY HIGH BLOODY HDR + SKY HIGH BRAIN + BUNNY HD + SKY HIGH CENTURY HDR + SKY HIGH CHBU + SKY HIGH CINEMA 4K HDR + SKY HIGH SMILE HDR + SKY HIGH COMICS 4K HDR + SKY HIGH CONCERT HD + SKY HIGH COSMOS HDR + SKY HIGH CRIME 4K HDR + SKY HIGH CRIME HDR + SKY HIGH CRIMES 4K HDR + SKY HIGH DANCE + SKY HIGH DARK S 4K HDR + SKY HIGH DC 4K HDR + SKY HIGH DCU S 4K HDR + SKY HIGH DEAD S 4K HDR + SKY HIGH DECTS 4K HDR + SKY HIGH DETECT HDR + SKY HIGH DLOVE 4K HDR + SKY HIGH DOC + SKY HIGH DOC UHD + SKY HIGH DRAMA 4K HDR + SKY HIGH EPOCH HD + SKY HIGH FAMILY 4K HDR + SKY HIGH FAMILY VHS HDR + SKY HIGH FIGHT+ HD + SKY HIGH FRESH HD + SKY HIGH FRESH HDR + SKY HIGH FUN S 4K HDR + SKY HIGH GALAXY HDR + SKY HIGH GOT S 4K HDR + SKY HIGH HEROES HD + SKY HIGH HISTORY 4K HDR + SKY HIGH HIST S 4K HDR + SKY HIGH HORROR 4K HDR + SKY HIGH HORROR VHS HDR + SKY HIGH JETIX HDR + SKY HIGH JETIX HD + SKY HIGH KID 0+ 4K HDR + SKY HIGH KID 6+ 4K HDR + SKY HIGH KID 12+ 4K HDR + SKY HIGH KID 16+ 4K HDR + SKY HIGH KID 18+ 4K HDR + SKY HIGH KIDS USSR + SKY HIGH LEGENDS HDR + SKY HIGH MAGIC S 4K HDR + SKY HIGH MAN HD + SKY HIGH MARVEL 4K HDR + SKY HIGH MCU S 4K HDR + SKY HIGH MIX 4K + SKY HIGH MYSTIC VHS HDR + SKY HIGH NATURE HD + SKY HIGH NATURE 4K + SKY HIGH NATURE 4K HDR + SKY HIGH NEW 4K HDR + SKY HIGH NOIR HD + SKY HIGH NON STOP HDR + SKY HIGH NSTOP 4K HDR + SKY HIGH ORIG + SKY HIGH POLIT S 4K HDR + SKY HIGH PUPPET HDR + SKY HIGH ROMAN VHS HDR + SKY HIGH RUSSIAN + SKY HIGH SADLY HDR + SKY HIGH SERIES HD + SKY HIGH SMASH 4K HDR + SKY HIGH SMASH VHS HDR + SKY HIGH SMILE 4K HDR + SKY HIGH SPACE 4K HDR + SKY HIGH SPIRIT HD + SKY HIGH SPNS 4K HDR + SKY HIGH SPRING HDR + SKY HIGH STANDUP + SKY HIGH STARWS 4K HDR + SKY HIGH SUNNY HDR + SKY HIGH THRILLER 4K HDR + SKY HIGH TOON 4K HDR + SKY HIGH UHD HDR + SKY HIGH VAMPIRE HDR + SKY HIGH VERSE S 4K HDR + SKY HIGH VHS DEJAVU HDR + SKY HIGH VHS FUTURE HDR + SKY HIGH VHS UHD + SKY HIGH WBROS HDR + SKY HIGH WESTERN HDR + SKY HIGH WEST S 4K HDR + SKY HIGH WINTER HDR + Šláger Muzika [CZ] + Šláger Original [CZ] + Sláger TV [HU] + Соль + Солнце (+2) + Солнце (+4) + Солнце (+7) + Соловьев.Live + Сонце + Song TV Armenia + Song TV Georgia + Song TV Russia + Duo 3 [EE] + Duo 3 Baltic + Sony Sports Ten 1 HD + Sony Sports Ten 2 HD + Sony Sports Ten 3 HD + Sony Sports Ten 4 HD + Sony Sports Ten 5 HD + Duo 6 Baltic + Duo 6 [EE] + Советская киноклассика + Советская киноклассика HD + Спас (+2) + Спас (+7) + Spiler 1 [HU] + Spiler 2 [HU] + Spor Smart 2 TR + Spor Smart TR + Sport1 HD + Sport1+ HD + Sport TV 1 Slovenia + Спорт 1 Украина + Sport TV 2 Slovenia + Спорт 2 Украина + Sport TV 3 Slovenia + Спорт 3 Украина + Спорт 4 Украина + Спорт 5 + Sport 1 [CZ] + Sport 1 [HU] + Sport 2 [CZ] + Sport 2 [HU] + Sport Extra [RO] + Sport+ Qazaqstan + Sportdigital Fussball 2 + ТВ Спорт + Sport Klub 1 [SI] + Sport Klub 2 [SI] + SportKlub + Спортмастер ТВ + Sportska Televizija [HR] + Sportsnet 360 [CA] + SNY: SportsNet New York [US] + Sportsnet One [CA] + Sportsnet World [CA] + Sports TV [TR] + Sport TV 1 [PT] + Sport TV 2 [PT] + Sport TV 3 [PT] + Sport TV 4 [PT] + Sport TV 5 [PT] + Sport TV 6 [PT] + Sport TV 7 [PT] + Sport TV+ [PT] + Star Cinema Россия + Star Cinema [EU] + Star Cinema UA + Star Family Россия + Star Family [EU] + Star Family UA + Star TV HD TR + Stars.TV + Stingray Classica [FR] + Stingray Djazz [FR] + СТК-Солигорск + СТРК HD + СТС International + СТС International (-7) + СТС Kids HD + СТС Love (+2) + СТС Love (+4) + СТС Love (+7) + СТС (+2) + СТС (+4) + СТС (+7) + СТВ 24 + СТВ Беларусь + STV Pirmā! + Sumiko + Sundance TV [PL] + Super Baltic + Super One HD + Суббота! (+2) + Суббота! (+4) + Суббота! (+7) + Super Plus + Супермама + Super-Tennis + Suspense + Суспільне Спорт + Світ навиворіт+ + Світ+ + Svoboda + Своё ТВ Березники + Своё ТВ Ставрополь + Тагил-ТВ 24 + Такт + Танцуй! HD + Тарарам! + Тараз 24 + Татарстан-24 + Таврия ТВ + ТБН Россия + ТДК 42 + Teledeporte [ES] + Телеканал народной музыки + Телекон 24 (Нижний Тагил) + Телемикс + Телепутешествия HD + TeleToon+ HD + Temptation TV + Tennis Channel [US] + Тео ТВ + ТЕТ + Teve2 HD + The Country Network [US] + The Explorers + The Fishing and Hunting + The Voice BG + Thriller HD + Tiny4k UHD + Tivibu Spor [TR] + Tivibu Spor 1 [TR] + Tivibu Spor 4 [TR] + ТиВиСи HD + ТК Вариант + TLC Balkans + TLC [PL] + TLC TR + ТНТ4 (+2) + ТНТ4 (+4) + ТНТ4 (+6) + ТНТ4 (+7) + Exclusiv TV [MD] + ТНТ-International (Беларусь) + ТНТ-International (СНГ) + ТНТ-International (Европа) + ТНТ KZ + ТНТ-Music + ТНТ (+2) + ТНТ (+3) + ТНТ (+4) + ТНТ (+7) + TNT Sports Premium HD [AR] + ТНВ + Точка + Толк + Толпар-ТВ (Уфа) + Томское время + Тонус ТВ + Тооку + Той Думан + Trace Brasil + Trace Latina [FR] + Trash + Travel&Adventure + Travel Channel [PL] + Travel Guide-TV + Travel XP 4K + Travel XP HD + Третий Цифровой + ТРК Чернівці + ТКР Рязань + ТРК Юганск + TRT 4K [TR] + TRT 1 HD + TRT 2 HD + TRT 3 HD + TRT Çocuk [TR] + TRT Haber HD + TRT MÜZİK [TR] + TRT Spor Yıldız [TR] + TRT Türk [TR] + ТСН 24 (Тула) + ТСТ (Черемхово) + TTV [PL] + Туапсе 24 + Туран ТВ + Турк Сааҭ + Тува 24 + TV1 KG HD (Кыргызстан) + TV 2 Sport 1 [NO] + TV 2 Sport 2 [NO] + ТВ3 Беларусь + TV3 EE + TV3 LT + TV3 LV + TV3 Plus [LT] + ТВ3 + ТВ3 (+2) + ТВ3 (+3) + ТВ3 (+4) + ТВ3 (+7) + TV4 (Латвия) + TV4 [PL] + TV4 Tennis [SE] + TV-4 (Тернопіль) + TV5 Monde Europe + TV6 EE + TV6 LT + TV6 LV + TV6 [PL] + ТВ-7 Абакан + TV8 [LT] + TV8 Moldova + TV8 HD TR + ТВ-21M + ТВ-21+ + TV 8.5 [TR] + TV999 [BG] + TV1000 Global Kino + Go3 Films + TV BRICS + ТВ-ИН (Магнитогорск) + TV Puls 2 + TV RUS + TV RUS+ + ТВА + TVC 21 + ТВ Центр +2 + ТВ Центр +4 + ТВ Центр +7 + Тверской проспект + Твiй серiал + ТВК6 Красноярск + TVM3 [CH] + TVN 7 HD + TVN 24 BiS HD + TVN 24 HD + TVN Fabuła HD + TVN HD + TVN Style HD + TVN Turbo HD + Твоё ТВ - Юмор + Твой 2007 + Твоє кіно. Action + Твоє кіно. Relax + Твоє кіно. Хіт + TVоя Тюмень + Твоё ТВ HD + Твоё ТВ Казахстан + TVP 1 + TVP 2 + TVP 3 + TVP 3 Wrocław + TVR1 [RO] + TVR2 [RO] + TVR Sport [RO] + TVRi [RO] + ТВС - 9 канал + TVS [PL] + ТВС (Саранск) + ТВТУР + 4Y Baltic + TyC Sports HD [AR] + UA:Буковина + UA:Черкаси + UA:Чернігів + Суспільне Донбас + UA:Карпати + UA:Кропивницький + UA:Крим + UA:Київ + UA:Львів + UA:Миколаїв + UA:Одеса + UA:Перший + UA:Поділля + UA:Полтава + UA:Рівне + UA:Суми + UA:Тернопіль + FreeДОМ + UA:Волинь + UA:Вінниця + UA:Харків + UA:Херсон + UA:Закарпаття + UA:Запоріжжя + UA:Житомир + Удар + Ugra Travel + УР1 + УР2 + УР3 + Ульяновская правда + Ultra TV 4K [PL] + Унiан + УПЛ ТВ + URAL1 + Урал-24 + УрФО24 + USSR HD + UTravel + ЮТВ Чебоксары + UTV Нефтекамск + UTV RO + UTV Салават + UTV Стерлитамак + UzSport + UzSport 2 + В мире животных HD + V Sport 1 [NO] + V Sport 2 [NO] + V Sport 3 [NO] + V Sport Extra [SE] + V Sport Football [SE] + V Sport+ [NO] + V Sport Premium [SE] + Vajeu + Варзиш Спорт + Вектор 24 + VeleS 60FPS + VeleS Аниме + VeleS Dj Set + VeleS Гоблин + VeleS Kids + VeleS Киноплёнка + VeleS Киносерия + VeleS Комедия + VeleS Криминальный + VeleS Магнитофон + VeleS Movie Hits + VeleS Наше Кино + VeleS Premiere + VeleS Семейный + VeleS СССР + VeleS Страшное + VeleS Триллер + VeleS Вестерн + Velilla TV Action War Films HD + Velilla TV Adult Channel HD + Velilla TV Cartoons Disney 4K + Velilla TV Cinema 4K + Velilla TV Детский HD + Velilla TV Домашний HD + Velilla TV EuroCup 1984 + Velilla TV EuroCup 1988 + Velilla TV EuroCup 1992 + Velilla TV EuroCup 1996 + Velilla TV Eurodance 90s + Velilla TV Hard And Heavy Concerts HD + Velilla TV Кухня + Отель Элеон HD + Velilla TV Legendary Matches HD + Velilla TV Морские дьяволы HD + Velilla TV Морские дьяволы 2 HD + Velilla TV Мосгаз HD + Velilla TV ИП Пирогова HD + Velilla TV Pop And Rock Concerts HD + Velilla TV Russiandance 90s + Velilla TV Русский Сериал HD + Velilla TV Русские Мелодрамы HD + Velilla TV Счастливы вместе + Velilla TV Том и Джерри HD + Velilla TV World Cup 1966 + Velilla TV World Cup 1970 + Velilla TV World Cup 1974 + Velilla TV World Cup 1978 + Velilla TV World Cup 1990 + Velilla TV World Cup 1994 + Velilla TV World Cup 1998 + Velilla TV World Cup 2002 + Velilla TV World Cup 2006 + Velilla TV World Cup 2010 + Velilla TV World Cup 2014 + Velilla TV World Cup 2018 + Velilla TV World Cup 2022 + Ветта 24 Пермь + VF Два с половиной человека + VF Привет из 90х + VF Adventure + VF Американская история ужасов + VF Anime + VF Art house + VF Баня + VF Беларусьфильм + VF Бесстыжие + VF Без цензуры + VF Боевик + VF Cartoon + VF Чернобыль + VF Classic + VF Comedy + VF Comedy Woman + VF Comics + VF Detective + VF Disney Cartoon + VF Disney Movie + VF Джеки Чан + VF Ёлки + VF Ералаш + VF Family + VF Fantastic + VF Fantasy + VF Фильмы СССР + VF Друзья + VF Леонид Гайдай + VF Гарри Поттер + VF Городок + VF Граиндхаус + VF HBO + VF Доктор Хаус + VF Игра престолов + VF Индия + VF История + VF Каламбур + VF Карточный домик + VF Катастрофы + VF Кино 4K + VF Киностудия им. Горького + VF Классика + VF Комедия + VF Концерты + VF Криминал + VF Кухня + VF КВН + VF Ленфильм + VF Луи де Фюнес + VF Малыш + VF Marvel + VF Маски Шоу + VF Melodrama + VF Мосфильм + VF Мультфильмы СССР + VF Музыка + VF Мыльные оперы + VF Mystic + VF Наша Раша + VF Netflix + VF New Year + VF Новогодние мультфильмы + VF Новогодний + VF Одесская киностудия + VF Однажды в России + VF Орел и решка + VF Оскар + VF Охота + VF Наша победа + VF Премьера + VF Premiere + VF Реальные пацаны + VF Рижская киностудия + VF Эльдар Рязанов + VF СашаТаня + VF Счастливы Вместе + VF Сериал + VF Сериал 4K + VF Сериалы Турции + VF Series + VF Секс в большом городе + VF Скуби-Ду + VF След + VF С новым Годом! + VF Солдаты + VF Союзмультфильм + VF Стройка + VF Сверхъестественное + VF Свердловская киностудия + VF Сваты + VF Тайны следствия + VF Теория большого взрыва + VF Thriller + VF TOP Series + VF Универ + VF Универ новая общага + VF Уральские пельмени + VF Ужасы + VF Ужасы VHS + VF VHS + VF VHS Cartoon + VF Военные + VF Воронины + VF Владимир Высоцкий + VF Ходячие мертвецы + VF Вестерн + VF The X-Files + VF Юмор 18+ + VH1 Classic + VHS HD + VHS-ка Сериал + Viasat Explore CEE + Viasat History Ukraine + Viasat Hockey HD + Viasat Nature CEE + Viasat Serial + Viasat Sport HD [SE] + Victory HD + viju TV1000 Новелла + viju TV1000 romantica + Vivid Red + Vivid Touch HD + Vivid TV + Вкус + Вкусное TV + Военное кино + Волейбол + Восточный экспресс + Восток 24 + ВОТ ТВ + VOX + Vox Music TV [PL] + VOXup [DE] + Время Арктики + Волга 24 + Вселенная мультфильмов + Вся Уфа + Всесвітня служба радіомовлення України + ВТК Аргус + Выборг ТВ + Waidwerk HD DE + Women's Magazine + World Fashion Channel En + WP + Wydarzenia 24 + Хабаровск + Хамдан-Калмыкия 24 (Элиста) + Xezer + Хоккей ТВ + Хроніка+ + Yaban TV [TR] + Ямал-Регион + Yes 1 + Yes 3 + Yes 4 + Yes Action + yes Bollywood + Yes Comedy + Yes Drama + YES Network [US] + Yes Sport 1 + Yes Sport 2 + Yes Sport 3 + Yes Sport 4 + + YOSSO TV 4K + YOSSO TV 4K HDR + YOSSO TV Adrenaline + YOSSO TV Adventure + YOSSO TV BEST + YOSSO TV BEST 60fps + YOSSO TV BEST Box 60fps + YOSSO TV Ковбойское + YOSSO TV Disney + YOSSO TV Food + YOSSO TV Grand + YOSSO TV Kids + YOSSO TV Мелодрама + YOSSO TV Music Hits + YOSSO TV Nature + YOSSO TV Наше детское + YOSSO TV Netflix + YOSSO TV New Кино + YOSSO TV Oblivion + YOSSO TV Русские фильмы + YOSSO TV Science + YOSSO TV Шансон + YOSSO TV Советские фильмы + YOSSO TV Советские фильмы 4K + YOSSO TV Союзмульт + YOSSO TV Thriller + YOSSO TV Трагичное + YOSSO TV Travel + YOSSO TV VHS + YOSSO TV Забавное + Your Play! + Ю +2 + Ю +4 + Ю +7 + Югра + РТК Забайкалье + Закон ТВ + Зал 1 (Шерлок Холмс и доктор Ватсон) + Зал 2 (След) + Зал 3 (Ментовские войны) + Зал 4 (Мелодрамы) + Зал 5 (Солдаты) + Зал 6 (Некрасивая подружка) + Зал 7 (Три кота) + Зал 8 (Доказательства вины) + Зал 9 (Анна-детективъ) + Зал 10 (Советские мультфильмы) + Зал 11 (Смешарики) + Зал 12 (Комедии) + Зал 14 (Белка и Стрелка) + Зал 15 (Шукки и Бейта) + Зал 16 (Диностер) + Зал 17 (Боевики HD) + Зал 18 (Бодо Бородо) + Зал 19 (Ужасы HD) + Зал 20 (Исторический HD) + Зал 21 (Робозуна) + Зал 22 (Детские песенки) + Зал 23 (Советские фильмы) + Зал 24 (Глухарь) + Зал 25 (Горюнов) + Зал 26 (Балабол) + Зал 27 (Улицы разбитых фонарей) + Зал 28 (6 кадров) + Зал 29 (Женский детектив) + Зал 30 (Мажор) + Зал 31 (Осторожно, Модерн!) + Зал 32 (Бандитский Петербург) + Зал 33 (Восток-Запад) + Запад 24 + Заречный + Жетысу + Живи + Живи активно + Ziggo Sport 1 [NL] + Ziggo Sport 2 [NL] + Ziggo Sport 3 [NL] + Ziggo Sport 4 [NL] + Ziggo Sport 5 [NL] + Ziggo Sport 6 [NL] + Знаєм 24 + Знание ТВ + ZU TV [RO] + Звезда (+2) + Звезда (+4) + Звезда (+7) + 1+1 + 1+1 International + 1+1 Україна + 1+2 + 2+2 + 2x2 + Три Ангела + 4ever Cinema + 4ever Drama + 4ever Music + 4ever Theater + 5Sport 4K + 5Sport + 6 соток + 13th Street HD + Хабар 24 + 78 + 312 Кино + 312 Музыка + 312 Сериал + 360° Новости + 360TuneBox + 365 дней ТВ + А1 + А2 + Abai TV + ABC News Live [US] + Adult Channel + Agro TV Moldova + Ajara TV + Алмазный край + Altai + Анекдот ТВ + Ani + AQJAIYQ + AQTOBE + Арис 24 + Архыз 24 + Armenia 1 + Armenia 2 + Армія ТБ + Арсенал ТВ + Астрахань 24 + Astro Cricket + Atameken Business + ATR + ATV Bazmoc TV + ATV Filmzone + ATV Kinoman + ATYRAY + Авто Плюс + Аверс + Авто24 + Baby Time + Balapan + Баластан + Balticum Auksinis + Башкортостан 24 + BCU Charm HD + Бьюти.TV + beIN Sports 1 + beIN Sports 2 + beIN Sports 3 + beIN Sports 4 + beIN Sports 5 + beIN Sports 6 + beIN Sports 7 + beIN Sports AFC + beIN Sports NBA + beIN Sports News + beIN Sports [US] + Белгород 24 + БелРос + Benfica TV + Большая Азия + Big Planet + .black + Блокбастер + Blue Hustler + Бобер + Бокс ТВ + Bollywood + Bolt + БСТ + BTV + Буг-ТВ + Карусель + Карусель International + Cars & Stars TV + Cartoon Network + Caspian News + CBC + CBC Sport + CBS Reality [PL] + CBS Sports Network [US] + CGTN + Пятый канал + 8 канал + 8 канал International + Первый канал + Первый канал Евразия + Чижик + Cinema + Cinemax + Cine+ + Cine+ Hit + Cine+ Kids + Classic Music + Clubbing TV + C More Fotboll HD + C More Hockey HD + CNBC [US] + CNN International + Comedy Central [PL] + Continent E + Крым 24 + ČT1 + ČT2 + ČT24 + Cum4k UHD + Дача + Das Erste + Da Vinci Learning + DAZN LALIGA 2 [ES] + DAZN LALIGA [ES] + День Победы + Детский мир + Диалоги о рыбалке + Diema Sport 2 + Diema Sport 3 + Diema Sport + DIGI Sport 1 + DIGI Sport 2 + DIGI Sport 3 + DIGI Sport 4 + Дикая охота HD + Дикая рыбалка HD + Дом + Discovery Channel + Discovery Science + Доктор + Домашние животные + Домашний + Домашний International + Дом кино + Дом кино Премиум + Дон 24 + Дорама + Dorcel XXX + Драйв + ducktv + ducktv plus + Dynamo Kyiv TV + Еда + Eesti Kanal + English Class + English Club TV + Epic Drama + Equalympic + Eromania 4K + Erox + ERTIS + Eska Rock TV + Eska TV + Eska TV Extra + ESPN2 [US] + ESPN [US] + Еспресо TV + Евразия + Eurochannel + Eurosport 1 + Eurosport 2 + Eurosport 4K + Еврокино + Extasy TV + Fashion One + Fashion TV + Fast Sports 1 + Fast Sports 2 + Fast Sports + Фауна + Fenerbahçe TV + FilmZone [EE] + FlixSnip + Food Network + FoodTime + Fox Business [US] + Fox News + France 24 + Fresh TV + Пятница! + Пятница! International + Футбол + FX + FX Life + Galatasaray TV + ОТБ Галичина + Gametoon + Genuine TV + GINX Esports TV + Глазами туриста + GNC Америка + TV3 Sport 2 + TV3 Sport 3 + TV3 Sport Open + Gold TV + Golf Channel [US] + Грозный + Губерния + Губерния 33 + Gulli + HBO2 HD + HBO3 HD + HBO HD + Точка.РФ + HD Медиа + HGTV + H2 [PL] + History + Хит + HIT TV + HITV + Hollywood + Home 4K + Надежда + Надія + Hustler HD + Hustler TV + Хузур ТВ + ICTV2 + ID Fashion + Индия + Индийское кино + Info TV + Init Ekstra TV + Init TV + Insight UHD + История + Известия + Jambyl + JimJam + Just TV + Калейдоскоп ТВ + Камеди + Капитан Фантастика + Катунь 24 + Кавказ 24 + KBS World + Kentron TV + Хабар + Kids TV + Kidzone Max + Kidzone Mini + Кинеко + Kino 1 + Kino 2 + Кино 18+ + Кино 18+ International + Kino 24 + Кинохит + Kinojam 1 + Kinojam 2 + Кинокомедия + KinoLiving + Киномикс + Kino Polska Muzyka International + Кинопремьера + Киносат + Киносемья + Киносерия + КиноСезон + Киносвидание + Кино UHD + Киноужас + Kinowood + KION Хит + Ключ + Kokshe + Конный мир + Крик-ТВ + Кто есть кто + Кубань 24 + Кухня ТВ + Кус-кус + Квартал ТВ + КВН ТВ + Київ + Lale + Latvijas Šlāgerkanāls + ЛДПР ТВ + Легендарный 24 + Домашний магазин + Leo TV + Лёва + Липецкое время + Live Music Channel HD + LNK + LRT Lituanica + LRT Televizija + LTV1 + LTV7 + Luxury + Magnat + Майдан + Мама + Mangystay + Матч! + Матч! Арена + Матч! Боец + Матч! Футбол 1 + Матч! Футбол 2 + Матч! Футбол 3 + Матч! Игра + Матч! Планета + Матч! Премьер + Матч! Страна + Матур ТВ + MAX Sport 1 + MAX Sport 2 + MAX Sport 3 + MAX Sport 4 + MCM Pop + MCM Top + Medeniyyet TV + Мега + Mezzo + Mezzo Live HD + Milady Television + Milan TV + Миллет + Министерство идей + Мир 24 + Мир баскетбола + Мир Белогорья + Мир + Мир сериала + MLB Network [US] + MMA-TV + Moldova 1 + Moldova 2 + Мордовия 24 + Московский образовательный + Классика Кино + Movify Kino + Моя Планета + Моя стихия + MSNBC [US] + MTV DE + MTV Hits + MTV Live [US] + MTV Live HD + MTV U [US] + Мульт + Мультиландия + Мультимузыка + КТРК Музыка + Мужское кино HD + Мужской + Mūzikas Video Kanāls + MuzLife + Muzsika TV + Муз-ТВ + Музвар + Музыка Первого + MuzZone + N4 + Нано + Наша Сибирь + Наша тема + Наш дом + Любимое кино + Наше Мужское + Наше новое кино + Наш КиноМир + Наш Кинопоказ + National Geographic + Nat Geo Wild + Наука + Nautical Channel + NBA TV [US] + Неизвестная Планета + NewsMax TV [US] + NewsNation US + NFL Network [US] + NHK World + NHL Network [US] + Nickelodeon + NickMusic + Nicktoons + Niki Junior + Niki Kids + Нижний Новгород 24 + ННТ + ННТВ + Ностальгия + Nova Sport + Nova Sport 1 + Nova Sport 2 + Nova Sport 3 + Nova Sport 4 + Новый мир + Now Rock + НСТ + НТА + НТК + НТМ + НТН + НТВ + НТВ-Америка + НТВ-Беларусь + НТВ-Хит + НТВ Право + НТВ Сериал + НТВ Стиль + О2ТВ + О! + OBOZ TV + Ocean TV + Óčko + Óčko Black + Óčko Expres + Óčko Star + Охотник и рыболов + Охота и рыбалка + О!Кино + ONE + One Planet + ОНТ + Ontustik + Orizont TV + Оружие + Осетия-Ирыстон + Открытый мир + ОТС + Оце + ОТВ Сахалин + Перший автомобільний + Перший Західний + Первый информационный + Первый крымский + Первый Космический + Первый Псковский + Первый тульский + Первый вегетарианский + Пес и Ко + Pingvīns + Пингвин Лоло + Playboy TV + Play TV + ПлюсПлюс + Победа + Поехали! + Polonia 1 + Polsat 2 + Polsat + Polsat Cafe + Polsat Doku + Polsat Film + Polsat Games + Polsat News 2 + Polsat News + Polsat Play + Polsat Rodzina + Polsat Seriale + Polsat Sport 1 + Polsat Sport 2 + Polsat Sport 3 + Polsat Sport Fight + Polsat Sport Premium 1 + Polsat Sport Premium 2 + Polsat Viasat Explore + Polsat Viasat History + Polsat Viasat Nature + Прямий + Прима + Private Spice + Private TV + ПРНК + PRO Business + Продвижение + ProKino + Про Любовь + ProSieben + Просвещение + Provence + Психология 21 + PTV + Qostanai + Quiz TV + Qyzyljar + Qyzylorda + Радио Шансон + Радость моя + Rai News 24 + RAI Sport + Раменское ТВ + Ратник + Real Madrid TV + .red + Redlight HD + Красная линия + Red Lips + Рен ТВ + Ретро + Revolt TV [US] + Рівне 1 + Родное кино + Родной канал + RTG TV + РТР-Беларусь + РТР-Планета Азия + РТР-Планета Европа + RTVi + Setanta Sports + Русский экстрим + Russian Extreme Ultra HD + Russian MusicBox + Русская ночь + Русский бестселлер + Русский детектив + Русский иллюзион + Русский роман + Русский Север + RU.TV + Рыжий + РЖД ТВ + Соль ТВ + Салям + Санкт-Петербург + San Porto + Сапфир + Сарафан + Саратов 24 + Saryarqa + .sci-fi + SCT + Sea TV + Semei + Севастополь 24 + 7ТВ + Север + SextoSenso + Шалун + Шаян ТВ + Shop24 + Shopping Live + Shot TV + Сила + Шелк + Сказки Зайки + SmartZone + Смайлик ТВ + Сочи24 + Солнце + Советские мультфильмы + Советское кино + Союз + Спас + Spectrum SportsNet [US] + Sport 1 + Sport 1 Baltic + Sport 2 Baltic + КТРК Спорт + Sportdigital Fussball + Sport Klub 1 [HR] + Sport Klub 2 [HR] + Sport Klub 3 + Sport Klub 4 + Sport Klub 5 + SPOTV2 + SPOTV + Старт + Start Air + Старт Триумф + Start World + C Music TV + Stingray iConcerts + Страшное HD + СТС + СТС Love + СТБ + Суббота! + Супергерои + Super+ + Super Polsat + Super RTL HD + Сургут 24 + Сварожичи + Светлое ТВ + Світло + Т24 + Тамыр + Тайна + TBN Armenia + Театр + Tele 5 + Телекафе + Теледом + Телевсесвіт + Тернопіль 1 + Терра + Terra + Терра Инкогнита + TiJi + Timeless Dizi Channel + ТипТоп + Tivibu Spor 2 [TR] + Tivibu Spor 3 [TR] + Тивиком + TLC + TMTV + ТНТ4 + ТНТ4 International + ТНТ + ТНВ-Планета + Точка отрыва + Тольятти 24 + Совершенно секретно + Top Shop TV + Trace Sport Stars + Trace Urban + Travel Channel + Travel+Adventure + Трофей + TRT Avaz [TR] + Центр Красноярск + TSN1 + TSN2 + TSN3 + TSN4 + TSN5 + ТСВ + Туган Тел + Turkistan + Тюсо + ТВ3 International + TV3 Life + TV3 Mini + TV3 Sport + ТВ Центр + ТВ Центр International + TV Extra + TV Губерния + TVMChannel + TVP 3 Warszawa + TVP ABC + TVP Dokument + TVP HD + TVP Historia + TVP Info + TVP Kobieta + TVP Kultura 2 + TVP Kultura + TVP Nauka + TVP Polonia + TVP Rozrywka + TVP Seriale + TVP Sport + TV Puls + TVP World + Дождь + TV XXI + Тюменское время + Ю + Учалы ТВ + Удмуртия + Ultra HD Cinema + Ulytau + Уникум + Univer TV + Неизвестная Россия + Усадьба + Успех + UTV Уфа + Варяг + Вестник Надыма + VF Cartoon 18+ + В гостях у сказки + VH1 + VHS-ка + Viasat Kino + Viasat Kino Action + Viasat Kino Comedy + Viasat Kino Megahit + Viasat Kino World + H2 + viju Explore + viju History + viju Nature + viju+ Comedy + viju+ Megahit + viju+ Planet + viju+ Premiere + viju+ Serial + viju+ Sport + viju TV1000 + viju TV1000 Action + viju TV1000 Русское + Витебск + VIVA Russia + Вместе-РФ + Волга + Волгоград 1 + Волгоград 24 + Вопросы и ответы + Восток ТВ + Время + TV1 + V Sport Golf + V Sport Motor + Warner TV + TNT Comedy + TNT Film + TNT Serie + World Business Channel + World Fashion Channel + W-Sport + Xsport + Xsport+ + XXL + Якутия 24 + Yes 2 + Yes Docu + yes Movies Kids + YOSSO TV SEXY + Юрган + Ювелирочка + Загородная жизнь + Загородный + Загородный International + Зал суда + ZDF + Здоровое ТВ + Жара + Жар Птица + Живая планета + Живая природа + Zoom + ZooПарк + Zoo TV + Звезда + Звезда Плюс + Звязда + diff --git a/sites/epg.iptvx.one/epg.iptvx.one.config.js b/sites/epg.iptvx.one/epg.iptvx.one.config.js index 9c37deb3..c210abb1 100644 --- a/sites/epg.iptvx.one/epg.iptvx.one.config.js +++ b/sites/epg.iptvx.one/epg.iptvx.one.config.js @@ -1,64 +1,64 @@ -const axios = require('axios') -const iconv = require('iconv-lite') -const parser = require('epg-parser') -const pako = require('pako') - -let cachedContent - -module.exports = { - site: 'epg.iptvx.one', - days: 2, - url: 'https://iptvx.one/epg/epg_noarch.xml.gz', - request: { - maxContentLength: 500000000, // 500 MB - cache: { - ttl: 24 * 60 * 60 * 1000 // 1 day - } - }, - parser: function ({ buffer, channel, date, cached }) { - if (!cached) cachedContent = undefined - - let programs = [] - const items = parseItems(buffer, channel, date) - items.forEach(item => { - programs.push({ - title: item.title?.[0]?.value, - description: item.desc?.[0]?.value, - start: item.start, - stop: item.stop - }) - }) - - return programs - }, - async channels() { - const data = await axios - .get('https://epg.iptvx.one/api/channels.json') - .then(r => r.data) - .catch(console.log) - - return data.channels.map(channel => { - const [name] = channel.chan_names.split(' • ') - - return { - lang: 'ru', - site_id: channel.chan_id, - name - } - }) - } -} - -function parseItems(buffer, channel, date) { - if (!buffer) return [] - - if (!cachedContent) { - const content = pako.ungzip(buffer) - const encoded = iconv.decode(content, 'utf8') - cachedContent = parser.parse(encoded) - } - - const { programs } = cachedContent - - return programs.filter(p => p.channel === channel.site_id && date.isSame(p.start, 'day')) -} +const axios = require('axios') +const iconv = require('iconv-lite') +const parser = require('epg-parser') +const pako = require('pako') + +let cachedContent + +module.exports = { + site: 'epg.iptvx.one', + days: 2, + url: 'https://iptvx.one/epg/epg_noarch.xml.gz', + request: { + maxContentLength: 500000000, // 500 MB + cache: { + ttl: 24 * 60 * 60 * 1000 // 1 day + } + }, + parser: function ({ buffer, channel, date, cached }) { + if (!cached) cachedContent = undefined + + let programs = [] + const items = parseItems(buffer, channel, date) + items.forEach(item => { + programs.push({ + title: item.title?.[0]?.value, + description: item.desc?.[0]?.value, + start: item.start, + stop: item.stop + }) + }) + + return programs + }, + async channels() { + const data = await axios + .get('https://epg.iptvx.one/api/channels.json') + .then(r => r.data) + .catch(console.log) + + return data.channels.map(channel => { + const [name] = channel.chan_names.split(' • ') + + return { + lang: 'ru', + site_id: channel.chan_id, + name + } + }) + } +} + +function parseItems(buffer, channel, date) { + if (!buffer) return [] + + if (!cachedContent) { + const content = pako.ungzip(buffer) + const encoded = iconv.decode(content, 'utf8') + cachedContent = parser.parse(encoded) + } + + const { programs } = cachedContent + + return programs.filter(p => p.channel === channel.site_id && date.isSame(p.start, 'day')) +} diff --git a/sites/epg.iptvx.one/epg.iptvx.one.test.js b/sites/epg.iptvx.one/epg.iptvx.one.test.js index e08601a6..de221979 100644 --- a/sites/epg.iptvx.one/epg.iptvx.one.test.js +++ b/sites/epg.iptvx.one/epg.iptvx.one.test.js @@ -1,46 +1,46 @@ -const { parser, url } = require('./epg.iptvx.one.config.js') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') -const fs = require('fs') -const path = require('path') - -dayjs.extend(utc) -dayjs.extend(timezone) - -const date = dayjs.utc('2025-09-24', 'YYYY-MM-DD').startOf('d') -const channel = { site_id: '12-omsk', xmltv_id: 'Channel12.ru' } - -it('can generate valid url', () => { - expect(url).toBe('https://iptvx.one/epg/epg_noarch.xml.gz') -}) - -it('can parse response', () => { - const buffer = fs.readFileSync(path.resolve(__dirname, '__data__/content.xml.gz')) - const results = parser({ date, buffer, channel }) - - expect(results.length).toBe(33) - expect(results[0]).toMatchObject({ - start: '2025-09-24T00:00:00.000Z', - stop: '2025-09-24T00:25:00.000Z', - title: 'Час новостей', - description: - 'Каждый день наша программа рассказывает вам о самых горячих событиях. Наше преимущество – оперативность: мы всегда там, где происходит что-то важное. Наш девиз – объективность: у нас нет запретных тем и героев вне критики. Наша цель – быть интересными каждому из вас. Мы живем рядом с вами, нас волнуют общие проблемы, каждую – мы обсуждаем, как свою' - }) - expect(results[32]).toMatchObject({ - start: '2025-09-24T22:35:00.000Z', - stop: '2025-09-25T00:00:00.000Z', - title: 'д/с Необыкновенные люди', - description: - 'В этом документальном цикле герои – врачи, спортсмены, волонтеры, творческие личности и многие другие – делятся своими историями. Их работа и деятельность имеют важное значение для жизни особенных людей, которые сталкиваются с непростыми жизненными условиями. Россия' - }) -}) - -it('can handle empty guide', () => { - const result = parser({ - date, - channel, - buffer: '' - }) - expect(result).toMatchObject([]) -}) +const { parser, url } = require('./epg.iptvx.one.config.js') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') +const fs = require('fs') +const path = require('path') + +dayjs.extend(utc) +dayjs.extend(timezone) + +const date = dayjs.utc('2025-09-24', 'YYYY-MM-DD').startOf('d') +const channel = { site_id: '12-omsk', xmltv_id: 'Channel12.ru' } + +it('can generate valid url', () => { + expect(url).toBe('https://iptvx.one/epg/epg_noarch.xml.gz') +}) + +it('can parse response', () => { + const buffer = fs.readFileSync(path.resolve(__dirname, '__data__/content.xml.gz')) + const results = parser({ date, buffer, channel }) + + expect(results.length).toBe(33) + expect(results[0]).toMatchObject({ + start: '2025-09-24T00:00:00.000Z', + stop: '2025-09-24T00:25:00.000Z', + title: 'Час новостей', + description: + 'Каждый день наша программа рассказывает вам о самых горячих событиях. Наше преимущество – оперативность: мы всегда там, где происходит что-то важное. Наш девиз – объективность: у нас нет запретных тем и героев вне критики. Наша цель – быть интересными каждому из вас. Мы живем рядом с вами, нас волнуют общие проблемы, каждую – мы обсуждаем, как свою' + }) + expect(results[32]).toMatchObject({ + start: '2025-09-24T22:35:00.000Z', + stop: '2025-09-25T00:00:00.000Z', + title: 'д/с Необыкновенные люди', + description: + 'В этом документальном цикле герои – врачи, спортсмены, волонтеры, творческие личности и многие другие – делятся своими историями. Их работа и деятельность имеют важное значение для жизни особенных людей, которые сталкиваются с непростыми жизненными условиями. Россия' + }) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + buffer: '' + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/epg.telemach.ba/epg.telemach.ba.config.js b/sites/epg.telemach.ba/epg.telemach.ba.config.js index 62c6a298..42bd295f 100644 --- a/sites/epg.telemach.ba/epg.telemach.ba.config.js +++ b/sites/epg.telemach.ba/epg.telemach.ba.config.js @@ -1,125 +1,127 @@ -const dayjs = require('dayjs') -const axios = require('axios') - -const BASIC_TOKEN = - 'MjdlMTFmNWUtODhlMi00OGU0LWJkNDItOGUxNWFiYmM2NmY1OjEyejJzMXJ3bXdhZmsxMGNkdzl0cjloOWFjYjZwdjJoZDhscXZ0aGc=' - -let session - -module.exports = { - site: 'epg.telemach.ba', - days: 3, - url({ channel, date, country }) { - const communityId = country === 'ba' ? 12 : country === 'me' ? 5 : 12 - const languageId = country === 'ba' ? 59 : country === 'me' ? 10001 : 59 - - return `https://api-web.ug-be.cdn.united.cloud/v1/public/events/epg?fromTime=${date.format( - 'YYYY-MM-DDTHH:mm:ss-00:00' - )}&toTime=${date - .add(1, 'days') - .subtract(1, 's') - .format('YYYY-MM-DDTHH:mm:ss-00:00')}&communityId=${communityId}&languageId=${languageId}&cid=${channel.site_id}` - }, - request: { - async headers({ country } = {}) { - if (!session) { - session = await loadSessionDetails() - if (!session || !session.access_token) return null - } - - const referer = country === 'me' ? 'https://epg.telemach.me/' : 'https://epg.telemach.ba/' - - return { - Authorization: `Bearer ${session.access_token}`, - Referer: referer - } - } - }, - parser({ content }) { - try { - const programs = [] - const data = JSON.parse(content) - for (const channelId in data) { - if (Array.isArray(data[channelId])) { - data[channelId].forEach(item => { - programs.push({ - title: item.title, - description: item.shortDescription, - image: parseImage(item), - season: item.seasonNumber, - episode: item.episodeNumber, - start: dayjs(item.startTime), - stop: dayjs(item.endTime) - }) - }) - } - } - - return programs - } catch { - return [] - } - }, - async channels({ country }) { - const communityID = country === 'ba' ? 12 : country === 'me' ? 5 : 12 - const languageID = country === 'ba' ? 59 : country === 'me' ? 10001 : 59 - const lang = country === 'ba' ? 'hr' : country === 'me' ? 'bs' : '' - - const tokenSession = await loadSessionDetails() - if (!tokenSession || !tokenSession.access_token) return null - - const data = await axios - .get( - `https://api-web.ug-be.cdn.united.cloud/v1/public/channels?channelType=TV&communityId=${communityID}&languageId=${languageID}&imageSize=L`, - { - headers: { - Authorization: `Bearer ${tokenSession.access_token}` - } - } - ) - .then(r => r.data) - .catch(err => { - console.error(err) - return null - }) - - if (!Array.isArray(data)) return [] - - return data - .map(item => ({ - lang, - site_id: item.id, - name: item.name - })) - .sort((a, b) => { - const ai = Number(a.site_id) - const bi = Number(b.site_id) - if (!Number.isFinite(ai) || !Number.isFinite(bi)) return String(a.site_id).localeCompare(String(b.site_id)) - return ai - bi - }) - } -} - -function parseImage(item) { - const baseURL = 'https://images-web.ug-be.cdn.united.cloud' - - return Array.isArray(item?.images) && item.images[0] ? `${baseURL}${item.images[0].path}` : null -} - -async function loadSessionDetails() { - try { - const r = await axios - .post( - 'https://api-web.ug-be.cdn.united.cloud/oauth/token?grant_type=client_credentials', - {}, - { - headers: { - Authorization: `Basic ${BASIC_TOKEN}` - } - } - ) - return r.data - } catch (message) { - return console.log(message) - } -} +const dayjs = require('dayjs') +const axios = require('axios') + +const BASIC_TOKEN = + 'MjdlMTFmNWUtODhlMi00OGU0LWJkNDItOGUxNWFiYmM2NmY1OjEyejJzMXJ3bXdhZmsxMGNkdzl0cjloOWFjYjZwdjJoZDhscXZ0aGc=' + +let session + +module.exports = { + site: 'epg.telemach.ba', + days: 3, + url({ channel, date, country }) { + const communityId = country === 'ba' ? 12 : country === 'me' ? 5 : 12 + const languageId = country === 'ba' ? 59 : country === 'me' ? 10001 : 59 + + return `https://api-web.ug-be.cdn.united.cloud/v1/public/events/epg?fromTime=${date.format( + 'YYYY-MM-DDTHH:mm:ss-00:00' + )}&toTime=${date + .add(1, 'days') + .subtract(1, 's') + .format( + 'YYYY-MM-DDTHH:mm:ss-00:00' + )}&communityId=${communityId}&languageId=${languageId}&cid=${channel.site_id}` + }, + request: { + async headers({ country } = {}) { + if (!session) { + session = await loadSessionDetails() + if (!session || !session.access_token) return null + } + + const referer = country === 'me' ? 'https://epg.telemach.me/' : 'https://epg.telemach.ba/' + + return { + Authorization: `Bearer ${session.access_token}`, + Referer: referer + } + } + }, + parser({ content }) { + try { + const programs = [] + const data = JSON.parse(content) + for (const channelId in data) { + if (Array.isArray(data[channelId])) { + data[channelId].forEach(item => { + programs.push({ + title: item.title, + description: item.shortDescription, + image: parseImage(item), + season: item.seasonNumber, + episode: item.episodeNumber, + start: dayjs(item.startTime), + stop: dayjs(item.endTime) + }) + }) + } + } + + return programs + } catch { + return [] + } + }, + async channels({ country }) { + const communityID = country === 'ba' ? 12 : country === 'me' ? 5 : 12 + const languageID = country === 'ba' ? 59 : country === 'me' ? 10001 : 59 + const lang = country === 'ba' ? 'hr' : country === 'me' ? 'bs' : '' + + const tokenSession = await loadSessionDetails() + if (!tokenSession || !tokenSession.access_token) return null + + const data = await axios + .get( + `https://api-web.ug-be.cdn.united.cloud/v1/public/channels?channelType=TV&communityId=${communityID}&languageId=${languageID}&imageSize=L`, + { + headers: { + Authorization: `Bearer ${tokenSession.access_token}` + } + } + ) + .then(r => r.data) + .catch(err => { + console.error(err) + return null + }) + + if (!Array.isArray(data)) return [] + + return data + .map(item => ({ + lang, + site_id: item.id, + name: item.name + })) + .sort((a, b) => { + const ai = Number(a.site_id) + const bi = Number(b.site_id) + if (!Number.isFinite(ai) || !Number.isFinite(bi)) + return String(a.site_id).localeCompare(String(b.site_id)) + return ai - bi + }) + } +} + +function parseImage(item) { + const baseURL = 'https://images-web.ug-be.cdn.united.cloud' + + return Array.isArray(item?.images) && item.images[0] ? `${baseURL}${item.images[0].path}` : null +} + +async function loadSessionDetails() { + try { + const r = await axios.post( + 'https://api-web.ug-be.cdn.united.cloud/oauth/token?grant_type=client_credentials', + {}, + { + headers: { + Authorization: `Basic ${BASIC_TOKEN}` + } + } + ) + return r.data + } catch (message) { + return console.log(message) + } +} diff --git a/sites/epg.telemach.ba/epg.telemach.ba.test.js b/sites/epg.telemach.ba/epg.telemach.ba.test.js index 350baea1..773306a1 100644 --- a/sites/epg.telemach.ba/epg.telemach.ba.test.js +++ b/sites/epg.telemach.ba/epg.telemach.ba.test.js @@ -1,94 +1,94 @@ -const { parser, url, request } = require('./epg.telemach.ba.config.js') -const fs = require('fs') -const axios = require('axios') -const path = require('path') -const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const customParseFormat = require('dayjs/plugin/customParseFormat') -dayjs.extend(customParseFormat) -dayjs.extend(utc) - -jest.mock('axios') - -axios.post.mockImplementation((url, data, opts) => { - if ( - url === 'https://api-web.ug-be.cdn.united.cloud/oauth/token?grant_type=client_credentials' && - JSON.stringify(opts.headers) === - JSON.stringify({ - Authorization: - 'Basic MjdlMTFmNWUtODhlMi00OGU0LWJkNDItOGUxNWFiYmM2NmY1OjEyejJzMXJ3bXdhZmsxMGNkdzl0cjloOWFjYjZwdjJoZDhscXZ0aGc=' - }) - ) { - return Promise.resolve({ - data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/session.json'))) - }) - } else { - return Promise.resolve({ - data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/no_session.json'))) - }) - } -}) - -const date = dayjs.utc('2025-01-20', 'YYYY-MM-DD').startOf('d') -const channel = { - site_id: '1607', - xmltv_id: 'N1HD.hr' -} - -it('can generate valid url', async () => { - const result = url({ date, channel, country : 'ba' }) - - expect(result).toBe( - 'https://api-web.ug-be.cdn.united.cloud/v1/public/events/epg?fromTime=2025-01-20T00:00:00-00:00&toTime=2025-01-20T23:59:59-00:00&communityId=12&languageId=59&cid=1607' - ) -}) - -it('can generate valid request headers', async () => { - const result = await request.headers() - - expect(result).toMatchObject({ - Authorization: - 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsidWMtaW5mby1zZXJ2aWNlIl0sInNjb3BlIjpbInJlYWQiXSwiZXhwIjoxNzM3Mzc3NDUxLCJhdXRob3JpdGllcyI6WyJST0xFX1BVQkxJQ19FUEciXSwianRpIjoiUVBubHdRSDczS1EwSnU0WDZwRTc2Zm5mUmRnIiwiY2xpZW50X2lkIjoiMjdlMTFmNWUtODhlMi00OGU0LWJkNDItOGUxNWFiYmM2NmY1In0.LqJAZUWEqIOcLrRSMpxZxnF-f1arKbHgfweLMXt-MBjCDbVJD39OQEsh_b68mtePAoa3n8LRbf3IFT40Ys5Vbe-k_Btm4a9gdEGr6cNi_4HGk4Bto6RUDvCp59VRfoRZhWe145Q2b5TS6szmC4Ws2YWIcZU5vrJcYs2GZiCk6U11MOcd1i52WmZj8cLPq0ZPDB_bzmTgYkvkVa7zOzUOPSl4M8T6fPUa__vVKUt0jOgtFoHeue2mQVgISC2puEGsBN0jJwvJ8PzM6IVxXrQno3MBv0VJy_qILiFPcxRePGRAmKLuEqagvikO7P_XQgFjZgg-j8u8wX2WwO0Yxft0Pg' - }) -}) - -it('can parse response', () => { - const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') - let results = parser({ content }) - results = results.map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) - - expect(results.length).toBe(35) - expect(results[0]).toMatchObject({ - start: '2025-01-20T00:00:00.000Z', - stop: '2025-01-20T00:30:00.000Z', - title: 'DW Euromaxx', - description: - 'Euromaxx je lifestyle Europe magazine, koji nam donosi zanimljivosti iz evropskih gradova, priče o načinu života ljudi i upoznaje nas sa njihovim kulturama.', - image: - 'https://images-web.ug-be.cdn.united.cloud/2021/02/18/06/05/21/stb_xl_cd4f72e01d308ecce782e29b69af7de6707b9e85.jpg', - season: null, - episode: null - }) - expect(results[34]).toMatchObject({ - start: '2025-01-20T23:50:00.000Z', - stop: '2025-01-21T00:00:00.000Z', - title: 'DW Shift', - description: 'Tjedni magazin koji nam donosi najnovije vijesti vezane za Internet.', - image: - 'https://images-web.ug-be.cdn.united.cloud/2023/06/09/13/07/53/stb_xl_0849d5d70c1337651b85b6335e340e15bd5d6a73_340fc454bc73019d052cf936ebee5da3.jpg', - season: null, - episode: null - }) -}) - -it('can handle empty guide', () => { - const results = parser({ - content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'), 'utf8') - }) - - expect(results).toMatchObject([]) -}) +const { parser, url, request } = require('./epg.telemach.ba.config.js') +const fs = require('fs') +const axios = require('axios') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +jest.mock('axios') + +axios.post.mockImplementation((url, data, opts) => { + if ( + url === 'https://api-web.ug-be.cdn.united.cloud/oauth/token?grant_type=client_credentials' && + JSON.stringify(opts.headers) === + JSON.stringify({ + Authorization: + 'Basic MjdlMTFmNWUtODhlMi00OGU0LWJkNDItOGUxNWFiYmM2NmY1OjEyejJzMXJ3bXdhZmsxMGNkdzl0cjloOWFjYjZwdjJoZDhscXZ0aGc=' + }) + ) { + return Promise.resolve({ + data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/session.json'))) + }) + } else { + return Promise.resolve({ + data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/no_session.json'))) + }) + } +}) + +const date = dayjs.utc('2025-01-20', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: '1607', + xmltv_id: 'N1HD.hr' +} + +it('can generate valid url', async () => { + const result = url({ date, channel, country: 'ba' }) + + expect(result).toBe( + 'https://api-web.ug-be.cdn.united.cloud/v1/public/events/epg?fromTime=2025-01-20T00:00:00-00:00&toTime=2025-01-20T23:59:59-00:00&communityId=12&languageId=59&cid=1607' + ) +}) + +it('can generate valid request headers', async () => { + const result = await request.headers() + + expect(result).toMatchObject({ + Authorization: + 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsidWMtaW5mby1zZXJ2aWNlIl0sInNjb3BlIjpbInJlYWQiXSwiZXhwIjoxNzM3Mzc3NDUxLCJhdXRob3JpdGllcyI6WyJST0xFX1BVQkxJQ19FUEciXSwianRpIjoiUVBubHdRSDczS1EwSnU0WDZwRTc2Zm5mUmRnIiwiY2xpZW50X2lkIjoiMjdlMTFmNWUtODhlMi00OGU0LWJkNDItOGUxNWFiYmM2NmY1In0.LqJAZUWEqIOcLrRSMpxZxnF-f1arKbHgfweLMXt-MBjCDbVJD39OQEsh_b68mtePAoa3n8LRbf3IFT40Ys5Vbe-k_Btm4a9gdEGr6cNi_4HGk4Bto6RUDvCp59VRfoRZhWe145Q2b5TS6szmC4Ws2YWIcZU5vrJcYs2GZiCk6U11MOcd1i52WmZj8cLPq0ZPDB_bzmTgYkvkVa7zOzUOPSl4M8T6fPUa__vVKUt0jOgtFoHeue2mQVgISC2puEGsBN0jJwvJ8PzM6IVxXrQno3MBv0VJy_qILiFPcxRePGRAmKLuEqagvikO7P_XQgFjZgg-j8u8wX2WwO0Yxft0Pg' + }) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') + let results = parser({ content }) + results = results.map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(35) + expect(results[0]).toMatchObject({ + start: '2025-01-20T00:00:00.000Z', + stop: '2025-01-20T00:30:00.000Z', + title: 'DW Euromaxx', + description: + 'Euromaxx je lifestyle Europe magazine, koji nam donosi zanimljivosti iz evropskih gradova, priče o načinu života ljudi i upoznaje nas sa njihovim kulturama.', + image: + 'https://images-web.ug-be.cdn.united.cloud/2021/02/18/06/05/21/stb_xl_cd4f72e01d308ecce782e29b69af7de6707b9e85.jpg', + season: null, + episode: null + }) + expect(results[34]).toMatchObject({ + start: '2025-01-20T23:50:00.000Z', + stop: '2025-01-21T00:00:00.000Z', + title: 'DW Shift', + description: 'Tjedni magazin koji nam donosi najnovije vijesti vezane za Internet.', + image: + 'https://images-web.ug-be.cdn.united.cloud/2023/06/09/13/07/53/stb_xl_0849d5d70c1337651b85b6335e340e15bd5d6a73_340fc454bc73019d052cf936ebee5da3.jpg', + season: null, + episode: null + }) +}) + +it('can handle empty guide', () => { + const results = parser({ + content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'), 'utf8') + }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/epgshare01.online/epgshare01.online.config.js b/sites/epgshare01.online/epgshare01.online.config.js index d134c83f..420cbeb1 100644 --- a/sites/epgshare01.online/epgshare01.online.config.js +++ b/sites/epgshare01.online/epgshare01.online.config.js @@ -1,123 +1,123 @@ -const axios = require('axios') -const iconv = require('iconv-lite') -const parser = require('epg-parser') -const { ungzip } = require('pako') -const zlib = require('zlib') -const sax = require('sax') - -let cachedContent - -module.exports = { - site: 'epgshare01.online', - days: 2, - url({ channel }) { - const [tag] = channel.site_id.split('#') - - return `https://epgshare01.online/epgshare01/epg_ripper_${tag}.xml.gz` - }, - request: { - cache: { - ttl: 24 * 60 * 60 * 1000 // 1 day - }, - maxContentLength: 100000000 // 100 MB - }, - parser({ buffer, channel, date, cached }) { - if (!cached) cachedContent = undefined - - let programs = [] - const items = parseItems(buffer, channel, date) - items.forEach(item => { - programs.push({ - title: item.title?.[0]?.value, - description: item.desc?.[0]?.value, - start: item.start, - stop: item.stop - }) - }) - - return programs - }, - async channels({ tag }) { - const url = `https://epgshare01.online/epgshare01/epg_ripper_${tag}.xml.gz` - try { - const res = await axios.get(url, { responseType: 'stream' }) - - const parserStream = sax.createStream(true, { trim: true }) - const channels = [] - let current = null - let curText = '' - let curTag = null - - parserStream.on('opentag', node => { - const name = node.name.toLowerCase() - if (name === 'channel') { - current = { id: node.attributes.id || node.attributes.ID, displayName: [] } - } else if (current && (name === 'display-name' || name === 'displayname')) { - curTag = 'displayName' - curText = '' - // capture possible lang attribute (xml:lang or lang) - current._lang = node.attributes['xml:lang'] || node.attributes['xml:Lang'] || node.attributes.lang - } - }) - - parserStream.on('text', text => { - if (curTag === 'displayName') curText += text - }) - - parserStream.on('cdata', text => { - if (curTag === 'displayName') curText += text - }) - - parserStream.on('closetag', nameRaw => { - const name = nameRaw.toLowerCase() - if (current && (name === 'display-name' || name === 'displayname')) { - current.displayName.push({ - lang: current._lang || 'en', - value: curText.trim() - }) - curTag = null - curText = '' - current._lang = undefined - } else if (name === 'channel' && current) { - channels.push({ id: current.id, displayName: current.displayName }) - current = null - } - }) - - await new Promise((resolve, reject) => { - res.data - .pipe(zlib.createGunzip()) - .pipe(parserStream) - .on('end', resolve) - .on('error', reject) - }) - - return channels.map(channel => { - const displayName = (channel.displayName && channel.displayName[0]) || { lang: 'en', value: channel.id } - return { - lang: displayName.lang || 'en', - site_id: `${tag}#${channel.id}`, - name: displayName.value - } - }) - } catch (err) { - console.error(err) - return [] - } - } -} - -function parseItems(buffer, channel, date) { - if (!buffer) return [] - - if (!cachedContent) { - const content = ungzip(buffer) - const encoded = iconv.decode(content, 'utf8') - cachedContent = parser.parse(encoded) - } - - const { programs } = cachedContent - const [, channelId] = channel.site_id.split('#') - - return programs.filter(p => p.channel === channelId && date.isSame(p.start, 'day')) -} +const axios = require('axios') +const iconv = require('iconv-lite') +const parser = require('epg-parser') +const { ungzip } = require('pako') +const zlib = require('zlib') +const sax = require('sax') + +let cachedContent + +module.exports = { + site: 'epgshare01.online', + days: 2, + url({ channel }) { + const [tag] = channel.site_id.split('#') + + return `https://epgshare01.online/epgshare01/epg_ripper_${tag}.xml.gz` + }, + request: { + cache: { + ttl: 24 * 60 * 60 * 1000 // 1 day + }, + maxContentLength: 100000000 // 100 MB + }, + parser({ buffer, channel, date, cached }) { + if (!cached) cachedContent = undefined + + let programs = [] + const items = parseItems(buffer, channel, date) + items.forEach(item => { + programs.push({ + title: item.title?.[0]?.value, + description: item.desc?.[0]?.value, + start: item.start, + stop: item.stop + }) + }) + + return programs + }, + async channels({ tag }) { + const url = `https://epgshare01.online/epgshare01/epg_ripper_${tag}.xml.gz` + try { + const res = await axios.get(url, { responseType: 'stream' }) + + const parserStream = sax.createStream(true, { trim: true }) + const channels = [] + let current = null + let curText = '' + let curTag = null + + parserStream.on('opentag', node => { + const name = node.name.toLowerCase() + if (name === 'channel') { + current = { id: node.attributes.id || node.attributes.ID, displayName: [] } + } else if (current && (name === 'display-name' || name === 'displayname')) { + curTag = 'displayName' + curText = '' + // capture possible lang attribute (xml:lang or lang) + current._lang = + node.attributes['xml:lang'] || node.attributes['xml:Lang'] || node.attributes.lang + } + }) + + parserStream.on('text', text => { + if (curTag === 'displayName') curText += text + }) + + parserStream.on('cdata', text => { + if (curTag === 'displayName') curText += text + }) + + parserStream.on('closetag', nameRaw => { + const name = nameRaw.toLowerCase() + if (current && (name === 'display-name' || name === 'displayname')) { + current.displayName.push({ + lang: current._lang || 'en', + value: curText.trim() + }) + curTag = null + curText = '' + current._lang = undefined + } else if (name === 'channel' && current) { + channels.push({ id: current.id, displayName: current.displayName }) + current = null + } + }) + + await new Promise((resolve, reject) => { + res.data.pipe(zlib.createGunzip()).pipe(parserStream).on('end', resolve).on('error', reject) + }) + + return channels.map(channel => { + const displayName = (channel.displayName && channel.displayName[0]) || { + lang: 'en', + value: channel.id + } + return { + lang: displayName.lang || 'en', + site_id: `${tag}#${channel.id}`, + name: displayName.value + } + }) + } catch (err) { + console.error(err) + return [] + } + } +} + +function parseItems(buffer, channel, date) { + if (!buffer) return [] + + if (!cachedContent) { + const content = ungzip(buffer) + const encoded = iconv.decode(content, 'utf8') + cachedContent = parser.parse(encoded) + } + + const { programs } = cachedContent + const [, channelId] = channel.site_id.split('#') + + return programs.filter(p => p.channel === channelId && date.isSame(p.start, 'day')) +}