Merge pull request #1449 from iptv-org/fix-ruv.is

Fix ruv.is
This commit is contained in:
Aleksandr Statciuk authored and GitHub committed 2022-12-02 18:47:58 +03:00
commit 5016c6d889
4 files changed
+50 -59

No files matched your search

+1
View File
@@ -0,0 +1 @@
<!doctype html><html lang='is'><head><meta charset="UTF-8" /><meta data-rh="true" content="noarchive" name="robots" /><meta data-rh="true" content="Dagskrá | RÚV Sjónvarp" property="og:title" /><meta data-rh="true" content="Sjónvarp" property="og:description" /><meta data-rh="true" content="https://www.ruv.is/sjonvarp/screenshot/image.png" property="og:image" /><meta data-rh="true" content="https://www.ruv.is/sjonvarp/dagskra/ruv/2022-12-03" property="og:url" /><meta data-rh="true" content="website" property="og:type" /><meta data-rh="true" content="Sjónvarp" name="description" /> <link data-rh="true" href="https://www.ruv.is/sjonvarp/dagskra/ruv/2022-12-03" rel="canonical" /> <link data-rh="true" as="font" href="/spilari/open-sans-latin-400-normal.woff" rel="preload" type="font/woff" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-400-normal.woff2" rel="preload" type="font/woff2" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-600-normal.woff" rel="preload" type="font/woff" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-600-normal.woff2" rel="preload" type="font/woff2" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-700-normal.woff" rel="preload" type="font/woff" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-700-normal.woff2" rel="preload" type="font/woff2" /><link data-rh="true" href="https://www.ruv.is" rel="preconnect" /><link data-rh="true" href="/spilari/favicons/favicon16.png?v=1.5.43" rel="icon" sizes="16x16" type="image/png" /><link data-rh="true" href="/spilari/favicons/favicon32.png?v=1.5.43" rel="icon" sizes="32x32" type="image/png" /><link data-rh="true" href="https://www.google-analytics.com" rel="preconnect" /><link data-rh="true" href="https://cdnjs.cloudflare.com" rel="preconnect" /><link data-rh="true" crossOrigin="true" href="https://myndir.spilari.ruv.is" rel="preconnect" /><link data-rh="true" href="/spilari" rel="preconnect" /><link data-rh="true" href="https://www.ruv.is/gql/" rel="preconnect" /><meta data-rh="true" content="width=device-width, initial-scale=1.0" name="viewport" /><meta data-rh="true" content="ie=edge" http-equiv="X-UA-Compatible" /><meta data-rh="true" content="summary_large_image" name="twitter:card" /><script data-rh="true" id="webtvconfig">window.WEBTVCONFIG = {"baseUrl":"/sjonvarp","image":"/spilari/favicons/menntaruv.png","favicon":{"16":"/spilari/favicons/favicon16.png","32":"/spilari/favicons/favicon32.png"},"showSearch":true,"channels":["ruv","ruv2"],"defaultChannel":"ruv","brand":"ruv","id":"webtv","className":"webtv","title":"RÚV Sjónvarp","description":"Sjónvarp","preBaseUrl":"https://www.ruv.is","brandUrl":"https://www.ruv.is","brandLabel":"Forsíða RÚV","name":"RÚV Sjónvarp","stationType":"tv","programType":"tv","properties":{"showAgeVerification":true,"alwaysShowEpisodeImageIfAvailable":false,"rating":99},"routes":[{"exact":true,"key":"PageNotFound","path":"/sjonvarp/pagenotfound","component":"PageNotFound"},{"exact":true,"path":"/sjonvarp/leit/","key":"tv-search","component":"Search"},{"exact":true,"path":"/sjonvarp/leit/:searchterm","key":"tv-search","component":"Search"},{"exact":true,"path":"/sjonvarp/flokkur/:categoryslug","key":"tv-category","component":"Category"},{"exact":true,"path":"/sjonvarp/","key":"tv-index","component":"Frontpage"},{"exact":true,"path":"/sjonvarp/beint","key":"tv-direct","component":"Direct"},{"exact":true,"path":"/sjonvarp/dagskra","key":"tv-schedule","component":"Schedule"},{"exact":true,"path":"/sjonvarp/dagskra/:channel","key":"tv-schedule","component":"Schedule"},{"exact":true,"path":"/sjonvarp/dagskra/:channel/:date","key":"tv-schedule","component":"Schedule"},{"exact":false,"path":"/krakkaruv","key":"krakkaruv","component":"ChangeConfig","attribute":"krakkaruv"},{"exact":false,"path":"/utvarp","key":"utvarp","component":"ChangeConfig","attribute":"utvarp"},{"exact":false,"path":"/ungruv","key":"ungruv","component":"ChangeConfig","attribute":"ungruv"},{"exact":true,"path":"/sjonvarp/dagskra/:channel/:date/:episode","key":"tv-schedule","component":"Schedule"},{"exact":true,"path":"/sjonvarp/beint","key":"tv-direct","component":"Direct"},{"exact":true,"path":"/sjonvarp/beint/:channel","key":"tv-direct","component":"Direct"},{"exact":true,"path":"/sjonvarp/spila/:slug/:programid/:episodeid","key":"tv-series","component":"Series"},{"exact":true,"path":"/sjonvarp/spila/:slug/:programid/:episodeid/:clipslug","key":"tv-series","component":"Series"},{"exact":false,"path":"/sjonvarp/renningur/:panelslug","key":"tv-panels","component":"Panel"},{"exact":true,"path":"/sjonvarp/spila/:slug/:programid","key":"tv-series","component":"Series"}],"links":[{"title":"Beint","link":"/sjonvarp/beint","childsLabel":"Velja rás","childs":[{"title":"RÚV","link":"/sjonvarp/beint/ruv"},{"title":"RÚV2","link":"/sjonvarp/beint/ruv2"}]},{"title":"Dagskrá","link":"/sjonvarp/dagskra"}],"externalLinks":[]}</script><script data-rh="true" id="cdnsrc">winLine truncated
+1
View File
@@ -0,0 +1 @@
<!doctype html><html lang='is'><head><meta charset="UTF-8" /><meta data-rh="true" content="noarchive" name="robots" /><meta data-rh="true" content="Dagskrá | RÚV Sjónvarp" property="og:title" /><meta data-rh="true" content="Sjónvarp" property="og:description" /><meta data-rh="true" content="https://www.ruv.is/sjonvarp/screenshot/image.png" property="og:image" /><meta data-rh="true" content="https://www.ruv.is/sjonvarp/dagskra/ruv/2023-12-03" property="og:url" /><meta data-rh="true" content="website" property="og:type" /><meta data-rh="true" content="Sjónvarp" name="description" /> <link data-rh="true" href="https://www.ruv.is/sjonvarp/dagskra/ruv/2023-12-03" rel="canonical" /> <link data-rh="true" as="font" href="/spilari/open-sans-latin-400-normal.woff" rel="preload" type="font/woff" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-400-normal.woff2" rel="preload" type="font/woff2" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-600-normal.woff" rel="preload" type="font/woff" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-600-normal.woff2" rel="preload" type="font/woff2" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-700-normal.woff" rel="preload" type="font/woff" /><link data-rh="true" as="font" href="/spilari/open-sans-latin-700-normal.woff2" rel="preload" type="font/woff2" /><link data-rh="true" href="https://www.ruv.is" rel="preconnect" /><link data-rh="true" href="/spilari/favicons/favicon16.png?v=1.5.43" rel="icon" sizes="16x16" type="image/png" /><link data-rh="true" href="/spilari/favicons/favicon32.png?v=1.5.43" rel="icon" sizes="32x32" type="image/png" /><link data-rh="true" href="https://www.google-analytics.com" rel="preconnect" /><link data-rh="true" href="https://cdnjs.cloudflare.com" rel="preconnect" /><link data-rh="true" crossOrigin="true" href="https://myndir.spilari.ruv.is" rel="preconnect" /><link data-rh="true" href="/spilari" rel="preconnect" /><link data-rh="true" href="https://www.ruv.is/gql/" rel="preconnect" /><meta data-rh="true" content="width=device-width, initial-scale=1.0" name="viewport" /><meta data-rh="true" content="ie=edge" http-equiv="X-UA-Compatible" /><meta data-rh="true" content="summary_large_image" name="twitter:card" /><script data-rh="true" id="webtvconfig">window.WEBTVCONFIG = {"baseUrl":"/sjonvarp","image":"/spilari/favicons/menntaruv.png","favicon":{"16":"/spilari/favicons/favicon16.png","32":"/spilari/favicons/favicon32.png"},"showSearch":true,"channels":["ruv","ruv2"],"defaultChannel":"ruv","brand":"ruv","id":"webtv","className":"webtv","title":"RÚV Sjónvarp","description":"Sjónvarp","preBaseUrl":"https://www.ruv.is","brandUrl":"https://www.ruv.is","brandLabel":"Forsíða RÚV","name":"RÚV Sjónvarp","stationType":"tv","programType":"tv","properties":{"showAgeVerification":true,"alwaysShowEpisodeImageIfAvailable":false,"rating":99},"routes":[{"exact":true,"key":"PageNotFound","path":"/sjonvarp/pagenotfound","component":"PageNotFound"},{"exact":true,"path":"/sjonvarp/leit/","key":"tv-search","component":"Search"},{"exact":true,"path":"/sjonvarp/leit/:searchterm","key":"tv-search","component":"Search"},{"exact":true,"path":"/sjonvarp/flokkur/:categoryslug","key":"tv-category","component":"Category"},{"exact":true,"path":"/sjonvarp/","key":"tv-index","component":"Frontpage"},{"exact":true,"path":"/sjonvarp/beint","key":"tv-direct","component":"Direct"},{"exact":true,"path":"/sjonvarp/dagskra","key":"tv-schedule","component":"Schedule"},{"exact":true,"path":"/sjonvarp/dagskra/:channel","key":"tv-schedule","component":"Schedule"},{"exact":true,"path":"/sjonvarp/dagskra/:channel/:date","key":"tv-schedule","component":"Schedule"},{"exact":false,"path":"/krakkaruv","key":"krakkaruv","component":"ChangeConfig","attribute":"krakkaruv"},{"exact":false,"path":"/utvarp","key":"utvarp","component":"ChangeConfig","attribute":"utvarp"},{"exact":false,"path":"/ungruv","key":"ungruv","component":"ChangeConfig","attribute":"ungruv"},{"exact":true,"path":"/sjonvarp/dagskra/:channel/:date/:episode","key":"tv-schedule","component":"Schedule"},{"exact":true,"path":"/sjonvarp/beint","key":"tv-direct","component":"Direct"},{"exact":true,"path":"/sjonvarp/beint/:channel","key":"tv-direct","component":"Direct"},{"exact":true,"path":"/sjonvarp/spila/:slug/:programid/:episodeid","key":"tv-series","component":"Series"},{"exact":true,"path":"/sjonvarp/spila/:slug/:programid/:episodeid/:clipslug","key":"tv-series","component":"Series"},{"exact":false,"path":"/sjonvarp/renningur/:panelslug","key":"tv-panels","component":"Panel"},{"exact":true,"path":"/sjonvarp/spila/:slug/:programid","key":"tv-series","component":"Series"}],"links":[{"title":"Beint","link":"/sjonvarp/beint","childsLabel":"Velja rás","childs":[{"title":"RÚV","link":"/sjonvarp/beint/ruv"},{"title":"RÚV2","link":"/sjonvarp/beint/ruv2"}]},{"title":"Dagskrá","link":"/sjonvarp/dagskra"}],"externalLinks":[]}</script><script data-rh="true" id="cdnsrc">winLine truncated
+33 -31
View File
@@ -11,27 +11,21 @@ dayjs.extend(customParseFormat)
module.exports = {
site: 'ruv.is',
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 = []
const items = parseItems(content)
const items = parseItems(content, channel, date)
items.forEach(item => {
const $item = cheerio.load(item)
const prev = programs[programs.length - 1]
let start = parseStart($item, date)
if (prev) {
if (start.isBefore(prev.start)) {
start = start.add(1, 'd')
date = date.add(1, 'd')
}
prev.stop = start
let start = parseStart(item, date)
let stop = parseStop(item, date)
if (stop.isBefore(start)) {
stop = stop.add(1, 'd')
}
let stop = start.add(1, 'h')
programs.push({
title: parseTitle($item),
description: parseDescription($item),
icon: parseIcon($item),
title: item.title,
description: item.description,
icon: parseIcon(item),
start,
stop
})
@@ -41,27 +35,35 @@ module.exports = {
}
}
function parseTitle($item) {
return $item('span.field-content.ruv-color').text()
function parseIcon(item) {
return item.image.replace('$$IMAGESIZE$$', '480')
}
function parseDescription($item) {
return $item('div.views-field > span > div > span > p').text().trim()
function parseStart(item, date) {
return dayjs.tz(
`${date.format('YYYY-MM-DD')} ${item.start_time_friendly}`,
'YYYY-MM-DD HH:mm',
'Atlantic/Reykjavik'
)
}
function parseIcon($item) {
return $item('div.views-field > span > div > div img').attr('src')
function parseStop(item, date) {
return dayjs.tz(
`${date.format('YYYY-MM-DD')} ${item.end_time_friendly}`,
'YYYY-MM-DD HH:mm',
'Atlantic/Reykjavik'
)
}
function parseStart($item, 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) {
function parseItems(content, channel, date) {
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 || []
)
}
+15 -28
View File
@@ -1,60 +1,47 @@
// npx epg-grabber --config=sites/ruv.is/ruv.is.config.js --channels=sites/ruv.is/ruv.is_is.channels.xml --output=guide.xml --days=2
const { parser, url } = require('./ruv.is.config.js')
const fs = require('fs')
const path = require('path')
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-11-25', 'YYYY-MM-DD').startOf('d')
const date = dayjs.utc('2022-12-03', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'ruv',
xmltv_id: 'RUV.is'
}
it('can generate valid url', () => {
expect(url({ channel, date })).toBe('https://www.ruv.is/dagskra/ruv/20211125')
expect(url({ channel, date })).toBe('https://www.ruv.is/sjonvarp/dagskra/ruv/2022-12-03')
})
it('can parse response', () => {
const content = `<!DOCTYPE html><html lang="is" dir="ltr"> <head></head> <body> <div id="main-container"> <div id="page-wrapper"> <div id="page" class="container page"> <div id="columns" class="columns clearfix"> <main id="content-column" class="content-column" role="main"> <div class="content-inner"> <section id="main-content"> <div id="content" class="region"> <div id="block-system-main"> <div class="two-75-25 at-panel panel-display clearfix"> <div class="region region-two-75-25-first"> <div class="region-inner clearfix"> <div class="panel-pane pane-custom pane-2 no-title block"> <div class="block-inner clearfix"> <div class="block-content"> <div class="fill-white pad2 border"> <div id="ruv_api_calendar"> <ul class="unlist"> <li class=" views-row views-row-0 views-row-odd views-row-first border-bottom pad0y space1 clearfix " > <div class="fr inline"> <i tabindex="0" role="button" aria-expanded="false" aria-label="Sjá nánar Heimaleikfimi" title="Sjá nánar Heimaleikfimi" rel="5215669" class="inline fa fa-plus-circle description pointer" ></i> </div><strong class="field-content">13 : 00</strong> <div class="inline grey-color" title="Upptaka verður aðgengileg í Spilara og Appi" > <i class="icon icon-sarpurinn color-sarpurinn"></i> </div><span class="field-content ruv-color" ><a href="http://www.ruv.is/sjonvarp/spila/heimaleikfimi/30389/91pviq" target="_blank" ><b>Heimaleikfimi</b></a ></span ><em class="field-content color-gray"></em ><span class="field-content color-gray" ><i class="icon icon-vod color-gray" title="Upptaka aðgengileg í VOD-þjónustum" ></i></span ><span class="field-content color-gray" ><i class="icon icon-888 color-gray" title="Dagskrárliður er textaður á síðu 888 í Textavarpinu" ></i></span ><span class="field-content" ><i class="icon icon-endursynt color-gray" title="Endurtekið efni" ></i ></span> <div class="views-field views-field-nothing"> <span class="field-content" ><div class="content hidden mar2t" id="dagskra_item_5215669" > <div class="mar2r col12-mobile fl"> <a href="http://www.ruv.is/sjonvarp/spila/heimaleikfimi/30389/91pviq" target="_blank" ><img class=" image-style-medium col12-mobile fl mar1b " src="https://d38kdhuogyllre.cloudfront.net/fit-in/480x/filters:quality(65)/hd_posters/91pvig-3p3hig.jpg" width="250" height="141" alt="Mynd með færslu" title="Mynd með færslu"/></a> </div><span ><p> Góð ráð og æfingar sem tilvalið er að gera heima. Íris Rut Garðarsdóttir sjúkraþjálfari hefur umsjón með leikfiminni. e. </p></span > </div></span > </div></li><li class="views-row views-row-1 views-row-odd views-row border-bottom pad0y space1 clearfix"><div class="fr inline"><i tabindex="0" role="button" aria-expanded="false" aria-label="Sjá nánar Kastljós" title="Sjá nánar Kastljós" rel="5215993" class="inline fa pointer description_selected fa-minus-circle"></i></div><strong class="field-content">13 : 10</strong><div class="inline grey-color" title="Upptaka verður aðgengileg í Spilara og Appi"><i class="icon icon-sarpurinn "></i></div><span class="field-content ruv-color">Kastljós</span><em class="field-content color-gray"></em><span class="field-content color-gray"><i class="icon icon-vod color-gray" title="Upptaka aðgengileg í VOD-þjónustum"></i></span><span class="field-content color-gray"><i class="icon icon-888 color-gray" title="Dagskrárliður er textaður á síðu 888 í Textavarpinu"></i></span><span class="field-content"><i class="icon icon-endursynt color-gray" title="Endurtekið efni"></i></span><div class="views-field views-field-nothing"><span class="field-content"><div class="content mar2t" id="dagskra_item_5215993"><div class="mar2r col12-mobile fl"><img class="image-style-medium col12-mobile fl mar1b" src="https://d38kdhuogyllre.cloudfront.net/fit-in/480x/filters:quality(65)/hd_posters/95erq0-tmenfg.jpg" width="250" height="141" alt="Mynd með færslu" title="Mynd með færslu"></div><span><p>Ítarleg umfjöllun um það sem er efst á baugi í fréttum og mannlífi. Farið er ofan í kjölinn á stærstu fréttamálum dagsins með viðmælendum um land allt. Umsjónarmenn eru Einar Þorsteinsson og Jóhanna Vigdís Hjaltadóttir. e.</p></span></div></span></div></li><li class="views-row views-row-28 views-row-odd views-row border-bottom pad0y space1 clearfix"><strong class="field-content">00 : 10</strong><span class="field-content ruv-color">Dagskrárlok</span><em class="field-content color-gray"></em><span class="field-content"><i class="icon icon-geoblock color-gray" title="Eingöngu aðgengilegt á Íslandi"></i></span><div class="views-field views-field-nothing"><span class="field-content"><div class="content hidden mar2t" id="dagskra_item_5160443"><div class="mar2r col12-mobile fl"></div></div></span></div></li></ul> </div></div></div></div></div></div></div></div></div></div></section> </div></main> </div></div></div></div></body></html>`
const result = parser({ content, date }).map(p => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
let results = parser({ content, channel, date }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
start: '2021-11-25T13:00:00.000Z',
stop: '2021-11-25T13:10:00.000Z',
title: `Heimaleikfimi`,
description:
'Góð ráð og æfingar sem tilvalið er að gera heima. Íris Rut Garðarsdóttir sjúkraþjálfari hefur umsjón með leikfiminni. e.',
icon: 'https://d38kdhuogyllre.cloudfront.net/fit-in/480x/filters:quality(65)/hd_posters/91pvig-3p3hig.jpg'
},
{
start: '2021-11-25T13:10:00.000Z',
stop: '2021-11-26T00:10:00.000Z',
title: `Kastljós`,
description:
'Ítarleg umfjöllun um það sem er efst á baugi í fréttum og mannlífi. Farið er ofan í kjölinn á stærstu fréttamálum dagsins með viðmælendum um land allt. Umsjónarmenn eru Einar Þorsteinsson og Jóhanna Vigdís Hjaltadóttir. e.',
icon: 'https://d38kdhuogyllre.cloudfront.net/fit-in/480x/filters:quality(65)/hd_posters/95erq0-tmenfg.jpg'
},
{
start: '2021-11-26T00:10:00.000Z',
stop: '2021-11-26T01:10:00.000Z',
title: `Dagskrárlok`
}
])
expect(results[0]).toMatchObject({
start: '2022-12-03T07:05:00.000Z',
stop: '2022-12-03T07:15:00.000Z',
title: `Smástund`,
description:
'Smástund hentar vel fyrir þau allra yngstu, í hverjum þætti lærum við orð, liti, tölur og tónlist. e.',
icon: 'https://d38kdhuogyllre.cloudfront.net/fit-in/480x/filters:quality(65)/hd_posters/a2kmk0-mcpf0o.jpg'
})
})
it('can handle empty guide', () => {
const result = parser({
date,
channel,
content: `<!DOCTYPE html><html> <head></head> <body></body></html>`
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
})
expect(result).toMatchObject([])
})