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 | Andorra Difusió. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+
+

ATV En Directe

+
+
+
+ + + + + + + + + + +
+
+ +
+
+ + + + + Obrir en una altra finestra +
+
+ +
+
+

CANAL WEB

+ + + + +
+
+
+ + + + + +
+
+
+
+ Obrir en una altra finestra +
+
+ + + + + +
+
+
+ + + + + +
+
+
+
+ + + + +
+
+ +

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([])