mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-09 08:30:06 -04:00
Merge branch 'master' into freearhey-patch-5
This commit is contained in:
commit
8b0952b915
9 changed files with 5929 additions and 0 deletions
5489
sites/cyta.com.cy/_data_/content.json
Normal file
5489
sites/cyta.com.cy/_data_/content.json
Normal file
File diff suppressed because it is too large
Load diff
119
sites/cyta.com.cy/cyta.com.cy.channels.xml
Normal file
119
sites/cyta.com.cy/cyta.com.cy.channels.xml
Normal file
|
@ -0,0 +1,119 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="1945">CNN</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2001">Sky News</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2221">Vergina TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2266">Cartoonito</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2374">Cartoon Network</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2394">Disney Channel</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2491">Motorvision</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2498">Nickelodeon</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2743">Baby TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2755">FOX HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2767">History HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2831">National Geographic Wild HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="2926">Disney Junior</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="206750">4E</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="211368">Al Jazeera</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="213706">BBC News</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="213719">Bloomberg</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="213775">Deutsche Welle</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="213814">E! Entertainment</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="213835">NBA TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="213889">France 24 (French)</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="213936">TV 5 Monde</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="216382">Fashion TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="216389">MTV 80s</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="216415">Novasports PrimeHD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="216459">National Geographic HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="216501">Novacinema 2 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="216582">Novacinema 1 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="216595">FOX life HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="216630">Βουλή Ελλήνων</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="218874">TLC</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="218883">Novasports 2HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="289530">SIGMA TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="289542">ANT1 TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="289555">OMEGA</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="289568">PLUS TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="289607">Alpha Cyprus</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="349455">Euronews ENG</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="561066">RIK 1</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="561078">RIK 2</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="561166">Capital TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="561178">One Channel</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="561210">Smile TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="573851">Greek Cınema</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="573950">MAD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="573974">Euronews Ελληνικό</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="574035">MAD Viral</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="574094">Euronews (Russıan)</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="574124">MAD Greekζ</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="574264">ERT World</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="604956">Cytavision Sports1 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="607141">Movies Best HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="608096">RIK HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="4185119">Eurosport 1 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="5183085">Eurosport 2 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="6260715">Nova Christmas</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="8242808">Cytavision Sports3 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="8242848">Cytavision Sports2 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="8242862">Cytavision Sports4 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="8242886">Cytavision Sports5 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="8243873">Cytavision Sports6 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="9744271">Novacinema 4 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="9745267">Novacinema 3 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="9821917">BBC Earth HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="9821930">TCM HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="10963625">Novalife HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="10965536">Novasports 3 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="10965554">Novasports 4 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="10973069">Novasports 5 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="11762362">Mezzo Live HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="12253994">MTV Live SD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="13132700">Food Network HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="24654412">Cytavision Sports7 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="24745114">Cablenet Sports 1 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="24746908">Cablenet Sports 2 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="35973256">HGTV HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="38335692">Discovery Channel HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="38335714">Animal Planet HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="38335725">Investigation Discovery HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="39337317">Alpha Cyprus HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="46137467">Novasports 6 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="46137848">Novasports Start HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52027167">Novasportsextra1HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52027180">Novasportsextra4HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52027399">Novasportsextra2HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52027412">Novasportsextra3HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52098866">Cytavision Sports2 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52101919">Cytavision Sports1 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52101930">Cytavision Sports3 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52103938">Cytavision Sports4 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52103947">Cytavision Sports6 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52105043">Cytavision Sports5 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52105052">Cytavision Sports7 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52187736">Cablenet Sports 1 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52187749">Cablenet Sports 2 HD CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52196563">PPV1 CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52196572">PPV3 CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52196581">PPV5 CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52196745">PPV2 CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52196754">PPV4 CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="52196763">PPV6 CMAF</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="53005467">Cablenet Sports 3 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="54111184">OMEGA HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="54111209">CVSPORTS UHD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="54111722">Premier League</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="54184415">ANT1 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="55844755">Current Time HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="56063885">CCTV 4E</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="56064497">CGTN</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="57944046">CGTN Documentary</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="66620028">CVSPORTS Multiview</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="71037984">Bloomberg TV+</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="71037999">Bloomberg Original</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="74516237">Cytavision Sports8 HD</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="75835625">OMONOIA TV</channel>
|
||||
<channel site="cyta.com.cy" lang="el" xmltv_id="" site_id="77956035">Cytavision Sports8 HD CMAF</channel>
|
||||
</channels>
|
60
sites/cyta.com.cy/cyta.com.cy.config.js
Normal file
60
sites/cyta.com.cy/cyta.com.cy.config.js
Normal file
|
@ -0,0 +1,60 @@
|
|||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
const cheerio = require('cheerio')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
module.exports = {
|
||||
site: 'cyta.com.cy',
|
||||
days: 7,
|
||||
request: {
|
||||
cache: {
|
||||
ttl: 60 * 60 * 1000 // 1 hour
|
||||
}
|
||||
},
|
||||
url: function ({date, channel}) {
|
||||
// Get the epoch timestamp
|
||||
const todayEpoch = date.startOf('day').utc().valueOf()
|
||||
// Get the epoch timestamp for the next day
|
||||
const nextDayEpoch = date.add(1, 'day').startOf('day').utc().valueOf()
|
||||
return `https://epg.cyta.com.cy/api/mediacatalog/fetchEpg?startTimeEpoch=${todayEpoch}&endTimeEpoch=${nextDayEpoch}&language=1&channelIds=${channel.site_id}`
|
||||
},
|
||||
parser: function ({content}) {
|
||||
const data = JSON.parse(content)
|
||||
const programs = []
|
||||
|
||||
data.channelEpgs.forEach(channel => {
|
||||
channel.epgPlayables.forEach(epg => {
|
||||
const start = new Date(epg.startTime).toISOString();
|
||||
const stop = new Date(epg.endTime).toISOString();
|
||||
|
||||
programs.push({
|
||||
title: epg.name,
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
const axios = require('axios')
|
||||
const data = await axios
|
||||
.get(`https://epg.cyta.com.cy/api/mediacatalog/fetchChannels?language=1`)
|
||||
.then(r => r.data)
|
||||
.catch(console.log)
|
||||
|
||||
return data.channels.map(item => {
|
||||
return {
|
||||
lang: 'el',
|
||||
site_id: item.id,
|
||||
name: item.name
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
53
sites/cyta.com.cy/cyta.com.cy.test.js
Normal file
53
sites/cyta.com.cy/cyta.com.cy.test.js
Normal file
|
@ -0,0 +1,53 @@
|
|||
const { url, parser } = require('./cyta.com.cy.config.js')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
const date = dayjs.utc('2025-01-03', 'YYYY-MM-DD').startOf('day')
|
||||
const channel = {
|
||||
site_id: '561066',
|
||||
xmltv_id: 'RIK1.cy'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
const generatedUrl = url({ date, channel })
|
||||
expect(generatedUrl).toBe(
|
||||
'https://epg.cyta.com.cy/api/mediacatalog/fetchEpg?startTimeEpoch=1735862400000&endTimeEpoch=1735948800000&language=1&channelIds=561066'
|
||||
)
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = `
|
||||
{
|
||||
"channelEpgs": [
|
||||
{
|
||||
"epgPlayables": [
|
||||
{ "name": "Πρώτη Ενημέρωση", "startTime": 1735879500000, "endTime": 1735889400000 }
|
||||
]
|
||||
}
|
||||
]
|
||||
}`
|
||||
|
||||
const result = parser({ content }).map(p => {
|
||||
p.start = p.start
|
||||
p.stop = p.stop
|
||||
return p
|
||||
})
|
||||
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
title: 'Πρώτη Ενημέρωση',
|
||||
start: '2025-01-03T04:45:00.000Z',
|
||||
stop: '2025-01-03T07:30:00.000Z'
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({
|
||||
content: '{"channelEpgs":[]}'
|
||||
})
|
||||
expect(result).toMatchObject([])
|
||||
})
|
21
sites/cyta.com.cy/readme.md
Normal file
21
sites/cyta.com.cy/readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# cyta.com.cy
|
||||
|
||||
https://epg.cyta.com.cy/tv-guide/el
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=cyta.com.cy
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/cyta.com.cy/cyta.com.cy.config.js --output=./sites/cyta.com.cy/cyta.com.cy.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- cyta.com.cy
|
||||
```
|
21
sites/stod2.is/readme.md
Normal file
21
sites/stod2.is/readme.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# stod2.is
|
||||
|
||||
https://stod2.is/dagskra/
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --site=stod2.is
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/stod2.is/stod2.is.config.js --output=./sites/stod2.is/stod2.is.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- stod2.is
|
||||
```
|
15
sites/stod2.is/stod2.is.channels.xml
Normal file
15
sites/stod2.is/stod2.is.channels.xml
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="Stod2.is" site_id="stod2">Stöð 2</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="Stod2Fjolskylda.is" site_id="stod3">Stöð 2 Fjölskylda</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="Stod2Sport.is" site_id="sport">Stöð 2 Sport</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="Stod2Sport2.is" site_id="sport2">Stöð 2 Sport 2</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="Stod2Sport3.is" site_id="sport3">Stöð 2 Sport 3</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="Stod2Sport4.is" site_id="sport4">Stöð 2 Sport 4</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="Stod2Sport5.is" site_id="golfstodin">Stöð 2 Sport 5</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="Stod2Sport6.is" site_id="sport6">Stöð 2 Sport 6</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="" site_id="besta01">Besta01</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="" site_id="besta02">Besta02</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="" site_id="besta03">Besta03</channel>
|
||||
<channel site="stod2.is" lang="is" xmltv_id="VodafoneSport.is" site_id="vodasport">Vodafone Sport</channel>
|
||||
</channels>
|
68
sites/stod2.is/stod2.is.config.js
Normal file
68
sites/stod2.is/stod2.is.config.js
Normal file
|
@ -0,0 +1,68 @@
|
|||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const axios = require('axios')
|
||||
|
||||
dayjs.extend(utc)
|
||||
|
||||
module.exports = {
|
||||
site: 'stod2.is',
|
||||
channels: 'stod2.is.channels.xml',
|
||||
days: 7,
|
||||
request: {
|
||||
cache: {
|
||||
ttl: 60 * 60 * 1000 // 1 hour
|
||||
}
|
||||
},
|
||||
url({ channel, date }) {
|
||||
return `https://api.stod2.is/dagskra/api/${channel.site_id}/${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser: function ({ content }) {
|
||||
let data
|
||||
try {
|
||||
data = JSON.parse(content)
|
||||
} catch (error) {
|
||||
console.error('Error parsing JSON:', error)
|
||||
return []
|
||||
}
|
||||
|
||||
const programs = []
|
||||
|
||||
if (data && Array.isArray(data)) {
|
||||
data.forEach(item => {
|
||||
if (!item) return
|
||||
const start = dayjs.utc(item.upphaf)
|
||||
const stop = start.add(item.slott, 'm')
|
||||
|
||||
programs.push({
|
||||
title: item.isltitill,
|
||||
sub_title: item.undirtitill,
|
||||
description: item.lysing,
|
||||
actors: item.adalhlutverk,
|
||||
directors: item.leikstjori,
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
return programs
|
||||
},
|
||||
async channels() {
|
||||
try {
|
||||
const response = await axios.get('https://api.stod2.is/dagskra/api')
|
||||
if (!response.data || !Array.isArray(response.data)) {
|
||||
console.error('Error: No channels data found')
|
||||
return []
|
||||
}
|
||||
return response.data.map(item => {
|
||||
return {
|
||||
lang: 'is',
|
||||
site_id: item
|
||||
}
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('Error fetching channels:', error)
|
||||
return []
|
||||
}
|
||||
}
|
||||
}
|
83
sites/stod2.is/stod2.is.test.js
Normal file
83
sites/stod2.is/stod2.is.test.js
Normal file
|
@ -0,0 +1,83 @@
|
|||
const { parser, url } = require('./stod2.is.config.js')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
const timezone = require('dayjs/plugin/timezone')
|
||||
const axios = require('axios')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.extend(timezone)
|
||||
|
||||
jest.mock('axios')
|
||||
|
||||
const date = dayjs.utc('2025-01-03', 'YYYY-MM-DD').startOf('day')
|
||||
const channel = { site_id: 'stod2', xmltv_id: 'Stod2.is' }
|
||||
|
||||
const mockEpgData = JSON.stringify([
|
||||
{
|
||||
midill: 'STOD2',
|
||||
midill_heiti: 'Stöð 2',
|
||||
dagsetning: '2025-01-03T00:00:00Z',
|
||||
upphaf: '2025-01-03T08:00:00Z',
|
||||
titill: 'Telma Borgþórsdóttir',
|
||||
isltitill: 'Heimsókn',
|
||||
undirtitill: 'Telma Borgþórsdóttir',
|
||||
seria: 8,
|
||||
thattur: 5,
|
||||
thattafjoldi: 10,
|
||||
birta_thatt: 1,
|
||||
opin: 0,
|
||||
beint: 0,
|
||||
frumsyning: 0,
|
||||
framundan_i_beinni: 0,
|
||||
tegund: 'SER',
|
||||
flokkur: 'Icelandic',
|
||||
adalhlutverk: '',
|
||||
leikstjori: '',
|
||||
ar: '2019',
|
||||
bannad: 'Green',
|
||||
recidefni: 592645105,
|
||||
recidlidur: 592645184,
|
||||
recidsyning: null,
|
||||
refno: null,
|
||||
frelsi: 0,
|
||||
netdagar: 0,
|
||||
lysing:
|
||||
'Frábærir þættir með Sindra Sindrasyni sem lítur inn hjá íslenskum fagurkerum. Heimilin eru jafn ólík og þau eru mörg en eiga það þó eitt sameiginlegt að vera sett saman af alúð og smekklegheitum. Sindri hefur líka einstakt lag á að ná fram því besta í viðmælendum sínum.',
|
||||
slott: 15,
|
||||
slotlengd: '00:15'
|
||||
}
|
||||
])
|
||||
|
||||
it('can generate valid url', () => {
|
||||
const generatedUrl = url({ date, channel })
|
||||
expect(generatedUrl).toBe('https://api.stod2.is/dagskra/api/stod2/2025-01-03')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = mockEpgData
|
||||
const result = parser({ content }).map(p => {
|
||||
p.start = p.start.toISOString()
|
||||
p.stop = p.stop.toISOString()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(result).toMatchObject([
|
||||
{
|
||||
title: 'Heimsókn',
|
||||
sub_title: 'Telma Borgþórsdóttir',
|
||||
description:
|
||||
'Frábærir þættir með Sindra Sindrasyni sem lítur inn hjá íslenskum fagurkerum. Heimilin eru jafn ólík og þau eru mörg en eiga það þó eitt sameiginlegt að vera sett saman af alúð og smekklegheitum. Sindri hefur líka einstakt lag á að ná fram því besta í viðmælendum sínum.',
|
||||
actors: '',
|
||||
directors: '',
|
||||
start: '2025-01-03T08:00:00.000Z',
|
||||
stop: '2025-01-03T08:15:00.000Z'
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const result = parser({ content: '[]' })
|
||||
expect(result).toMatchObject([])
|
||||
})
|
Loading…
Add table
Add a link
Reference in a new issue