mirror of
https://github.com/iptv-org/epg
synced 2025-12-16 10:26:41 -05:00
@@ -9,9 +9,9 @@ dayjs.extend(utc)
|
||||
dayjs.extend(timezone)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
const detailedGuide = false
|
||||
const detailedGuide = true
|
||||
const tz = 'Europe/London'
|
||||
const nworker = 10
|
||||
const nworker = 25
|
||||
|
||||
module.exports = {
|
||||
site: 'mytelly.co.uk',
|
||||
@@ -37,8 +37,7 @@ module.exports = {
|
||||
} else {
|
||||
const subtitle = td.find('h6')
|
||||
const time = $(el).find('td:eq(0)')
|
||||
const dateString = `${date.format('YYYY-MM-DD')} ${time.text().trim()}`
|
||||
let start = dayjs.tz(dateString, 'YYYY-MM-DD H:mm a', tz)
|
||||
let start = parseTime(date, time.text().trim())
|
||||
const prev = programs[programs.length - 1]
|
||||
if (prev) {
|
||||
if (start.isBefore(prev.start)) {
|
||||
@@ -56,6 +55,53 @@ module.exports = {
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
if (queues.length) {
|
||||
await doFetch(queues, (url, res) => {
|
||||
const $ = cheerio.load(res)
|
||||
const time = $('center > h5 > b').text()
|
||||
const title = parseText($('.inner-heading.sub h2'))
|
||||
const subTitle = parseText($('.tab-pane > h5 > strong'))
|
||||
const description = parseText($('.tab-pane > .tvbody > p'))
|
||||
const image = $('.program-media-image img').attr('src')
|
||||
const category = $('.schedule-attributes-genres span').toArray()
|
||||
.map(el => $(el).text())
|
||||
const casts = $('.single-cast-head:not([id])').toArray()
|
||||
.map(el => {
|
||||
const cast = { name: parseText($(el).find('a')) }
|
||||
const [, role] = $(el).text().match(/\((.*)\)/) || [null, null]
|
||||
if (role) {
|
||||
cast.role = role
|
||||
}
|
||||
return cast
|
||||
})
|
||||
const [start, stop] = parseStartStop(date, time)
|
||||
let season, episode
|
||||
if (subTitle) {
|
||||
const [, ses, epi] = subTitle.match(/Season (\d+), Episode (\d+)/) || [null, null]
|
||||
if (ses) {
|
||||
season = parseInt(ses)
|
||||
}
|
||||
if (epi) {
|
||||
episode = parseInt(epi)
|
||||
}
|
||||
}
|
||||
programs.push({
|
||||
title,
|
||||
subTitle,
|
||||
description,
|
||||
image,
|
||||
category,
|
||||
season,
|
||||
episode,
|
||||
actor: casts.filter(c => c.role === 'Actor').map(c => c.name),
|
||||
director: casts.filter(c => c.role === 'Director').map(c => c.name),
|
||||
presenter: casts.filter(c => c.role === 'Presenter').map(c => c.name),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
return programs
|
||||
@@ -115,12 +161,35 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
|
||||
function parseStartStop(date, time) {
|
||||
const [s, e] = time.split(' - ')
|
||||
const start = parseTime(date, s)
|
||||
let stop = parseTime(date, e)
|
||||
if (stop.isBefore(start)) {
|
||||
stop = stop.add(1, 'd')
|
||||
}
|
||||
|
||||
return [start, stop]
|
||||
}
|
||||
|
||||
function parseTime(date, time) {
|
||||
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD H:mm a', tz)
|
||||
}
|
||||
|
||||
function parseText($item) {
|
||||
return $item.text()
|
||||
let text = $item.text()
|
||||
.replace(/\t/g, '')
|
||||
.replace(/\n/g, ' ')
|
||||
.replace(/ /g, ' ')
|
||||
.trim()
|
||||
while (true) {
|
||||
if (text.match(/ /)) {
|
||||
text = text.replace(/ /g, ' ')
|
||||
continue
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
return text
|
||||
}
|
||||
|
||||
async function doFetch(queues, cb) {
|
||||
|
||||
Reference in New Issue
Block a user