mirror of
https://github.com/iptv-org/epg
synced 2026-05-07 01:46:59 -04:00
Merge pull request #3083 from iptv-org/update-programtv.onet.pl
Update programtv.onet.pl
This commit is contained in:
1075
sites/programtv.onet.pl/__data__/entry.html
Normal file
1075
sites/programtv.onet.pl/__data__/entry.html
Normal file
File diff suppressed because one or more lines are too long
@@ -1,3 +1,4 @@
|
|||||||
|
const axios = require('axios')
|
||||||
const cheerio = require('cheerio')
|
const cheerio = require('cheerio')
|
||||||
const dayjs = require('dayjs')
|
const dayjs = require('dayjs')
|
||||||
const utc = require('dayjs/plugin/utc')
|
const utc = require('dayjs/plugin/utc')
|
||||||
@@ -15,10 +16,10 @@ module.exports = {
|
|||||||
|
|
||||||
return `https://programtv.onet.pl/program-tv/${channel.site_id}?dzien=${day}`
|
return `https://programtv.onet.pl/program-tv/${channel.site_id}?dzien=${day}`
|
||||||
},
|
},
|
||||||
parser: function ({ content, date }) {
|
async parser({ content, date }) {
|
||||||
const programs = []
|
const programs = []
|
||||||
const items = parseItems(content)
|
const items = parseItems(content)
|
||||||
items.forEach(item => {
|
for (const item of items) {
|
||||||
const prev = programs[programs.length - 1]
|
const prev = programs[programs.length - 1]
|
||||||
const $item = cheerio.load(item)
|
const $item = cheerio.load(item)
|
||||||
let start = parseStart($item, date)
|
let start = parseStart($item, date)
|
||||||
@@ -30,19 +31,27 @@ module.exports = {
|
|||||||
prev.stop = start
|
prev.stop = start
|
||||||
}
|
}
|
||||||
const stop = start.add(1, 'hour')
|
const stop = start.add(1, 'hour')
|
||||||
|
|
||||||
|
const programUrl = parseProgramUrl($item)
|
||||||
|
const details = await loadProgramDetails(programUrl)
|
||||||
|
let image
|
||||||
|
if (details) {
|
||||||
|
image = details.image
|
||||||
|
}
|
||||||
|
|
||||||
programs.push({
|
programs.push({
|
||||||
title: parseTitle($item),
|
title: parseTitle($item),
|
||||||
description: parseDescription($item),
|
description: parseDescription($item),
|
||||||
|
image,
|
||||||
category: parseCategory($item),
|
category: parseCategory($item),
|
||||||
start,
|
start,
|
||||||
stop
|
stop
|
||||||
})
|
})
|
||||||
})
|
}
|
||||||
|
|
||||||
return programs
|
return programs
|
||||||
},
|
},
|
||||||
async channels() {
|
async channels() {
|
||||||
const axios = require('axios')
|
|
||||||
const data = await axios
|
const data = await axios
|
||||||
.get('https://programtv.onet.pl/stacje')
|
.get('https://programtv.onet.pl/stacje')
|
||||||
.then(r => r.data)
|
.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) {
|
function parseStart($item, date) {
|
||||||
const timeString = $item('.hours > .hour').text()
|
const timeString = $item('.hours > .hour').text()
|
||||||
const dateString = `${date.format('MM/DD/YYYY')} ${timeString}`
|
const dateString = `${date.format('MM/DD/YYYY')} ${timeString}`
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const { parser, url } = require('./programtv.onet.pl.config.js')
|
const { parser, url } = require('./programtv.onet.pl.config.js')
|
||||||
|
const axios = require('axios')
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const dayjs = require('dayjs')
|
const dayjs = require('dayjs')
|
||||||
@@ -7,6 +8,20 @@ const customParseFormat = require('dayjs/plugin/customParseFormat')
|
|||||||
dayjs.extend(customParseFormat)
|
dayjs.extend(customParseFormat)
|
||||||
dayjs.extend(utc)
|
dayjs.extend(utc)
|
||||||
|
|
||||||
|
jest.mock('axios')
|
||||||
|
|
||||||
|
axios.get.mockImplementation(url => {
|
||||||
|
if (url === 'https://programtv.onet.pl/tv/law-and-order-odcinek-15/rlmzu?entry=21970867') {
|
||||||
|
return Promise.resolve({
|
||||||
|
data: fs.readFileSync(path.resolve(__dirname, '__data__/entry.html'))
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
return Promise.resolve({
|
||||||
|
data: ''
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
const date = dayjs.utc('2021-11-24', 'YYYY-MM-DD').startOf('d')
|
const date = dayjs.utc('2021-11-24', 'YYYY-MM-DD').startOf('d')
|
||||||
const channel = {
|
const channel = {
|
||||||
site_id: '13th-street-250',
|
site_id: '13th-street-250',
|
||||||
@@ -35,9 +50,9 @@ it('can generate valid url for next day', () => {
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('can parse response', () => {
|
it('can parse response', async () => {
|
||||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
|
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
|
||||||
const result = parser({ content, date }).map(p => {
|
const result = (await parser({ content, date })).map(p => {
|
||||||
p.start = p.start.toJSON()
|
p.start = p.start.toJSON()
|
||||||
p.stop = p.stop.toJSON()
|
p.stop = p.stop.toJSON()
|
||||||
return p
|
return p
|
||||||
@@ -50,7 +65,8 @@ it('can parse response', () => {
|
|||||||
title: 'Law & Order, odc. 15: Letzte Worte',
|
title: 'Law & Order, odc. 15: Letzte Worte',
|
||||||
category: 'Krimiserie',
|
category: 'Krimiserie',
|
||||||
description:
|
description:
|
||||||
'Bei einer Reality-TV-Show stirbt einer der Teilnehmer. Zunächst tappen Briscoe (Jerry Orbach) und Green (Jesse L....'
|
'Bei einer Reality-TV-Show stirbt einer der Teilnehmer. Zunächst tappen Briscoe (Jerry Orbach) und Green (Jesse L....',
|
||||||
|
image: 'https://ocdn.eu/ptv-imported-images/akpa4046117.jpg'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
start: '2021-11-24T22:30:00.000Z',
|
start: '2021-11-24T22:30:00.000Z',
|
||||||
@@ -71,8 +87,8 @@ it('can parse response', () => {
|
|||||||
])
|
])
|
||||||
})
|
})
|
||||||
|
|
||||||
it('can handle empty guide', () => {
|
it('can handle empty guide', async () => {
|
||||||
const result = parser({
|
const result = await parser({
|
||||||
date,
|
date,
|
||||||
channel,
|
channel,
|
||||||
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
|
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
|
||||||
|
|||||||
Reference in New Issue
Block a user