diff --git a/sites/programtv.onet.pl/programtv.onet.pl.config.js b/sites/programtv.onet.pl/programtv.onet.pl.config.js index c15c99fc2..c6b6da146 100644 --- a/sites/programtv.onet.pl/programtv.onet.pl.config.js +++ b/sites/programtv.onet.pl/programtv.onet.pl.config.js @@ -1,3 +1,4 @@ +const axios = require('axios') const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') @@ -15,10 +16,10 @@ module.exports = { return `https://programtv.onet.pl/program-tv/${channel.site_id}?dzien=${day}` }, - parser: function ({ content, date }) { + async parser({ content, date }) { const programs = [] const items = parseItems(content) - items.forEach(item => { + for (const item of items) { const prev = programs[programs.length - 1] const $item = cheerio.load(item) let start = parseStart($item, date) @@ -30,19 +31,27 @@ module.exports = { prev.stop = start } const stop = start.add(1, 'hour') + + const programUrl = parseProgramUrl($item) + const details = await loadProgramDetails(programUrl) + let image + if (details) { + image = details.image + } + programs.push({ title: parseTitle($item), description: parseDescription($item), + image, category: parseCategory($item), start, stop }) - }) + } return programs }, async channels() { - const axios = require('axios') const data = await axios .get('https://programtv.onet.pl/stacje') .then(r => r.data) @@ -67,6 +76,27 @@ module.exports = { } } +async function loadProgramDetails(url) { + const html = await axios + .get(url) + .then(r => r.data) + .catch(console.error) + if (!html) return + + const $ = cheerio.load(html) + + return { + image: $('meta[property="og:image"]').attr('content') + } +} + +function parseProgramUrl($item) { + const href = $item('.titles > a').attr('href') + const url = new URL(href, 'https://programtv.onet.pl') + + return url.href +} + function parseStart($item, date) { const timeString = $item('.hours > .hour').text() const dateString = `${date.format('MM/DD/YYYY')} ${timeString}`