diff --git a/sites/andorradifusio.ad/__data__/content.html b/sites/andorradifusio.ad/__data__/content.html
new file mode 100644
index 00000000..245fb890
--- /dev/null
+++ b/sites/andorradifusio.ad/__data__/content.html
@@ -0,0 +1,4334 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
Programació ATV
+
+
+
+
+
+
+
dilluns 05 jun.
07:00
+
Club Piolet
+
08:00
+
Els Matins de la Nacional
+
13:00
+
Andorra Actualitat (RNA)
+
13:40
+
El Trànsit
+
13:45
+
Informatiu migdia
+
14:15
+
Dia E
+
15:00
+
Informatiu migdia
+
15:30
+
Recull setmanal
+
16:05
+
Becaris
+
18:00
+
Informatiu Tarda
+
18:30
+
Informatiu France 24
+
19:00
+
El Trànsit
+
19:10
+
Club Piolet
+
20:10
+
El cafè dels matins
+
20:40
+
El Trànsit
+
20:45
+
Informatiu vespre
+
21:15
+
Dia E
+
22:00
+
El cafè dels matins
+
22:25
+
Informatiu vespre
+
01:00
+
Àrea Andorra Difusió
+
dimarts 06 jun.
07:00
+
Club Piolet
+
08:00
+
Els Matins de la Nacional
+
13:00
+
Andorra Actualitat (RNA)
+
13:40
+
El Trànsit
+
13:45
+
Informatiu migdia
+
14:15
+
El Trànsit
+
15:00
+
Informatiu migdia
+
15:30
+
Dia E
+
16:15
+
Becaris
+
18:00
+
Informatiu Tarda
+
18:30
+
Informatiu France 24
+
19:00
+
El Trànsit
+
19:10
+
Club Piolet
+
20:10
+
El cafè dels matins
+
20:40
+
El Trànsit
+
20:45
+
Informatiu vespre
+
21:15
+
La Màquina del Temps: Roc del Quer
+
23:15
+
El cafè dels matins
+
23:40
+
Informatiu vespre
+
01:00
+
Àrea Andorra Difusió
+
dimecres 07 jun.
07:00
+
Club Piolet
+
08:00
+
Els Matins de la Nacional
+
13:00
+
Andorra Actualitat (RNA)
+
13:40
+
El Trànsit
+
13:45
+
Informatiu migdia
+
14:15
+
El Trànsit
+
15:00
+
Informatiu migdia
+
15:30
+
Becaris
+
17:00
+
Roda de premsa posterior al consell de ministres
+
18:00
+
Informatiu Tarda
+
18:30
+
Informatiu France 24
+
19:00
+
El Trànsit
+
19:10
+
Club Piolet
+
20:10
+
El cafè dels matins
+
20:40
+
El Trànsit
+
20:45
+
Informatiu vespre
+
21:15
+
Memòries d'arxiu: Cròniques: Making off "12 Punts"
+
21:50
+
Roda de premsa posterior al consell de ministres
+
22:50
+
El cafè dels matins
+
23:15
+
Informatiu vespre
+
01:00
+
Àrea Andorra Difusió
+
dijous 08 jun.
07:00
+
Club Piolet
+
08:00
+
Els Matins de la Nacional
+
13:00
+
Andorra Actualitat (RNA)
+
13:40
+
El Trànsit
+
13:45
+
Informatiu migdia
+
14:15
+
La Rèplica
+
15:00
+
Informatiu migdia
+
15:30
+
Memòries d'arxiu: Cròniques: Making off "12 Punts"
+
16:05
+
Becaris
+
18:00
+
Informatiu Tarda
+
18:30
+
Informatiu France 24
+
19:00
+
El Trànsit
+
19:10
+
Club Piolet
+
20:10
+
El cafè dels matins
+
20:40
+
El Trànsit
+
20:45
+
Informatiu vespre
+
21:15
+
La Rèplica
+
22:00
+
El cafè dels matins
+
22:25
+
Informatiu vespre
+
01:00
+
Àrea Andorra Difusió
+
divendres 09 jun.
07:00
+
Club Piolet
+
08:00
+
Els Matins de la Nacional
+
13:00
+
Andorra Actualitat (RNA)
+
13:40
+
El Trànsit
+
13:45
+
Informatiu migdia
+
14:15
+
La rotonda
+
15:00
+
Informatiu migdia
+
15:30
+
La Rèplica
+
16:15
+
Becaris
+
18:00
+
Informatiu Tarda
+
18:30
+
Informatiu France 24
+
19:00
+
El Trànsit
+
19:10
+
Club Piolet
+
20:10
+
El cafè dels matins
+
20:40
+
El Trànsit
+
20:45
+
Informatiu vespre
+
21:15
+
Tirites
+
21:35
+
La rotonda
+
22:20
+
La Màquina del Temps: Roc del Quer
+
01:00
+
Àrea Andorra Difusió
+
dissabte 10 jun.
08:00
+
El Trànsit
+
09:00
+
Club Piolet
+
10:00
+
El Trànsit
+
12:55
+
La rotonda
+
13:40
+
El Trànsit
+
13:45
+
Informatiu migdia
+
14:10
+
El Trànsit
+
15:00
+
Informatiu migdia
+
15:25
+
Club Piolet
+
16:25
+
Informatiu migdia
+
16:50
+
El Trànsit
+
17:40
+
La Màquina del Temps: Roc del Quer
+
19:40
+
Club Piolet
+
20:40
+
El Trànsit
+
20:45
+
Informatiu vespre
+
21:10
+
La Rèplica
+
21:55
+
Tirites
+
22:15
+
El cafè dels matins
+
01:00
+
Àrea Andorra Difusió
+
diumenge 11 jun.
08:00
+
El Trànsit
+
09:00
+
Club Piolet
+
10:00
+
El Trànsit
+
13:00
+
Andorra Actualitat (RNA)
+
13:30
+
El Trànsit
+
13:40
+
El Trànsit
+
13:45
+
Informatiu migdia
+
14:10
+
El Trànsit
+
15:00
+
Informatiu migdia
+
15:25
+
Club Piolet
+
16:25
+
Informatiu migdia
+
16:50
+
El Trànsit
+
18:35
+
Tirites
+
18:55
+
La rotonda
+
19:40
+
Club Piolet
+
20:40
+
El Trànsit
+
20:45
+
Informatiu vespre
+
21:10
+
Recull setmanal
+
21:45
+
La Màquina del Temps: Roc del Quer
+
23:45
+
Memòries d'arxiu: Cròniques: Making off "12 Punts"
+
01:00
+
Àrea Andorra Difusió
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sites/andorradifusio.ad/andorradifusio.ad.config.js b/sites/andorradifusio.ad/andorradifusio.ad.config.js
index 7ab7664f..b0f7a33d 100644
--- a/sites/andorradifusio.ad/andorradifusio.ad.config.js
+++ b/sites/andorradifusio.ad/andorradifusio.ad.config.js
@@ -1,13 +1,5 @@
const cheerio = require('cheerio')
-const dayjs = require('dayjs')
-const utc = require('dayjs/plugin/utc')
-const timezone = require('dayjs/plugin/timezone')
-const customParseFormat = require('dayjs/plugin/customParseFormat')
-require('dayjs/locale/ca')
-
-dayjs.extend(utc)
-dayjs.extend(timezone)
-dayjs.extend(customParseFormat)
+const { DateTime } = require('luxon')
module.exports = {
site: 'andorradifusio.ad',
@@ -22,13 +14,13 @@ module.exports = {
const prev = programs[programs.length - 1]
let start = parseStart(item, date)
if (prev) {
- if (start.isBefore(prev.start)) {
- start = start.add(1, 'd')
+ if (start < prev.start) {
+ start = start.plus({ days: 1 })
date = date.add(1, 'd')
}
prev.stop = start
}
- const stop = start.add(1, 'h')
+ const stop = start.plus({ hours: 1 })
programs.push({
title: item.title,
start,
@@ -43,16 +35,17 @@ module.exports = {
function parseStart(item, date) {
const dateString = `${date.format('MM/DD/YYYY')} ${item.time}`
- return dayjs.tz(dateString, 'MM/DD/YYYY HH:mm', 'Europe/Madrid')
+ return DateTime.fromFormat(dateString, 'MM/dd/yyyy HH:mm', { zone: 'Europe/Madrid' }).toUTC()
}
function parseItems(content, date) {
const $ = cheerio.load(content)
- const dayOfWeek = dayjs(date).locale('ca').format('dddd').toLowerCase()
- const column = $('.programacio-dia > h3')
- .filter((i, el) => $(el).text().startsWith(dayOfWeek))
+ const day = DateTime.fromMillis(date.valueOf()).setLocale('ca').toFormat('dd LLLL').toLowerCase()
+ const column = $('.programacio-dia > h3 > .dia')
+ .filter((i, el) => $(el).text() === day.slice(0, 6) + '.')
.first()
.parent()
+ .parent()
const items = []
const titles = column.find(`p`).toArray()
column.find(`h4`).each((i, time) => {
diff --git a/sites/andorradifusio.ad/andorradifusio.ad.test.js b/sites/andorradifusio.ad/andorradifusio.ad.test.js
index 85e04b3b..4abbf7a7 100644
--- a/sites/andorradifusio.ad/andorradifusio.ad.test.js
+++ b/sites/andorradifusio.ad/andorradifusio.ad.test.js
@@ -1,13 +1,15 @@
-// npx epg-grabber --config=sites/andorradifusio.ad/andorradifusio.ad.config.js --channels=sites/andorradifusio.ad/andorradifusio.ad.channels.xml --output=guide.xml --days=2
+// npx epg-grabber --config=sites/andorradifusio.ad/andorradifusio.ad.config.js --channels=sites/andorradifusio.ad/andorradifusio.ad.channels.xml --output=guide.xml
const { parser, url } = require('./andorradifusio.ad.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('2021-11-24', 'YYYY-MM-DD').startOf('d')
+const date = dayjs.utc('2023-06-07', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'atv',
xmltv_id: 'AndorraTV.ad'
@@ -18,36 +20,29 @@ it('can generate valid url', () => {
})
it('can parse response', () => {
- const content = `
dimecres 24 nov.
07:00
Club Piolet
23:30
Informatiu vespre
01:00
Àrea Andorra Difusió
dijous 25 nov.
07:00
Club Piolet
`
- const result = parser({ content, date }).map(p => {
+ 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(result).toMatchObject([
- {
- start: '2021-11-24T06:00:00.000Z',
- stop: '2021-11-24T22:30:00.000Z',
- title: `Club Piolet`
- },
- {
- start: '2021-11-24T22:30:00.000Z',
- stop: '2021-11-25T00:00:00.000Z',
- title: `Informatiu vespre`
- },
- {
- start: '2021-11-25T00:00:00.000Z',
- stop: '2021-11-25T01:00:00.000Z',
- title: `Àrea Andorra Difusió`
- }
- ])
+ expect(results[0]).toMatchObject({
+ start: '2023-06-07T05:00:00.000Z',
+ stop: '2023-06-07T06:00:00.000Z',
+ title: `Club Piolet`
+ })
+
+ expect(results[20]).toMatchObject({
+ start: '2023-06-07T23:00:00.000Z',
+ stop: '2023-06-08T00:00:00.000Z',
+ title: `Àrea Andorra Difusió`
+ })
})
it('can handle empty guide', () => {
const result = parser({
date,
- channel,
content: ``
})
expect(result).toMatchObject([])