Replace LF line endings with CRLF

This commit is contained in:
freearhey
2025-09-28 17:55:05 +03:00
parent efc74efcf8
commit b6a589c62a
1192 changed files with 445631 additions and 445631 deletions

View File

@@ -1,50 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="cgates.lt" lang="en" xmltv_id="BlueHustler.nl" site_id="blue-hustler">Blue Hustler</channel>
<channel site="cgates.lt" lang="en" xmltv_id="DiscoveryChannel.lv" site_id="discovery-channel-hd">Discovery Channel</channel>
<channel site="cgates.lt" lang="en" xmltv_id="DocuBox.nl" site_id="docubox-hd">DocuBox</channel>
<channel site="cgates.lt" lang="en" xmltv_id="Duo3.ee" site_id="sony-channel-hd">Duo 3</channel>
<channel site="cgates.lt" lang="en" xmltv_id="Go3SportOpen.ee" site_id="tv3-sport-open-hd">Go3 Sport Open</channel>
<channel site="cgates.lt" lang="en" xmltv_id="KidZoneMax.ee" site_id="kidzone-tv">Kidzone Max</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="animal-planet-hd">Animal Planet</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="deutsche-welle">Deutsche Welle</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="eurosport-1-hd">Eurosport 1</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="eurosport-2-hd">Eurosport 2</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="food-network">Food Network</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="freedom-tv">Freedom TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="geru-naujienu-televizija">JPTV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="hgtv-hd">HGTV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="id-xtra-hd">Investigation Discovery</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="national-geographic-hd">National Geographic</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="rtv-international">RTV International</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="super-plius-hd">Super+</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="tlc">TLC</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="travel-channel-hd">Travel Channel</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="tv7">TV7</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="viasat-history-hd">Viasat History</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="viasat-kino-comedy">Viasat Kino Comedy</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="2TV.lt" site_id="2tv">2TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="BalticumAuksinis.lt" site_id="balticum-auksinis">Balticum Auksinis</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="BalticumTV.lt" site_id="balticum-tv">Balticum TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="BTV.lt@HD" site_id="btv-hd">BTV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="CurrentTimeTV.cz" site_id="nastojashcheje-vremya">Nastojashcheje Vremya</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="DelfiTV.lt" site_id="delfi-tv-hd">Delfi TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="InfoTV.lt" site_id="info-tv-hd">Info TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="LietuvosRytasTV.lt" site_id="lietuvos-ryto-tv-hd">Lietuvos ryto TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="LNK.lt@HD" site_id="lnk-hd">LNK</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="LRTPlius.lt" site_id="lrt-kultura-hd">LRT Plius</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="LRTTV.lt" site_id="lrt-televizija-hd">LRT Televizija</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="MarijampolesTV.lt" site_id="marijampoles-tv">Marijampolės TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="SiauliuTV.lt" site_id="siauliu-televizija">Etaplius TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="Sport1.lt" site_id="sport-1-hd">Sport 1</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV1.lt" site_id="tv1-hd">TV1</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV3.lt" site_id="tv3-hd">TV3</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV3Plus.lv" site_id="tv3-plus-hd">TV3 Plus</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV6.lt" site_id="tv6-hd">TV6</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV8.lt" site_id="tv8-hd">TV8</channel>
<channel site="cgates.lt" lang="ru" xmltv_id="Kanal7.ee" site_id="duo-7">Kanal 7 Baltic</channel>
<channel site="cgates.lt" lang="ru" xmltv_id="StarFamily.ru" site_id="star-family">Star Family</channel>
<channel site="cgates.lt" lang="uk" xmltv_id="BalticumPlatinumHD.lt" site_id="balticum-platinum-hd">Balticum Platinum</channel>
<channel site="cgates.lt" lang="uk" xmltv_id="FilmUADrama.ua" site_id="film-ua-drama">Film UA Drama</channel>
<channel site="cgates.lt" lang="uk" xmltv_id="StarCinema.ua" site_id="star-cinema">Star Cinema</channel>
</channels>
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="cgates.lt" lang="en" xmltv_id="BlueHustler.nl" site_id="blue-hustler">Blue Hustler</channel>
<channel site="cgates.lt" lang="en" xmltv_id="DiscoveryChannel.lv" site_id="discovery-channel-hd">Discovery Channel</channel>
<channel site="cgates.lt" lang="en" xmltv_id="DocuBox.nl" site_id="docubox-hd">DocuBox</channel>
<channel site="cgates.lt" lang="en" xmltv_id="Duo3.ee" site_id="sony-channel-hd">Duo 3</channel>
<channel site="cgates.lt" lang="en" xmltv_id="Go3SportOpen.ee" site_id="tv3-sport-open-hd">Go3 Sport Open</channel>
<channel site="cgates.lt" lang="en" xmltv_id="KidZoneMax.ee" site_id="kidzone-tv">Kidzone Max</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="animal-planet-hd">Animal Planet</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="deutsche-welle">Deutsche Welle</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="eurosport-1-hd">Eurosport 1</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="eurosport-2-hd">Eurosport 2</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="food-network">Food Network</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="freedom-tv">Freedom TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="geru-naujienu-televizija">JPTV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="hgtv-hd">HGTV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="id-xtra-hd">Investigation Discovery</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="national-geographic-hd">National Geographic</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="rtv-international">RTV International</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="super-plius-hd">Super+</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="tlc">TLC</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="travel-channel-hd">Travel Channel</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="tv7">TV7</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="viasat-history-hd">Viasat History</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="" site_id="viasat-kino-comedy">Viasat Kino Comedy</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="2TV.lt" site_id="2tv">2TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="BalticumAuksinis.lt" site_id="balticum-auksinis">Balticum Auksinis</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="BalticumTV.lt" site_id="balticum-tv">Balticum TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="BTV.lt@HD" site_id="btv-hd">BTV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="CurrentTimeTV.cz" site_id="nastojashcheje-vremya">Nastojashcheje Vremya</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="DelfiTV.lt" site_id="delfi-tv-hd">Delfi TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="InfoTV.lt" site_id="info-tv-hd">Info TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="LietuvosRytasTV.lt" site_id="lietuvos-ryto-tv-hd">Lietuvos ryto TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="LNK.lt@HD" site_id="lnk-hd">LNK</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="LRTPlius.lt" site_id="lrt-kultura-hd">LRT Plius</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="LRTTV.lt" site_id="lrt-televizija-hd">LRT Televizija</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="MarijampolesTV.lt" site_id="marijampoles-tv">Marijampolės TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="SiauliuTV.lt" site_id="siauliu-televizija">Etaplius TV</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="Sport1.lt" site_id="sport-1-hd">Sport 1</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV1.lt" site_id="tv1-hd">TV1</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV3.lt" site_id="tv3-hd">TV3</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV3Plus.lv" site_id="tv3-plus-hd">TV3 Plus</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV6.lt" site_id="tv6-hd">TV6</channel>
<channel site="cgates.lt" lang="lt" xmltv_id="TV8.lt" site_id="tv8-hd">TV8</channel>
<channel site="cgates.lt" lang="ru" xmltv_id="Kanal7.ee" site_id="duo-7">Kanal 7 Baltic</channel>
<channel site="cgates.lt" lang="ru" xmltv_id="StarFamily.ru" site_id="star-family">Star Family</channel>
<channel site="cgates.lt" lang="uk" xmltv_id="BalticumPlatinumHD.lt" site_id="balticum-platinum-hd">Balticum Platinum</channel>
<channel site="cgates.lt" lang="uk" xmltv_id="FilmUADrama.ua" site_id="film-ua-drama">Film UA Drama</channel>
<channel site="cgates.lt" lang="uk" xmltv_id="StarCinema.ua" site_id="star-cinema">Star Cinema</channel>
</channels>

View File

@@ -1,92 +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 = $('.vc_tta-panel.vc_active .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()
}
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 = $('.vc_tta-panel.vc_active .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()
}

View File

@@ -1,49 +1,49 @@
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([])
})
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([])
})

View File

@@ -1,21 +1,21 @@
# cgates.lt
https://www.cgates.lt/televizija/tv-programa-savaitei/
### Download the guide
```sh
npm run grab --- --site=cgates.lt
```
### Update channel list
```sh
npm run channels:parse --- --config=./sites/cgates.lt/cgates.lt.config.js --output=./sites/cgates.lt/cgates.lt.channels.xml
```
### Test
```sh
npm test --- cgates.lt
```
# cgates.lt
https://www.cgates.lt/televizija/tv-programa-savaitei/
### Download the guide
```sh
npm run grab --- --site=cgates.lt
```
### Update channel list
```sh
npm run channels:parse --- --config=./sites/cgates.lt/cgates.lt.config.js --output=./sites/cgates.lt/cgates.lt.channels.xml
```
### Test
```sh
npm test --- cgates.lt
```