Merge pull request #1149 from iptv-org/update-tv24.se

Update tv24.se
This commit is contained in:
Aleksandr Statciuk authored and GitHub committed 2022-10-04 17:56:26 +03:00
commit c9abac7d66
4 files changed
+80 -16

No files matched your search

+1
View File
@@ -0,0 +1 @@
{"pageTitle":"Morgonstudion p\u00e5 TV | Tider och kanaler","pageUrl":"https:\/\/tv24.se\/b\/rh7f40-1hkm","contentBefore":"\t<div class=\"image\">\n\t\t<div class=\"actual\" style=\"background-image: url('https:\/\/jrsy.tmsimg.com\/assets\/p14436175_i_h9_ad.jpg')\" id=\"trailer-target\"><\/div>\n\t<\/div>\n\t<div class=\"current-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69430.png\" width=\"56\" height=\"42\" \/>\n\t\t<div>\n\t\t\t<span class=\"time\">\n\t\t\t\t\t\t\t\t\tS\u00e4ndes\t\t\t\t\t<span class=\"times-rw\"\n\t\t\t\t\t\t data-start=\"1661486400\"\n\t\t\t\t\t\t data-end=\"1661497800\">\n\t\t\t\t\t\tfredag 26\/8,\n\t\t\t\t\t\t04:00 - 07:10\t\t\t\t\t<\/span>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/span>\n\t\t\t<span class=\"channel\">\n\t\t\t\t p\u00e5 \t\t\t\t<a href=\"\/kanal\/svt1\">SVT1<\/a>\n\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t<div class=\"info\">\n\t\t<h1>\n\t\t\tMorgonstudion\n\t\t\t\t\t<\/h1>\n\n\t\t\n\t\t<p>\n\t\t\t\t\t\t\tDagens viktigaste nyheter och analyser med st\u00e4ndiga uppdateringar. Vi s\u00e4nder direkt inrikes- och utrikesnyheter inklusive sport, kultur och n\u00f6je. Dessutom intervjuer med aktuella g\u00e4ster. Nyhetssammanfattningar varje kvart med start kl 06.00.\t\t\t\t\t\t\t\t\t\t\t<\/p>\n\n\t\t\n\n\t\t\n\t\t\n\t<\/div>","contentAfter":"\t\t<div class=\"cast\">\n\t\t\t<strong>Medverkande<\/strong>\n\t\t\t<ul class=\"cast column-list\">\n\t\t\t\t\t\t\t<li >\n\t\t\t\t\t<div class=\"img\"><img src=\"\/images\/icons\/ic_person.png\" width=\"36\" height=\"36\" \/><\/div>\n\t\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t\t<span class=\"name\">Carolina Neurath<\/span>\n\t\t\t\t\t\t<span class=\"role\">V\u00e4rd<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li >\n\t\t\t\t\t<div class=\"img\"><img src=\"\/images\/icons\/ic_person.png\" width=\"36\" height=\"36\" \/><\/div>\n\t\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t\t<span class=\"name\">Karin Magnusson<\/span>\n\t\t\t\t\t\t<span class=\"role\">V\u00e4rd<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li >\n\t\t\t\t\t<div class=\"img\"><img src=\"\/images\/icons\/ic_person.png\" width=\"36\" height=\"36\" \/><\/div>\n\t\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t\t<span class=\"name\">Pelle Nilsson<\/span>\n\t\t\t\t\t\t<span class=\"role\">V\u00e4rd<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li >\n\t\t\t\t\t<div class=\"img\"><img src=\"\/images\/icons\/ic_person.png\" width=\"36\" height=\"36\" \/><\/div>\n\t\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t\t<span class=\"name\">Ted Wigren<\/span>\n\t\t\t\t\t\t<span class=\"role\">V\u00e4rd<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t<\/div>\n\t\t\n<div class=\"upcoming\">\n\t<strong>Visas \u00e4ven p\u00e5 TV<\/strong>\n\n\t\n\t<ul class=\"column-list items\">\n\t\t\t<li>\n\t\t\t<a href=\"\/b\/rj9hs0-1hkm\" class=\"program-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69430.png\" width=\"40\" height=\"30\"\/>\n\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t<span class=\"time-channel\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"times-rw ne\"\n\t\t\t\t\t\t\t\t data-start=\"1664942400\"\n\t\t\t\t\t\t\t\t data-end=\"1664956800\">\n\t\t\t\t\t\t\tImorgon, 06:00\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<span class=\"episodeinfo\">\n\t\t\t\t\t\t p\u00e5 \t\t\t\t\t\tSVT1\n\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t<\/a>\n\t\t<\/li>\n\t\t\t<li>\n\t\t\t<a href=\"\/b\/rj9hs0-1hkl\" class=\"program-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69429.png\" width=\"40\" height=\"30\"\/>\n\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t<span class=\"time-channel\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"times-rw ne\"\n\t\t\t\t\t\t\t\t data-start=\"1664942400\"\n\t\t\t\t\t\t\t\t data-end=\"1664956800\">\n\t\t\t\t\t\t\tImorgon, 06:00\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<span class=\"episodeinfo\">\n\t\t\t\t\t\t p\u00e5 \t\t\t\t\t\tSVT1 HD\n\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t<\/a>\n\t\t<\/li>\n\t\t\t<li>\n\t\t\t<a href=\"\/b\/rjbcg0-1hkm\" class=\"program-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69430.png\" width=\"40\" height=\"30\"\/>\n\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t<span class=\"time-channel\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"times-rw ne\"\n\t\t\t\t\t\t\t\t data-start=\"1665028800\"\n\t\t\t\t\t\t\t\t data-end=\"1665043200\">\n\t\t\t\t\t\t\tTorsdag 6\/10, 06:00\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<span class=\"episodeinfo\">\n\t\t\t\t\t\t p\u00e5 \t\t\t\t\t\tSVT1\n\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t<\/a>\n\t\t<\/li>\n\t\t\t<li>\n\t\t\t<a href=\"\/b\/rjbcg0-1hkl\" class=\"program-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69429.png\" width=\"40Line truncated
+1
View File
@@ -0,0 +1 @@
{"pageTitle":"Uppdrag granskning p\u00e5 TV | S\u00e4song 23 | Tider och kanaler","pageUrl":"https:\/\/tv24.se\/b\/rh9dhc-1hkm","contentBefore":"\t<div class=\"image\">\n\t\t<div class=\"actual\" style=\"background-image: url('https:\/\/jrsy.tmsimg.com\/assets\/p22818697_e_h9_aa.jpg')\" id=\"trailer-target\"><\/div>\n\t<\/div>\n\t<div class=\"current-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69430.png\" width=\"56\" height=\"42\" \/>\n\t\t<div>\n\t\t\t<span class=\"time\">\n\t\t\t\t\t\t\t\t\tS\u00e4ndes\t\t\t\t\t<span class=\"times-rw\"\n\t\t\t\t\t\t data-start=\"1661577600\"\n\t\t\t\t\t\t data-end=\"1661581200\">\n\t\t\t\t\t\tl\u00f6rdag 27\/8,\n\t\t\t\t\t\t05:20 - 06:20\t\t\t\t\t<\/span>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/span>\n\t\t\t<span class=\"channel\">\n\t\t\t\t p\u00e5 \t\t\t\t<a href=\"\/kanal\/svt1\">SVT1<\/a>\n\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t<div class=\"info\">\n\t\t<h1>\n\t\t\tUppdrag granskning\n\t\t\t\t\t<\/h1>\n\n\t\t\t\t\t\t<span class=\"sub-title\">\n\t\t\t\tS\u00e4song 23: D\u00e4r m\u00f6rdare g\u00e5r fria\t\t\t\t<\/span>\n\t\t\t\n\t\t<p>\n\t\t\t\t\t\t\tN\u00e4r samtliga sex m\u00e4n frias f\u00f6r \u00e4nnu en skjutning v\u00e4xer vreden inom polisen. \u00d6kningen av skjutningar i Sverige ligger i topp i Europa - och nu \u00e4r v\u00e5ldsspiralen p\u00e5 v\u00e4g mot ett nattsvart rekord. Hur blev Sverige landet d\u00e4r m\u00f6rdare g\u00e5r fria?\t\t\t\t\t\t\t\t\t\t\t<\/p>\n\n\t\t\n\n\t\t\t\t\t<dl class=\"extras\">\n\t\t\t\t\t\t\t\t<dt>Kategori<\/dt>\n\t\t\t\t<dd>Dokument\u00e4r \/ Samh\u00e4llsfr\u00e5gor<\/dd>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<dt>Avsnittspremi\u00e4r<\/dt>\n\t\t\t\t\t\t\t\t\t\t<dd>2022-08-24<\/dd>\n\t\t\t\t\t\t\t<\/dl>\n\t\t\n\t\t\n\t<\/div>","contentAfter":"\t\t<div class=\"cast\">\n\t\t\t<strong>Medverkande<\/strong>\n\t\t\t<ul class=\"cast column-list\">\n\t\t\t\t\t\t\t<li >\n\t\t\t\t\t<div class=\"img\"><img src=\"\/images\/icons\/ic_person.png\" width=\"36\" height=\"36\" \/><\/div>\n\t\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t\t<span class=\"name\">Karin Mattisson<\/span>\n\t\t\t\t\t\t<span class=\"role\">V\u00e4rd<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li >\n\t\t\t\t\t<div class=\"img\"><img src=\"\/images\/icons\/ic_person.png\" width=\"36\" height=\"36\" \/><\/div>\n\t\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t\t<span class=\"name\">Ali Fegan<\/span>\n\t\t\t\t\t\t<span class=\"role\">V\u00e4rd<\/span>\t\t\t\t\t<\/div>\n\t\t\t\t<\/li>\n\t\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t<\/div>\n\t\t\n<div class=\"upcoming\">\n\t<strong>Visas \u00e4ven p\u00e5 TV<\/strong>\n\n\t\n\t<ul class=\"column-list items\">\n\t\t\t<li>\n\t\t\t<a href=\"\/b\/rjako0-1hkm\" class=\"program-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69430.png\" width=\"40\" height=\"30\"\/>\n\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t<span class=\"time-channel\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"times-rw ne\"\n\t\t\t\t\t\t\t\t data-start=\"1664992800\"\n\t\t\t\t\t\t\t\t data-end=\"1664996400\">\n\t\t\t\t\t\t\tImorgon, 20:00\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<span class=\"episodeinfo\">\n\t\t\t\t\t\t p\u00e5 \t\t\t\t\t\tSVT1\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br \/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tS\u00e4song 23\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t<\/a>\n\t\t<\/li>\n\t\t\t<li>\n\t\t\t<a href=\"\/b\/rjako0-1hkl\" class=\"program-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69429.png\" width=\"40\" height=\"30\"\/>\n\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t<span class=\"time-channel\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"times-rw ne\"\n\t\t\t\t\t\t\t\t data-start=\"1664992800\"\n\t\t\t\t\t\t\t\t data-end=\"1664996400\">\n\t\t\t\t\t\t\tImorgon, 20:00\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<span class=\"episodeinfo\">\n\t\t\t\t\t\t p\u00e5 \t\t\t\t\t\tSVT1 HD\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br \/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tS\u00e4song 23\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t<\/a>\n\t\t<\/li>\n\t\t\t<li>\n\t\t\t<a href=\"\/b\/rjc3j0-1hkm\" class=\"program-broadcast\">\n\t\t\t\t<img src=\"https:\/\/static.tv24.co\/v2\/channels\/small\/69430.png\" width=\"40\" height=\"30\"\/>\n\t\t\t\t<div class=\"meta\">\n\t\t\t\t\t<span class=\"time-channel\">\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"times-rw ne\"\n\t\t\t\t\t\t\t\t data-start=\"1665063900\"\n\t\t\t\t\t\t\t\t data-end=\"1665067500\">\n\t\t\t\t\t\t\tTorsdag 6\/10, 15:45\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<span class=\"episodeinfo\">\n\t\t\t\t\t\t p\u00e5 \t\t\t\t\t\tSVT1\n\t\t\t\t\t\t\t\t\t\t\t\t\t<br \/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tS\u00e4song 23\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t<\/div>\n\t\t\t<\/a>\n\t\t<\Line truncated
+48 -8
View File
@@ -12,10 +12,10 @@ module.exports = {
url: function ({ channel, date }) {
return `https://tv24.se/x/channel/${channel.site_id}/0/${date.format('YYYY-MM-DD')}`
},
parser: function ({ content, date }) {
parser: async function ({ content, date }) {
let programs = []
const items = parseItems(content)
items.forEach(item => {
for (let item of items) {
const prev = programs[programs.length - 1]
const $item = cheerio.load(item)
let start = parseStart($item, date)
@@ -27,13 +27,17 @@ module.exports = {
prev.stop = start
}
const stop = start.add(30, 'm')
const details = await loadProgramDetails($item)
programs.push({
title: parseTitle($item),
description: parseDescription($item),
description: details.description,
actors: details.actors,
icon: details.icon,
category: details.category,
start,
stop
})
})
}
return programs
},
@@ -71,12 +75,48 @@ module.exports = {
}
}
function parseTitle($item) {
return $item('h3').text()
async function loadProgramDetails($item) {
const programId = $item('a').attr('href')
const data = await axios
.get(`https://tv24.se/x${programId}/0/0`)
.then(r => r.data)
.catch(console.error)
if (!data) return Promise.resolve({})
const $ = cheerio.load(data.contentBefore + data.contentAfter)
return Promise.resolve({
icon: parseIcon($),
actors: parseActors($),
description: parseDescription($),
category: parseCategory($)
})
}
function parseDescription($item) {
return $item('p').text()
function parseIcon($) {
const style = $('.image > .actual').attr('style')
const [_, url] = style.match(/background-image\: url\('([^']+)'\)/)
return url
}
function parseCategory($) {
return $('.extras > dt:contains(Kategori)').next().text().trim().split(' / ')
}
function parseActors($) {
return $('.cast > li')
.map((i, el) => {
return $(el).find('.name').text().trim()
})
.get()
}
function parseDescription($) {
return $('.info > p').text().trim()
}
function parseTitle($item) {
return $item('h3').text()
}
function parseStart($item, date) {
+30 -8
View File
@@ -4,12 +4,15 @@
const { parser, url } = require('./tv24.se.config.js')
const fs = require('fs')
const path = require('path')
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
jest.mock('axios')
const date = dayjs.utc('2022-08-26', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'svt1',
@@ -20,9 +23,25 @@ it('can generate valid url', () => {
expect(url({ channel, date })).toBe('https://tv24.se/x/channel/svt1/0/2022-08-26')
})
it('can parse response', () => {
it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const results = parser({ content, date }).map(p => {
axios.get.mockImplementation((url, data) => {
if (url === 'https://tv24.se/x/b/rh7f40-1hkm/0/0') {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program1.json')))
})
} else if (url === 'https://tv24.se/x/b/rh9dhc-1hkm/0/0') {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program2.json')))
})
} else {
return Promise.resolve({ data: '' })
}
})
let results = await parser({ content, date })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
@@ -32,22 +51,25 @@ it('can parse response', () => {
start: '2022-08-26T04:00:00.000Z',
stop: '2022-08-26T07:10:00.000Z',
title: 'Morgonstudion',
icon: 'https://jrsy.tmsimg.com/assets/p14436175_i_h9_ad.jpg',
description:
'Dagens viktigaste nyheter och analyser med ständiga uppdateringar. Vi sänder direkt inrikes- och utrikesnyheter inklusive sport, kultur och nöje. Dessutom intervjuer med aktuella gäster. Nyhetssammanfattningar varje kvart med start kl 06.00.'
'Dagens viktigaste nyheter och analyser med ständiga uppdateringar. Vi sänder direkt inrikes- och utrikesnyheter inklusive sport, kultur och nöje. Dessutom intervjuer med aktuella gäster. Nyhetssammanfattningar varje kvart med start kl 06.00.',
actors: ['Carolina Neurath', 'Karin Magnusson', 'Pelle Nilsson', 'Ted Wigren']
})
expect(results[33]).toMatchObject({
start: '2022-08-27T05:20:00.000Z',
stop: '2022-08-27T05:50:00.000Z',
title: 'Uppdrag granskning',
icon: 'https://jrsy.tmsimg.com/assets/p22818697_e_h9_aa.jpg',
description:
'När samtliga sex män frias för ännu en skjutning växer vreden inom polisen. Ökningen av skjutningar i Sverige ligger i topp i Europa - och nu är våldsspiralen på väg mot ett nattsvart rekord. Hur blev Sverige landet där mördare går fria?'
'När samtliga sex män frias för ännu en skjutning växer vreden inom polisen. Ökningen av skjutningar i Sverige ligger i topp i Europa - och nu är våldsspiralen på väg mot ett nattsvart rekord. Hur blev Sverige landet där mördare går fria?',
actors: ['Karin Mattisson', 'Ali Fegan'],
category: ['Dokumentär', 'Samhällsfrågor']
})
})
it('can handle empty guide', () => {
const result = parser({
content: ''
})
it('can handle empty guide', async () => {
const result = await parser({ content: '' })
expect(result).toMatchObject([])
})