diff --git a/sites/ontvtonight.com.config.js b/sites/ontvtonight.com.config.js index 544f0953..07f10f08 100644 --- a/sites/ontvtonight.com.config.js +++ b/sites/ontvtonight.com.config.js @@ -2,9 +2,11 @@ const jsdom = require('jsdom') const { JSDOM } = jsdom const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -var customParseFormat = require('dayjs/plugin/customParseFormat') +const timezone = require('dayjs/plugin/timezone') +const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(utc) +dayjs.extend(timezone) dayjs.extend(customParseFormat) module.exports = { @@ -32,36 +34,21 @@ module.exports = { }, parser: function ({ content, date }) { const programs = [] - const dom = new JSDOM(content) - const items = dom.window.document.querySelectorAll( - '#content > div > div > div.span6 > table > tbody > tr' - ) - + const items = parseItems(content) items.forEach(item => { - const time = (item.querySelector('td:nth-child(1) > h5') || { textContent: '' }).textContent - .toString() - .trim() - const title = ( - item.querySelector('td:nth-child(2) > h5 > a') || { textContent: '' } - ).textContent - .toString() - .trim() + const title = parseTitle(item) + const start = parseStart(item, date) + const stop = parseStop(item, date) - if (time && title) { - const start = dayjs - .utc(time, 'h:mma') - .set('D', date.get('D')) - .set('M', date.get('M')) - .set('y', date.get('y')) - .toString() - - if (programs.length && !programs[programs.length - 1].stop) { + if (title && start) { + if (programs.length) { programs[programs.length - 1].stop = start } programs.push({ title, - start + start, + stop }) } }) @@ -69,3 +56,28 @@ module.exports = { return programs } } + +function parseStop(item, date) { + return date.tz('Europe/London').endOf('d') +} + +function parseStart(item, date) { + let time = (item.querySelector('td:nth-child(1) > h5') || { textContent: '' }).textContent.trim() + time = `${date.format('DD/MM/YYYY')} ${time.toUpperCase()}` + + return dayjs.tz(time, 'DD/MM/YYYY H:mm A', 'Europe/London') +} + +function parseTitle(item) { + return (item.querySelector('td:nth-child(2) > h5 > a') || { textContent: '' }).textContent + .toString() + .trim() +} + +function parseItems(content) { + const dom = new JSDOM(content) + + return dom.window.document.querySelectorAll( + '#content > div > div > div.span6 > table > tbody > tr' + ) +}