Initial Commit
This commit is contained in:
3393
sites/cgates.lt/__data__/content.html
Normal file
3393
sites/cgates.lt/__data__/content.html
Normal file
File diff suppressed because one or more lines are too long
124
sites/cgates.lt/cgates.lt.channels.xml
Normal file
124
sites/cgates.lt/cgates.lt.channels.xml
Normal file
@@ -0,0 +1,124 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site site="cgates.lt">
|
||||
<channels>
|
||||
<channel lang="lt" xmltv_id="1Plus1.ua" site_id="1plus1">1+1</channel>
|
||||
<channel lang="lt" xmltv_id="1Plus2.lv" site_id="1plus2">1+2</channel>
|
||||
<channel lang="lt" xmltv_id="2TV.lt" site_id="2tv">2TV</channel>
|
||||
<channel lang="lt" xmltv_id="366TV.ua" site_id="36-6-tv">36.6 TV</channel>
|
||||
<channel lang="lt" xmltv_id="ArirangTV.kr" site_id="arirang-tv">Arirang TV</channel>
|
||||
<channel lang="en" xmltv_id="BBCWorldNewsEurope.uk" site_id="bbc-world-news">BBC World News</channel>
|
||||
<channel lang="lt" xmltv_id="BTV.lt" site_id="btv-hd">BTV HD</channel>
|
||||
<channel lang="en" xmltv_id="BabyTV.uk" site_id="baby-tv">Baby TV</channel>
|
||||
<channel lang="lt" xmltv_id="BalticumAuksinis.lt" site_id="balticum-auksinis">Balticum Auksinis</channel>
|
||||
<channel lang="lt" xmltv_id="BalticumPlatinum.lt" site_id="balticum-platinum-hd">Balticum Platinum HD</channel>
|
||||
<channel lang="lt" xmltv_id="BalticumTV.lt" site_id="balticum-tv">Balticum TV</channel>
|
||||
<channel lang="en" xmltv_id="BloombergTVEurope.uk" site_id="bloomberg-television">Bloomberg Television</channel>
|
||||
<channel lang="lt" xmltv_id="BlueHustler.nl" site_id="blue-hustler">Blue Hustler</channel>
|
||||
<channel lang="en" xmltv_id="CBSRealityEMEA.uk" site_id="cbs-reality">CBS Reality</channel>
|
||||
<channel lang="en" xmltv_id="CNBCEurope.uk" site_id="cnbc-europe">CNBC Europe</channel>
|
||||
<channel lang="en" xmltv_id="CNNInternationalEurope.us" site_id="cnn-international">CNN International</channel>
|
||||
<channel lang="lt" xmltv_id="CurrentTimeTV.cz" site_id="nastojashcheje-vremya">Nastojashcheje Vremya</channel>
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="dtx-hd">DTX HD</channel> -->
|
||||
<channel lang="lt" xmltv_id="Dacha.ua" site_id="dacha">Dacha</channel>
|
||||
<channel lang="lt" xmltv_id="DelfiTV.ee" site_id="delfi-tv-hd">Delfi TV HD</channel>
|
||||
<channel lang="en" xmltv_id="DiscoveryChannelLatvia.lv" site_id="discovery-channel-hd">Discovery Channel HD</channel>
|
||||
<channel lang="en" xmltv_id="DocuBox.nl" site_id="docubox-hd">DocuBox HD</channel>
|
||||
<channel lang="en" xmltv_id="Duo3.ee" site_id="sony-channel-hd">Duo 3 HD</channel>
|
||||
<channel lang="en" xmltv_id="Duo6.ee" site_id="sony-turbo-hd">Duo 6 HD</channel>
|
||||
<channel lang="lt" xmltv_id="Duo7.ee" site_id="duo-7">Kanal 7</channel>
|
||||
<channel lang="lt" xmltv_id="DzukijosTV.lt" site_id="dzukijos-tv">Dzūkijos TV</channel>
|
||||
<channel lang="en" xmltv_id="EpicDrama.se" site_id="epic-drama-hd">Epic Drama HD</channel>
|
||||
<channel lang="en" xmltv_id="Eurochannel.uk" site_id="eurochannel">Eurochannel</channel>
|
||||
<channel lang="en" xmltv_id="EuronewsRussian.fr" site_id="euronews-2">Euronews RU</channel>
|
||||
<channel lang="en" xmltv_id="ExtremeSportsChannelEurope.nl" site_id="extreme-sports">Extreme Sports</channel>
|
||||
<channel lang="en" xmltv_id="FashionTVEurope.fr" site_id="fashion-tv">Fashion TV</channel>
|
||||
<channel lang="en" xmltv_id="FastFunBox.nl" site_id="fastfun-box-hd">Fast&Fun Box HD</channel>
|
||||
<channel lang="en" xmltv_id="FightSports.us" site_id="fight-sports-hd">Fight Sports HD</channel>
|
||||
<channel lang="en" xmltv_id="FilmBoxArthouse.nl" site_id="filmbox-arthouse">FilmBox ArtHouse</channel>
|
||||
<channel lang="lt" xmltv_id="FilmUADrama.ua" site_id="film-ua-drama">Film UA Drama</channel>
|
||||
<channel lang="en" xmltv_id="Filmzone.ee" site_id="filmzone">FilmZone</channel>
|
||||
<channel lang="lt" xmltv_id="FilmzonePlus.ee" site_id="filmzone-hd">FilmZone+ HD</channel>
|
||||
<channel lang="en" xmltv_id="France24French.fr" site_id="france-24">France 24</channel>
|
||||
<channel lang="en" xmltv_id="Gametoon.nl" site_id="game-toon-hd">Game Toon HD</channel>
|
||||
<channel lang="lt" xmltv_id="GulliGirl.ru" site_id="gulli-girl">Gulli Girl</channel>
|
||||
<channel lang="lt" xmltv_id="InfoTV.lt" site_id="info-tv-hd">Info TV HD</channel>
|
||||
<channel lang="lt" xmltv_id="InterPlus.ua" site_id="inter-plus">Inter+</channel>
|
||||
<channel lang="en" xmltv_id="JimJamEurope.uk" site_id="jim-jam">Jim Jam</channel>
|
||||
<channel lang="en" xmltv_id="KidZoneMini.ee" site_id="kidzone-plus-hd">KidZone Mini HD</channel>
|
||||
<channel lang="en" xmltv_id="KidZoneTV.ee" site_id="kidzone-tv">KidZone TV</channel>
|
||||
<channel lang="lt" xmltv_id="KusKus.ua" site_id="kus-kus">Kus-Kus</channel>
|
||||
<channel lang="lt" xmltv_id="LNK.lt" site_id="lnk-hd">LNK HD</channel>
|
||||
<channel lang="lt" xmltv_id="LRTLituanica.lt" site_id="lrt-lituanica">LRT Lituanica</channel>
|
||||
<channel lang="lt" xmltv_id="LRTPlius.lt" site_id="lrt-kultura-hd">LRT Plius HD</channel>
|
||||
<channel lang="lt" xmltv_id="LRTTV.lt" site_id="lrt-televizija-hd">LRT Televizija HD</channel>
|
||||
<channel lang="lt" xmltv_id="LietuvosRytasTV.lt" site_id="lietuvos-ryto-tv-hd">Lietuvos ryto TV HD</channel>
|
||||
<channel lang="en" xmltv_id="LuxeTV.lu" site_id="luxe-tv-hd">Luxe.TV HD</channel>
|
||||
<channel lang="en" xmltv_id="MTV00s.uk" site_id="vh1">MTV 00s</channel>
|
||||
<channel lang="en" xmltv_id="MTVHitsEurope.uk" site_id="mtv-hits">MTV Hits</channel>
|
||||
<channel lang="lt" xmltv_id="MarijampolesTV.lt" site_id="marijampoles-tv">Marijampolės TV</channel>
|
||||
<channel lang="en" xmltv_id="Mezzo.fr" site_id="mezzo">Mezzo</channel>
|
||||
<channel lang="en" xmltv_id="PlayboyTVEurope.us" site_id="playboy-tv">Playboy TV</channel>
|
||||
<channel lang="en" xmltv_id="SetantaSports1Evraziya.ie" site_id="setanta-sports-hd">Setanta Sports 1 HD</channel>
|
||||
<channel lang="lt" xmltv_id="SiauliuTV.lt" site_id="siauliu-televizija">Šiaulių televizija</channel>
|
||||
<channel lang="en" xmltv_id="Smartzone.ee" site_id="smartzone-hd">Smartzone HD</channel>
|
||||
<channel lang="lt" xmltv_id="Sport1.lt" site_id="sport-1-hd">Sport 1 HD</channel>
|
||||
<channel lang="lt" xmltv_id="StarCinema.ua" site_id="star-cinema">Star Cinema</channel>
|
||||
<channel lang="lt" xmltv_id="StarFamily.ua" site_id="star-family">Star Family</channel>
|
||||
<channel lang="en" xmltv_id="TV1000ActionEast.ru" site_id="tv-1000-action">TV 1000 Action</channel>
|
||||
<channel lang="en" xmltv_id="TV1000East.ru" site_id="tv-1000">TV 1000</channel>
|
||||
<channel lang="en" xmltv_id="TV1000WorldKino.ru" site_id="tv-1000-world-kino">TV 1000 World Kino</channel>
|
||||
<channel lang="lt" xmltv_id="TV1.lt" site_id="tv1-hd">TV1 HD</channel>
|
||||
<channel lang="lt" xmltv_id="TV3Film.lv" site_id="tv-1000-premium-hd">TV3 Film HD</channel>
|
||||
<channel lang="lt" xmltv_id="TV3Lithuania.lt" site_id="tv3-hd">TV3 HD</channel>
|
||||
<channel lang="lt" xmltv_id="TV3Plus.lv" site_id="tv3-plus-hd">TV3 Plus HD</channel>
|
||||
<channel lang="en" xmltv_id="TV3Sport.uk" site_id="viasat-sport-baltic-hd">TV3 Sport HD</channel>
|
||||
<channel lang="en" xmltv_id="TV3Sport2.uk" site_id="tvplay-sports-plus-hd">TV3 Sport 2 HD</channel>
|
||||
<channel lang="en" xmltv_id="TV3SportOpen.uk" site_id="tv3-sport-open-hd">TV3 Sport Open HD</channel>
|
||||
<channel lang="lt" xmltv_id="TV6Lithuania.lt" site_id="tv6-hd">TV6 HD</channel>
|
||||
<channel lang="lt" xmltv_id="TV8Lithuania.lt" site_id="tv8-hd">TV8 HD</channel>
|
||||
<channel lang="lt" xmltv_id="TVBolt.ua" site_id="bolt">Bolt</channel>
|
||||
<channel lang="lt" xmltv_id="TVPInfo.pl" site_id="tvp-info">TVP Info</channel>
|
||||
<channel lang="lt" xmltv_id="TVPPolonia.pl" site_id="tvp-polonia">TVP Polonia</channel>
|
||||
<channel lang="lt" xmltv_id="TiJiRussia.ru" site_id="tiji">Tiji</channel>
|
||||
<channel lang="lt" xmltv_id="VIPComedy.ru" site_id="vip-comedy">ViP Comedy</channel>
|
||||
<channel lang="en" xmltv_id="VividTouch.uk" site_id="vivid-touch">Vivid Touch</channel>
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="amc">AMC</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="animal-planet-hd">Animal Planet HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="boomerang">Boomerang</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="cartoon-network">Cartoon Network</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="da-vinci-learning">Da Vinci Learning</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="deutsche-welle">Deutsche Welle</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="discovery-science-hd">Discovery Science HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="euronews">Euronews HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="eurosport-1-hd">Eurosport 1 HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="eurosport-2-hd">Eurosport 2 HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="film-ua-live">Film UA Live</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="filmbox">FilmBox</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="food-network">Food Network</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="fox">FOX</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="fox-hd">FOX HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="fox-life">FOX Life</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="hgtv-hd">HGTV HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="history-channel-hd">History Channel HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="id-xtra-hd">Investigation Discovery HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="mtv-live-hd">MTV Live HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="nat-geo-wild">Nat Geo Wild</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="national-geographic-channel">National Geographic Channel</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="national-geographic-hd">National Geographic HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="nick-jr">Nick Jr.</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="nick-toons">Nick Toons</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="nickelodeon">Nickelodeon</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="quiz-tv">Quiz TV</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="rtl">RTL</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="rtv-international">RTV International</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="seimas-tiesiogiai">Seimas tiesiogiai</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="tlc">TLC</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="travel-channel-hd">Travel Channel HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="tv7">TV7</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="tvp-wilno">TVP Wilno</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="ukraine-24">Ukraine 24</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="viasat-explore-hd">Viasat Explore HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="viasat-history-hd">Viasat History HD</channel> -->
|
||||
<!-- <channel lang="lt" xmltv_id="" site_id="viasat-nature">Viasat Nature HD</channel> -->
|
||||
</channels>
|
||||
</site>
|
||||
92
sites/cgates.lt/cgates.lt.config.js
Normal file
92
sites/cgates.lt/cgates.lt.config.js
Normal file
@@ -0,0 +1,92 @@
|
||||
const dayjs = require('dayjs')
|
||||
const axios = require('axios')
|
||||
const cheerio = require('cheerio')
|
||||
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: 'cgates.lt',
|
||||
days: 2,
|
||||
url: function ({ channel }) {
|
||||
return `https://www.cgates.lt/tv-kanalai/${channel.site_id}/`
|
||||
},
|
||||
parser: function ({ content, date }) {
|
||||
let programs = []
|
||||
const items = parseItems(content, date)
|
||||
items.forEach(item => {
|
||||
const prev = programs[programs.length - 1]
|
||||
const $item = cheerio.load(item)
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start.isBefore(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),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
let html = await axios
|
||||
.get(`https://www.cgates.lt/televizija/tv-programa-savaitei/`)
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
let $ = cheerio.load(html)
|
||||
const items = $('.kanalas_wrap').toArray()
|
||||
|
||||
return items.map(item => {
|
||||
const name = $(item).find('h6').text().trim()
|
||||
const link = $(item).find('a').attr('href')
|
||||
const [_, site_id] = link.match(/\/tv-kanalai\/(.*)\//) || [null, null]
|
||||
|
||||
return {
|
||||
lang: 'lt',
|
||||
site_id,
|
||||
name
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function parseTitle($item) {
|
||||
const title = $item('td:nth-child(2) > .vc_toggle > .vc_toggle_title').text().trim()
|
||||
|
||||
return title || $item('td:nth-child(2)').text().trim()
|
||||
}
|
||||
|
||||
function parseDescription($item) {
|
||||
return $item('.vc_toggle_content > p').text().trim()
|
||||
}
|
||||
|
||||
function parseStart($item, date) {
|
||||
const time = $item('.laikas')
|
||||
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Europe/Vilnius')
|
||||
}
|
||||
|
||||
function parseItems(content, date) {
|
||||
const $ = cheerio.load(content)
|
||||
const section = $(
|
||||
'article > div:nth-child(2) > div.vc_row.wpb_row.vc_row-fluid > div > div > div > div > div'
|
||||
)
|
||||
.filter(function () {
|
||||
return $(`.dt-fancy-title:contains("${date.format('YYYY-MM-DD')}")`, this).length === 1
|
||||
})
|
||||
.first()
|
||||
|
||||
return $('.tv_programa tr', section).toArray()
|
||||
}
|
||||
52
sites/cgates.lt/cgates.lt.test.js
Normal file
52
sites/cgates.lt/cgates.lt.test.js
Normal file
@@ -0,0 +1,52 @@
|
||||
// npm run channels:parse -- --config=./sites/cgates.lt/cgates.lt.config.js --output=./sites/cgates.lt/cgates.lt.channels.xml
|
||||
// npx epg-grabber --config=sites/cgates.lt/cgates.lt.config.js --channels=sites/cgates.lt/cgates.lt.channels.xml --output=guide.xml --days=2
|
||||
|
||||
const { parser, url } = require('./cgates.lt.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('2022-08-30', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: 'lrt-televizija-hd',
|
||||
xmltv_id: 'LRTTV.lt'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ channel, date })).toBe('https://www.cgates.lt/tv-kanalai/lrt-televizija-hd/')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
|
||||
const results = parser({ content, date }).map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results.length).toBe(35)
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2022-08-29T21:05:00.000Z',
|
||||
stop: '2022-08-29T21:30:00.000Z',
|
||||
title: '31-oji nuovada (District 31), Drama, 2016',
|
||||
description:
|
||||
'Seriale pasakojama apie kasdienius policijos išbandymus ir sunkumus. Vadovybė pertvarko Monrealio miesto policijos struktūrą: išskirsto į 36 policijos nuovadas, kad šios būtų arčiau gyventojų. 31-osios nuovados darbuotojams tenka kone sunkiausias darbas: šiame miesto rajone gyvena socialiai remtinos šeimos, nuolat kovojančios su turtingųjų klase, įsipliekia ir rasinių konfliktų. Be to, čia akivaizdus kartų atotrūkis, o tapti nusikalstamo pasaulio dalimi labai lengva. Serialo siužetas – intensyvus, nauji nusikaltimai tiriami kiekvieną savaitę. Čia vaizduojamas nepagražintas nusikalstamas pasaulis, jo poveikis rajono gyventojams. Policijos nuovados darbuotojai narplios įvairiausių nusikaltimų schemas. Tai ir pagrobimai, įsilaužimai, žmogžudystės, smurtas artimoje aplinkoje, lytiniai nusikaltimai, prekyba narkotikais, teroristinių išpuolių grėsmė ir pan. Šis serialas leis žiūrovui įsigilinti į policijos pareigūnų realybę, pateiks skirtingą požiūrį į kiekvieną nusikaltimą.'
|
||||
})
|
||||
|
||||
expect(results[34]).toMatchObject({
|
||||
start: '2022-08-30T20:45:00.000Z',
|
||||
stop: '2022-08-30T21:15:00.000Z',
|
||||
title: '31-oji nuovada (District 31), Drama, 2016!'
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
content: ''
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
})
|
||||
Reference in New Issue
Block a user