diff --git a/sites/programetv.ro/programetv.ro.config.js b/sites/programetv.ro/programetv.ro.config.js index 247f7d03..49d10c67 100644 --- a/sites/programetv.ro/programetv.ro.config.js +++ b/sites/programetv.ro/programetv.ro.config.js @@ -1,9 +1,4 @@ const dayjs = require('dayjs') -const jsdom = require('jsdom') -const { JSDOM } = jsdom - -require('dayjs/locale/ro') -dayjs.locale('ro') module.exports = { request: { @@ -11,15 +6,18 @@ module.exports = { }, site: 'programetv.ro', url: function ({ date, channel }) { - const diff = dayjs().diff(date, 'd') - let day - if (diff === 0) { - day = 'azi' - } else { - day = date.format('ddd').toLowerCase() + const daysOfWeek = { + 0: 'duminica', + 1: 'luni', + 2: 'marti', + 3: 'ieri', + 4: 'azi', + 5: 'vineri', + 6: 'sambata' } + const day = date.day() - return `https://www.programetv.ro/post/${channel.site_id}/${day}/` + return `https://www.programetv.ro/post/${channel.site_id}/${daysOfWeek[day]}/` }, logo({ content }) { const data = parseContent(content) @@ -29,30 +27,36 @@ module.exports = { parser: function ({ content }) { let programs = [] const data = parseContent(content) - if (!data) return programs - if (data) { - programs = data.shows.map(i => { - let title = i.title - if (i.season) title += ` Sez.${i.season}` - if (i.episode) title += ` Ep.${i.episode}` - return { - title, - description: i.desc, - category: i.categories[0], - start: i.start, - stop: i.stop, - icon: i.icon - } + if (!data || !data.shows) return programs + const items = data.shows + items.forEach(item => { + let title = item.title + if (item.season) title += ` Sez.${item.season}` + if (item.episode) title += ` Ep.${item.episode}` + programs.push({ + title, + description: item.desc, + category: item.categories, + start: parseStart(item).toString(), + stop: parseStop(item).toString(), + icon: item.icon }) - } + }) return programs } } -function parseContent(content) { - const pageData = content.match(/var pageData = (.*);/i) - if (!pageData && !pageData[1]) return null - - return JSON.parse(pageData[1], null, 2) +function parseStart(item) { + return dayjs(item.start).utc() +} + +function parseStop(item) { + return dayjs(item.stop).utc() +} + +function parseContent(content) { + const [_, data] = content.match(/var pageData = ((.|[\r\n])+);\n/) || [null, null] + + return data ? JSON.parse(data) : {} } diff --git a/sites/programetv.ro/programetv.ro.test.js b/sites/programetv.ro/programetv.ro.test.js new file mode 100644 index 00000000..1a1cd16a --- /dev/null +++ b/sites/programetv.ro/programetv.ro.test.js @@ -0,0 +1,74 @@ +// npx epg-grabber --config=sites/programetv.ro/programetv.ro.config.js --channels=sites/programetv.ro/programetv.ro_ro.channels.xml --output=.gh-pages/guides/ro/programetv.ro.epg.xml --days=2 + +const { parser, url, logo } = require('./programetv.ro.config.js') +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-10-24', 'YYYY-MM-DD').startOf('d') +const channel = { site_id: 'pro-tv', xmltv_id: 'ProTV.ro' } +const content = ` + + + + + +` + +it('can generate valid url', () => { + const result = url({ date, channel }) + expect(result).toBe('https://www.programetv.ro/post/pro-tv/duminica/') +}) + +it('can get logo url', () => { + const result = logo({ content }) + expect(result).toBe('https://static.cinemagia.ro/img/tv_station/pro-tv.jpg') +}) + +it('can parse response', () => { + const result = parser({ date, channel, content }) + expect(result).toMatchObject([ + { + start: 'Sun, 07 Nov 2021 05:00:00 GMT', + stop: 'Sun, 07 Nov 2021 07:59:59 GMT', + title: 'Ştirile Pro Tv', + description: `În fiecare zi, cele mai importante evenimente, transmisiuni LIVE, analize, anchete şi reportaje sunt la Ştirile ProTV.`, + category: ['Ştiri'], + icon: 'https://www.programetv.ro/img/shows/84/54/stirile-pro-tv.png?key=Z2lfZnVial90cmFyZXZwLzAwLzAwLzA1LzE4MzgxMnktMTIwazE3MC1hLW40NTk4MW9zLmNhdA==' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: ` + + + + + + +` + }) + expect(result).toMatchObject([]) +})