From 8a963da78c1b35d86b937da6ffaa8c494d5732b0 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 27 Aug 2021 21:00:48 +0300 Subject: [PATCH] Update andorradifusio.ad.config.js --- sites/andorradifusio.ad.config.js | 68 +++++++++++++++++++++---------- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/sites/andorradifusio.ad.config.js b/sites/andorradifusio.ad.config.js index 476da9f6..175f4324 100644 --- a/sites/andorradifusio.ad.config.js +++ b/sites/andorradifusio.ad.config.js @@ -2,11 +2,14 @@ const jsdom = require('jsdom') const { JSDOM } = jsdom const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(utc) +dayjs.extend(timezone) dayjs.extend(customParseFormat) +let PM = false module.exports = { lang: 'ca', site: 'andorradifusio.ad', @@ -16,36 +19,59 @@ module.exports = { return `https://www.andorradifusio.ad/programacio/${channel.site_id}` }, parser({ content, date }) { - const day = date.day() - 1 const programs = [] - const dom = new JSDOM(content) - const cols = dom.window.document.querySelectorAll('.programacio-dia') - const colNum = day < 0 ? 6 : day - const times = cols[colNum].querySelectorAll(`h4`) - const titles = cols[colNum].querySelectorAll(`p`) - - times.forEach((time, i) => { - const title = titles[i] ? titles[i].textContent : null - if (!time || !title) return false - - const start = dayjs - .utc(time.textContent, 'HH:mm') - .set('D', date.get('D')) - .set('M', date.get('M')) - .set('y', date.get('y')) - - if (!start.isValid()) return false - - if (programs.length && !programs[programs.length - 1].stop) { + const items = parseItems(content, date) + items.forEach(item => { + const title = parseTitle(item) + let start = parseStart(item, date) + if (start.hour() > 11) PM = true + if (start.hour() < 12 && PM) start = start.add(1, 'd') + const stop = parseStop(item, date) + if (programs.length) { programs[programs.length - 1].stop = start } programs.push({ title, - start + start, + stop }) }) return programs } } + +function parseStop(item, date) { + return date.tz('Europe/Madrid').endOf('d').add(6, 'h') +} + +function parseStart(item, date) { + let time = (item.time || { textContent: '' }).textContent + time = `${date.format('MM/DD/YYYY')} ${time}` + + return dayjs.tz(time, 'MM/DD/YYYY HH:mm', 'Europe/Madrid') +} + +function parseTitle(item) { + return (item.title || { textContent: '' }).textContent +} + +function parseItems(content, date) { + const items = [] + const dom = new JSDOM(content) + const day = date.day() - 1 + const colNum = day < 0 ? 6 : day + const cols = dom.window.document.querySelectorAll('.programacio-dia') + const col = cols[colNum] + const timeRows = col.querySelectorAll(`h4`) + const titleRows = col.querySelectorAll(`p`) + timeRows.forEach((time, i) => { + items.push({ + time, + title: titleRows[i] + }) + }) + + return items +}