Update ruv.is.config.js

This commit is contained in:
Aleksandr Statciuk 2022-12-02 18:46:59 +03:00
parent 0f341d78f3
commit 52ee3ff1d2

View file

@ -11,27 +11,21 @@ dayjs.extend(customParseFormat)
module.exports = { module.exports = {
site: 'ruv.is', site: 'ruv.is',
url({ channel, date }) { url({ channel, date }) {
return `https://www.ruv.is/dagskra/${channel.site_id}/${date.format('YYYYMMDD')}` return `https://www.ruv.is/sjonvarp/dagskra/${channel.site_id}/${date.format('YYYY-MM-DD')}`
}, },
parser({ content, date }) { parser({ content, channel, date }) {
let programs = [] let programs = []
const items = parseItems(content) const items = parseItems(content, channel, date)
items.forEach(item => { items.forEach(item => {
const $item = cheerio.load(item) let start = parseStart(item, date)
const prev = programs[programs.length - 1] let stop = parseStop(item, date)
let start = parseStart($item, date) if (stop.isBefore(start)) {
if (prev) { stop = stop.add(1, 'd')
if (start.isBefore(prev.start)) {
start = start.add(1, 'd')
date = date.add(1, 'd')
}
prev.stop = start
} }
let stop = start.add(1, 'h')
programs.push({ programs.push({
title: parseTitle($item), title: item.title,
description: parseDescription($item), description: item.description,
icon: parseIcon($item), icon: parseIcon(item),
start, start,
stop stop
}) })
@ -41,27 +35,35 @@ module.exports = {
} }
} }
function parseTitle($item) { function parseIcon(item) {
return $item('span.field-content.ruv-color').text() return item.image.replace('$$IMAGESIZE$$', '480')
} }
function parseDescription($item) { function parseStart(item, date) {
return $item('div.views-field > span > div > span > p').text().trim() return dayjs.tz(
`${date.format('YYYY-MM-DD')} ${item.start_time_friendly}`,
'YYYY-MM-DD HH:mm',
'Atlantic/Reykjavik'
)
} }
function parseIcon($item) { function parseStop(item, date) {
return $item('div.views-field > span > div > div img').attr('src') return dayjs.tz(
`${date.format('YYYY-MM-DD')} ${item.end_time_friendly}`,
'YYYY-MM-DD HH:mm',
'Atlantic/Reykjavik'
)
} }
function parseStart($item, date) { function parseItems(content, channel, date) {
const string = $item('strong').text()
const time = `${date.format('YYYY-MM-DD')} ${string}`
return dayjs.tz(time, 'YYYY-MM-DD HH : mm', 'Atlantic/Reykjavik')
}
function parseItems(content) {
const $ = cheerio.load(content) const $ = cheerio.load(content)
const apollo = $('#apollo').html()
const [, state] = apollo.match(/window.__APOLLO_STATE__ = ([^;<]+)/) || [null, '']
const data = JSON.parse(state)
return $('#ruv_api_calendar > ul > li').toArray() return (
data?.ROOT_QUERY?.[
`Schedule({"channel":"${channel.site_id}","date":"${date.format('YYYY-MM-DD')}"})`
]?.events || []
)
} }