mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 00:50:09 -04:00
commit
904f72254e
4 changed files with 187 additions and 0 deletions
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