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,57 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="dens.tv" lang="id" xmltv_id="" site_id="3">Live Streaming 1</channel>
<channel site="dens.tv" lang="id" xmltv_id="" site_id="127">Crema TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="" site_id="143">Qwest TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="" site_id="144">Russia Today (RT)</channel>
<channel site="dens.tv" lang="id" xmltv_id="AlJazeera.qa" site_id="27">Al Jazeera Arabic</channel>
<channel site="dens.tv" lang="id" xmltv_id="AlJazeera.qa@English" site_id="56">Al Jazeera English</channel>
<channel site="dens.tv" lang="id" xmltv_id="AlQuranAlKareemTV.sa" site_id="82">Quran TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="AlSunnahAlNabawiyahTV.sa" site_id="88">Sunna TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="AniplusAsia.sg" site_id="38">ANIPLUS HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="BTV.id" site_id="80">BTV</channel>
<channel site="dens.tv" lang="id" xmltv_id="CCTV4Asia.cn" site_id="85">CCTV-4</channel>
<channel site="dens.tv" lang="id" xmltv_id="CGTN.cn" site_id="16">CGTN Documentary</channel>
<channel site="dens.tv" lang="id" xmltv_id="ChannelJowo.id" site_id="137">Channel Jowo</channel>
<channel site="dens.tv" lang="id" xmltv_id="CNA.sg" site_id="61">CNA</channel>
<channel site="dens.tv" lang="id" xmltv_id="DAAITV.id" site_id="23">DAAI TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="DanceTelevision.nl" site_id="130">Dance TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensFoodChannel.id" site_id="117">DensFood Channel</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensLearningKnowledge.id" site_id="1">DensKnowledge</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensLifeStyle.id" site_id="42">DensLife&amp;Style</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensPlay.id" site_id="107">DensPlay</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensShowBiz.id" site_id="102">DensShowBiz</channel>
<channel site="dens.tv" lang="id" xmltv_id="DIM.ua" site_id="132">DIM TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="DW.de@English" site_id="81">DW-TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="ElshintaTV.id" site_id="94">Elshinta TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="France24.fr@English" site_id="69">France 24</channel>
<channel site="dens.tv" lang="id" xmltv_id="FREEDOM.ua" site_id="104">FREEDOM</channel>
<channel site="dens.tv" lang="id" xmltv_id="IDTV.id" site_id="131">Berita Satu</channel>
<channel site="dens.tv" lang="id" xmltv_id="JakTV.id" site_id="112">Jak tv</channel>
<channel site="dens.tv" lang="id" xmltv_id="KBSKorea.kr" site_id="133">KBS Korea</channel>
<channel site="dens.tv" lang="id" xmltv_id="KBSWorld.kr" site_id="134">KBS World</channel>
<channel site="dens.tv" lang="id" xmltv_id="KPlus.sg" site_id="100">K-PLUS HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="MagnaChannel.id" site_id="122">Magna Channel</channel>
<channel site="dens.tv" lang="id" xmltv_id="MetroTV.id" site_id="6">Metro TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="Motorvision.de" site_id="98">Motorvision+</channel>
<channel site="dens.tv" lang="id" xmltv_id="MyCinemaAsia.id" site_id="109">My Cinema Asia</channel>
<channel site="dens.tv" lang="id" xmltv_id="MyCinemaEurope.ch" site_id="92">My Cinema Europe HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="MyKidz.id" site_id="96">My Kidz HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="NET.id" site_id="13">MDTV</channel>
<channel site="dens.tv" lang="id" xmltv_id="NHKWorldJapan.jp" site_id="77">NHK WORLD-JAPAN</channel>
<channel site="dens.tv" lang="id" xmltv_id="NusantaraTV.id" site_id="138">Nusantara TV (NTV)</channel>
<channel site="dens.tv" lang="id" xmltv_id="RajawaliTV.id" site_id="22">RTV</channel>
<channel site="dens.tv" lang="id" xmltv_id="ROCKAction.sg" site_id="44">ROCK Action</channel>
<channel site="dens.tv" lang="id" xmltv_id="ROCKEntertainment.sg" site_id="39">ROCK Entertainment HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="RodjaTV.id" site_id="21">RodjaTV</channel>
<channel site="dens.tv" lang="id" xmltv_id="StingrayClassica.ca" site_id="128">Stingray Classica</channel>
<channel site="dens.tv" lang="id" xmltv_id="TBN.ru" site_id="78">TBN</channel>
<channel site="dens.tv" lang="id" xmltv_id="TRTWorld.tr" site_id="41">TRT World</channel>
<channel site="dens.tv" lang="id" xmltv_id="TV5MondeAsia.fr" site_id="90">TV5MONDE ASIE</channel>
<channel site="dens.tv" lang="id" xmltv_id="TV5MondeStyle.fr" site_id="37">TV5MONDE Style HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="tvNAsia.hk" site_id="59">tvN HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="tvNMoviesAsia.hk" site_id="58">tvN Movies HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="TVRINasional.id" site_id="17">TVRI</channel>
<channel site="dens.tv" lang="id" xmltv_id="TVRISport.id" site_id="118">TVRI Sport</channel>
<channel site="dens.tv" lang="id" xmltv_id="WION.in" site_id="79">WION</channel>
</channels>
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="dens.tv" lang="id" xmltv_id="" site_id="3">Live Streaming 1</channel>
<channel site="dens.tv" lang="id" xmltv_id="" site_id="127">Crema TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="" site_id="143">Qwest TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="" site_id="144">Russia Today (RT)</channel>
<channel site="dens.tv" lang="id" xmltv_id="AlJazeera.qa" site_id="27">Al Jazeera Arabic</channel>
<channel site="dens.tv" lang="id" xmltv_id="AlJazeera.qa@English" site_id="56">Al Jazeera English</channel>
<channel site="dens.tv" lang="id" xmltv_id="AlQuranAlKareemTV.sa" site_id="82">Quran TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="AlSunnahAlNabawiyahTV.sa" site_id="88">Sunna TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="AniplusAsia.sg" site_id="38">ANIPLUS HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="BTV.id" site_id="80">BTV</channel>
<channel site="dens.tv" lang="id" xmltv_id="CCTV4Asia.cn" site_id="85">CCTV-4</channel>
<channel site="dens.tv" lang="id" xmltv_id="CGTN.cn" site_id="16">CGTN Documentary</channel>
<channel site="dens.tv" lang="id" xmltv_id="ChannelJowo.id" site_id="137">Channel Jowo</channel>
<channel site="dens.tv" lang="id" xmltv_id="CNA.sg" site_id="61">CNA</channel>
<channel site="dens.tv" lang="id" xmltv_id="DAAITV.id" site_id="23">DAAI TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="DanceTelevision.nl" site_id="130">Dance TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensFoodChannel.id" site_id="117">DensFood Channel</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensLearningKnowledge.id" site_id="1">DensKnowledge</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensLifeStyle.id" site_id="42">DensLife&amp;Style</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensPlay.id" site_id="107">DensPlay</channel>
<channel site="dens.tv" lang="id" xmltv_id="DensShowBiz.id" site_id="102">DensShowBiz</channel>
<channel site="dens.tv" lang="id" xmltv_id="DIM.ua" site_id="132">DIM TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="DW.de@English" site_id="81">DW-TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="ElshintaTV.id" site_id="94">Elshinta TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="France24.fr@English" site_id="69">France 24</channel>
<channel site="dens.tv" lang="id" xmltv_id="FREEDOM.ua" site_id="104">FREEDOM</channel>
<channel site="dens.tv" lang="id" xmltv_id="IDTV.id" site_id="131">Berita Satu</channel>
<channel site="dens.tv" lang="id" xmltv_id="JakTV.id" site_id="112">Jak tv</channel>
<channel site="dens.tv" lang="id" xmltv_id="KBSKorea.kr" site_id="133">KBS Korea</channel>
<channel site="dens.tv" lang="id" xmltv_id="KBSWorld.kr" site_id="134">KBS World</channel>
<channel site="dens.tv" lang="id" xmltv_id="KPlus.sg" site_id="100">K-PLUS HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="MagnaChannel.id" site_id="122">Magna Channel</channel>
<channel site="dens.tv" lang="id" xmltv_id="MetroTV.id" site_id="6">Metro TV</channel>
<channel site="dens.tv" lang="id" xmltv_id="Motorvision.de" site_id="98">Motorvision+</channel>
<channel site="dens.tv" lang="id" xmltv_id="MyCinemaAsia.id" site_id="109">My Cinema Asia</channel>
<channel site="dens.tv" lang="id" xmltv_id="MyCinemaEurope.ch" site_id="92">My Cinema Europe HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="MyKidz.id" site_id="96">My Kidz HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="NET.id" site_id="13">MDTV</channel>
<channel site="dens.tv" lang="id" xmltv_id="NHKWorldJapan.jp" site_id="77">NHK WORLD-JAPAN</channel>
<channel site="dens.tv" lang="id" xmltv_id="NusantaraTV.id" site_id="138">Nusantara TV (NTV)</channel>
<channel site="dens.tv" lang="id" xmltv_id="RajawaliTV.id" site_id="22">RTV</channel>
<channel site="dens.tv" lang="id" xmltv_id="ROCKAction.sg" site_id="44">ROCK Action</channel>
<channel site="dens.tv" lang="id" xmltv_id="ROCKEntertainment.sg" site_id="39">ROCK Entertainment HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="RodjaTV.id" site_id="21">RodjaTV</channel>
<channel site="dens.tv" lang="id" xmltv_id="StingrayClassica.ca" site_id="128">Stingray Classica</channel>
<channel site="dens.tv" lang="id" xmltv_id="TBN.ru" site_id="78">TBN</channel>
<channel site="dens.tv" lang="id" xmltv_id="TRTWorld.tr" site_id="41">TRT World</channel>
<channel site="dens.tv" lang="id" xmltv_id="TV5MondeAsia.fr" site_id="90">TV5MONDE ASIE</channel>
<channel site="dens.tv" lang="id" xmltv_id="TV5MondeStyle.fr" site_id="37">TV5MONDE Style HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="tvNAsia.hk" site_id="59">tvN HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="tvNMoviesAsia.hk" site_id="58">tvN Movies HD</channel>
<channel site="dens.tv" lang="id" xmltv_id="TVRINasional.id" site_id="17">TVRI</channel>
<channel site="dens.tv" lang="id" xmltv_id="TVRISport.id" site_id="118">TVRI Sport</channel>
<channel site="dens.tv" lang="id" xmltv_id="WION.in" site_id="79">WION</channel>
</channels>

View File

@@ -1,73 +1,73 @@
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)
const tz = 'Asia/Jakarta'
module.exports = {
site: 'dens.tv',
days: 2,
url({ channel, date }) {
return `https://www.dens.tv/api/dens3/tv/TvChannels/listEpgByDate?date=${date.format(
'YYYY-MM-DD'
)}&id_channel=${channel.site_id}&app_type=10`
},
parser({ content }) {
// parsing
const response = JSON.parse(content)
const programs = []
if (Array.isArray(response?.data)) {
response.data.forEach(item => {
const title = item.title
const [, , , season, , , episode] = title.match(
/( (Season |Season|S)(\d+))?( (Episode|Ep) (\d+))/
) || [null, null, null, null, null, null, null]
programs.push({
title,
description: item.description,
season: season ? parseInt(season) : season,
episode: episode ? parseInt(episode) : episode,
start: dayjs.tz(item.start_time, 'YYYY-MM-DD HH:mm:ss', tz),
stop: dayjs.tz(item.end_time, 'YYYY-MM-DD HH:mm:ss', tz)
})
})
}
return programs
},
async channels() {
const axios = require('axios')
const categories = {
local: 1,
premium: 2,
international: 3
}
const channels = []
for (const id_category of Object.values(categories)) {
const data = await axios
.get('https://www.dens.tv/api/dens3/tv/TvChannels/listByCategory', {
params: { id_category }
})
.then(r => r.data)
.catch(console.error)
data.data.contents.forEach(item => {
channels.push({
lang: 'id',
site_id: item.meta.id,
name: item.meta.title
})
})
}
return channels
}
}
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)
const tz = 'Asia/Jakarta'
module.exports = {
site: 'dens.tv',
days: 2,
url({ channel, date }) {
return `https://www.dens.tv/api/dens3/tv/TvChannels/listEpgByDate?date=${date.format(
'YYYY-MM-DD'
)}&id_channel=${channel.site_id}&app_type=10`
},
parser({ content }) {
// parsing
const response = JSON.parse(content)
const programs = []
if (Array.isArray(response?.data)) {
response.data.forEach(item => {
const title = item.title
const [, , , season, , , episode] = title.match(
/( (Season |Season|S)(\d+))?( (Episode|Ep) (\d+))/
) || [null, null, null, null, null, null, null]
programs.push({
title,
description: item.description,
season: season ? parseInt(season) : season,
episode: episode ? parseInt(episode) : episode,
start: dayjs.tz(item.start_time, 'YYYY-MM-DD HH:mm:ss', tz),
stop: dayjs.tz(item.end_time, 'YYYY-MM-DD HH:mm:ss', tz)
})
})
}
return programs
},
async channels() {
const axios = require('axios')
const categories = {
local: 1,
premium: 2,
international: 3
}
const channels = []
for (const id_category of Object.values(categories)) {
const data = await axios
.get('https://www.dens.tv/api/dens3/tv/TvChannels/listByCategory', {
params: { id_category }
})
.then(r => r.data)
.catch(console.error)
data.data.contents.forEach(item => {
channels.push({
lang: 'id',
site_id: item.meta.id,
name: item.meta.title
})
})
}
return channels
}
}

View File

@@ -1,50 +1,50 @@
const { url, parser } = require('./dens.tv.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
const date = dayjs.utc('2024-11-24').startOf('d')
const channel = { site_id: '38', xmltv_id: 'AniplusAsia.sg', lang: 'id' }
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'https://www.dens.tv/api/dens3/tv/TvChannels/listEpgByDate?date=2024-11-24&id_channel=38&app_type=10'
)
})
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(2)
expect(results[0]).toMatchObject({
start: '2024-11-23T17:00:00.000Z',
stop: '2024-11-23T17:30:00.000Z',
title: 'Migi & Dali Episode 2',
episode: 2
})
expect(results[1]).toMatchObject({
start: '2024-11-23T19:30:00.000Z',
stop: '2024-11-23T20:00:00.000Z',
title: 'Attack on Titan Season 3 Episode 7',
season: 3,
episode: 7
})
})
it('can handle empty guide', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
const results = parser({ content })
expect(results).toMatchObject([])
})
const { url, parser } = require('./dens.tv.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
const date = dayjs.utc('2024-11-24').startOf('d')
const channel = { site_id: '38', xmltv_id: 'AniplusAsia.sg', lang: 'id' }
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'https://www.dens.tv/api/dens3/tv/TvChannels/listEpgByDate?date=2024-11-24&id_channel=38&app_type=10'
)
})
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(2)
expect(results[0]).toMatchObject({
start: '2024-11-23T17:00:00.000Z',
stop: '2024-11-23T17:30:00.000Z',
title: 'Migi & Dali Episode 2',
episode: 2
})
expect(results[1]).toMatchObject({
start: '2024-11-23T19:30:00.000Z',
stop: '2024-11-23T20:00:00.000Z',
title: 'Attack on Titan Season 3 Episode 7',
season: 3,
episode: 7
})
})
it('can handle empty guide', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
const results = parser({ content })
expect(results).toMatchObject([])
})

View File

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