Replaces icon with image

This commit is contained in:
freearhey 2024-06-24 16:49:35 +03:00
parent 0eaff54a31
commit bb6771f539
170 changed files with 428 additions and 351 deletions

View File

@ -27,7 +27,7 @@ module.exports = {
const stop = start.add(1, 'h')
programs.push({
title: parseTitle($item),
icon: parseIcon($item),
image: parseImage($item),
description: parseDescription($item),
start,
stop
@ -44,7 +44,7 @@ function parseStart($item, date) {
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Asia/Jerusalem')
}
function parseIcon($item) {
function parseImage($item) {
const backgroundImage = $item('a > div.guide_info_group > div.guide_info_pict').css(
'background-image'
)

View File

@ -31,14 +31,14 @@ it('can parse response', () => {
start: '2022-03-06T04:30:00.000Z',
stop: '2022-03-06T07:10:00.000Z',
title: 'Слепая',
icon: 'https://www.9tv.co.il/download/pictures/img_id=8484.jpg',
image: 'https://www.9tv.co.il/download/pictures/img_id=8484.jpg',
description:
'Она не очень любит говорить о себе или о том, кто и зачем к ней обращается. Живет уединенно, в глуши. Но тех, кто приходит -принимает. Она видит судьбы.'
},
{
start: '2022-03-06T07:10:00.000Z',
stop: '2022-03-06T08:10:00.000Z',
icon: 'https://www.9tv.co.il/download/pictures/img_id=23694.jpg',
image: 'https://www.9tv.co.il/download/pictures/img_id=23694.jpg',
title: 'Орел и решка. Морской сезон',
description: 'Орел и решка. Морской сезон. Ведущие -Алина Астровская и Коля Серга.'
}

View File

@ -33,7 +33,7 @@ module.exports = {
season: parseSeason(item),
episode: parseEpisode(item),
rating: parseRating(item),
icon: parseIcon(item),
image: parseImage(item),
start: parseTime(item.start_time),
stop: parseTime(item.end_time)
})
@ -106,7 +106,7 @@ function parseEpisode(item) {
function parseTime(time) {
return dayjs.tz(time, 'YYYY-MM-DD HH:mm', 'Australia/Sydney')
}
function parseIcon(item) {
function parseImage(item) {
return item.image_file
? `https://www.abc.net.au/tv/common/images/publicity/${item.image_file}`
: null

View File

@ -35,7 +35,7 @@ it('can parse response', () => {
},
season: 22,
episode: 4,
icon: 'https://www.abc.net.au/tv/common/images/publicity/ZW2178A004S00_460.jpg',
image: 'https://www.abc.net.au/tv/common/images/publicity/ZW2178A004S00_460.jpg',
start: '2022-12-21T13:46:00.000Z',
stop: '2022-12-21T14:44:00.000Z'
}

View File

@ -22,7 +22,7 @@ module.exports = {
title: item.title,
category: item.details.categories,
description: item.details.description,
icon: item.details.image,
image: item.details.image,
season: parseSeason(item),
episode: parseEpisode(item),
start,

View File

@ -32,7 +32,8 @@ it('can parse response', () => {
category: ['other'],
description:
'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.',
icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
image:
'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
season: 4,
episode: 1
}

View File

@ -22,7 +22,7 @@ module.exports = {
title: item.title,
category: item.details.categories,
description: item.details.description,
icon: item.details.image,
image: item.details.image,
season: parseSeason(item),
episode: parseEpisode(item),
start,

View File

@ -32,7 +32,8 @@ it('can parse response', () => {
category: ['other'],
description:
'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.',
icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
image:
'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
season: 4,
episode: 1
}

View File

@ -22,7 +22,7 @@ module.exports = {
title: item.title,
category: item.details.categories,
description: item.details.description,
icon: item.details.image,
image: item.details.image,
season: parseSeason(item),
episode: parseEpisode(item),
start,

View File

@ -32,7 +32,8 @@ it('can parse response', () => {
category: ['other'],
description:
'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.',
icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
image:
'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
season: 4,
episode: 1
}

View File

@ -22,7 +22,7 @@ module.exports = {
title: item.title,
category: item.details.categories,
description: item.details.description,
icon: item.details.image,
image: item.details.image,
season: parseSeason(item),
episode: parseEpisode(item),
start,

View File

@ -32,7 +32,8 @@ it('can parse response', () => {
category: ['other'],
description:
'Svenskt träningsprogram från 2021. Styrka. Sofia Åhman leder SVT:s hemmagympapass. Denna gång fokuserar vi på styrka.',
icon: 'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
image:
'https://viasatps.api.comspace.se/PS/channeldate/image/viasat.ps/21/2022-08-22/se.cs.svt1.event.A_41214031600.jpg?size=2560x1440',
season: 4,
episode: 1
}

View File

@ -62,7 +62,7 @@ module.exports = {
title: item.displayNm,
start: parseStart(item),
stop: parseStop(item),
icon: parseIcon(programDetail),
image: parseImage(programDetail),
category: parseCategory(programDetail),
description: parseDescription(programDetail)
})
@ -121,7 +121,7 @@ async function parseProgramDetail(item) {
})
}
function parseIcon(programDetail) {
function parseImage(programDetail) {
if (programDetail && programDetail.image && programDetail.image[0].url) {
return programDetail.image[0].url
} else {

View File

@ -64,7 +64,8 @@ it('can parse response', async () => {
title: 'WITHIN THE FRAME [R]',
start: dayjs.tz(date, 'Asia/Seoul'),
stop: dayjs.tz(date, 'Asia/Seoul').add(30, 'minute'),
icon: 'https://img.arirang.com/v1/AUTH_d52449c16d3b4bbca17d4fffd9fc44af/public/images/202308/2080840096998752900.png',
image:
'https://img.arirang.com/v1/AUTH_d52449c16d3b4bbca17d4fffd9fc44af/public/images/202308/2080840096998752900.png',
description: 'NEWS',
category: 'Current Affairs'
})

View File

@ -33,14 +33,14 @@ module.exports = {
if (!content) return programs
const items = JSON.parse(content)
items.forEach(item => {
const icon = parseIcon(item)
const image = parseImage(item)
const start = parseStart(item)
const duration = parseDuration(item)
const stop = start.add(duration, 's')
programs.push({
title: item.title,
description: item.description,
icon,
image,
start,
stop
})
@ -63,6 +63,6 @@ function parseDuration(item) {
return parseInt(HH) * 3600 + parseInt(mm) * 60 + parseInt(ss)
}
function parseIcon(item) {
function parseImage(item) {
return item.thumbnail ? `https://www.artonline.tv${item.thumbnail}` : null
}

View File

@ -52,7 +52,7 @@ it('can parse response', () => {
title: 'الراقصه و السياسي',
description:
'تقرر الراقصه سونيا انشاء دار حضانه للأطفال اليتامى و عندما تتقدم بمشورعها للمسئول يرفض فتتحداه ، تلجأ للوزير عبد الحميد رأفت تربطه بها علاقة قديمة ، يخشى على مركزه و يرفض مساعدتها فتقرر كتابة مذكراتها بمساعدة أحد الصحفيين ، يتخوف عبد الحميد و المسئولين ثم يفاجأ عبد الحميد بحصول سونيا على الموافقه للمشورع و البدء في تنفيذه و ذلك لعلاقتها بأحد كبار المسئولين .',
icon: 'https://www.artonline.tv/UploadImages/Channel/ARTAFLAM1/03/AlRaqesaWaAlSeyasi.jpg'
image: 'https://www.artonline.tv/UploadImages/Channel/ARTAFLAM1/03/AlRaqesaWaAlSeyasi.jpg'
}
])
})

View File

@ -48,7 +48,7 @@ module.exports = {
programs.push({
title: parseTitle($item),
categories: parseCategories($item),
icon: parseIcon($item),
image: parseImage($item),
start,
stop
})
@ -84,7 +84,7 @@ function parseTitle($item) {
.trim()
}
function parseIcon($item) {
function parseImage($item) {
return $item('img').data('src') || $item('img').attr('src') || null
}

View File

@ -51,7 +51,7 @@ it('can parse response', () => {
start: '2023-02-12T09:30:00.000Z',
stop: '2023-02-12T10:30:00.000Z',
title: 'Revista agropecuaria',
icon: 'https://www.reportv.com.ar/buscador/img/Programas/2797844.jpg',
image: 'https://www.reportv.com.ar/buscador/img/Programas/2797844.jpg',
categories: []
})
@ -59,7 +59,7 @@ it('can parse response', () => {
start: '2023-02-12T12:30:00.000Z',
stop: '2023-02-12T13:30:00.000Z',
title: 'De pago en pago',
icon: 'https://www.reportv.com.ar/buscador/img/Programas/3772835.jpg',
image: 'https://www.reportv.com.ar/buscador/img/Programas/3772835.jpg',
categories: ['Cultural']
})
})

View File

@ -23,7 +23,7 @@ module.exports = {
title: item.title,
description: parseDescription(detail),
category: parseCategory(detail),
icon: parseIcon(item),
image: parseImage(item),
start: parseStart(item),
stop: parseStop(item)
})
@ -70,7 +70,7 @@ function parseDescription(detail) {
function parseCategory(detail) {
return detail.detail.informations.subGenre || null
}
function parseIcon(item) {
function parseImage(item) {
return item.URLImage || item.URLImageDefault
}

View File

@ -149,7 +149,8 @@ it('can parse response', done => {
start: '2022-08-17T23:55:00.000Z',
stop: '2022-08-18T00:40:00.000Z',
title: 'New Amsterdam - S3 - Ep7',
icon: 'https://service.canal-overseas.com/image-api/v1/image/52a18a209e28380b199201961c27097e',
image:
'https://service.canal-overseas.com/image-api/v1/image/52a18a209e28380b199201961c27097e',
category: 'Série Hôpital',
description:
"C'est la journée nationale de dépistage du VIH et Max offre des soins gratuits à tous les malades séropositifs qui se présentent à New Amsterdam."

View File

@ -32,7 +32,7 @@ module.exports = {
programs.push({
title: item.title,
description: parseDescription(info),
icon: parseIcon(info),
image: parseImage(info),
actors: parseCast(info, 'Avec :'),
director: parseCast(info, 'De :'),
writer: parseCast(info, 'Scénario :'),
@ -123,7 +123,7 @@ function parseStart(item) {
return item && item.startTime ? dayjs(item.startTime) : null
}
function parseIcon(info) {
function parseImage(info) {
return info ? info.URLImage : null
}

View File

@ -96,7 +96,8 @@ it('can parse response', done => {
title: 'Le cercle',
description:
"Tant qu'il y aura du cinéma, LE CERCLE sera là. C'est la seule émission télévisée de débats critiques 100% consacrée au cinéma et elle rentre dans sa 18e saison. Chaque semaine, elle offre des joutes enflammées, joyeuses et sans condescendance, sur les films à l'affiche ; et invite avec \"Le questionnaire du CERCLE\" les réalisatrices et réalisateurs à venir partager leur passion cinéphile.",
icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107297573',
image:
'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107297573',
presenter: ['Lily Bloom'],
rating: {
system: 'CSA',
@ -109,7 +110,8 @@ it('can parse response', done => {
title: 'Illusions perdues',
description:
"Pendant la Restauration, Lucien de Rubempré, jeune provincial d'Angoulême, se rêve poète. Il débarque à Paris en quête de gloire. Il a le soutien de Louise de Bargeton, une aristocrate qui croit en son talent. Pour gagner sa vie, Lucien trouve un emploi dans le journal dirigé par le peu scrupuleux Etienne Lousteau...",
icon: 'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107356485',
image:
'https://thumb.canalplus.pro/http/unsafe/{resolutionXY}/filters:quality({imageQualityPercentage})/img-hapi.canalplus.pro:80/ServiceImage/ImageID/107356485',
director: ['Xavier Giannoli'],
actors: [
'Benjamin Voisin',

View File

@ -19,7 +19,7 @@ module.exports = {
title: item.season?.serie?.title ? item.season.serie.title : item.title,
category: item.genreDetailed,
description: item.synopsis,
icon: parseIcon(item),
image: parseImage(item),
start: start.toJSON(),
stop: stop.toJSON()
})
@ -49,7 +49,7 @@ module.exports = {
}
}
function parseIcon(item) {
function parseImage(item) {
return item.covers && item.covers.length ? item.covers[0].url : null
}

View File

@ -30,7 +30,7 @@ it('can parse response', () => {
description:
"Un tueur en série prend un plaisir pervers à prévenir les autorités de Tallahassee avant chaque nouveau meurtre. Rossi apprend le décès d'un de ses vieux amis.",
category: 'Série Suspense',
icon: 'https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg'
image: 'https://proxymedia.woopic.com/340/p/169_EMI_9697669.jpg'
}
])
})

View File

@ -26,7 +26,7 @@ module.exports = {
description: details.longSynopsis || details.shortSynopsis,
actors: parseList(details.cast),
directors: parseList(details.director),
icon: details.imageUrl,
image: details.imageUrl,
rating: parseRating(details),
categories: parseCategories(details),
episode: parseEpisode(item),

View File

@ -52,7 +52,7 @@ it('can parse response', async () => {
'This classic drama depicts the many aspects of two complicated relationships set against an airline company. Will those involved ever find true love?',
actors: ['Francis Ng Chun Yu', 'Joe Ma Tak Chung', 'Flora Chan Wai San'],
directors: ['Joe Ma Tak Chung'],
icon: 'https://s3-ap-southeast-1.amazonaws.com/ams-astro/production/images/1035X328883.jpg',
image: 'https://s3-ap-southeast-1.amazonaws.com/ams-astro/production/images/1035X328883.jpg',
rating: {
system: 'LPF',
value: 'U'

View File

@ -38,7 +38,7 @@ module.exports = {
category: item.subcategoryList,
season: item.seasonNumber,
episode: item.episodeNumber,
icon: parseIcon(item),
image: parseImage(item),
start,
stop
})
@ -92,7 +92,7 @@ function parseRating(item) {
}
: null
}
function parseIcon(item) {
function parseImage(item) {
return item.primaryImageUrl ? `https://www.directv.com${item.primaryImageUrl}` : null
}
function loadProgramDetail(programID) {

View File

@ -56,7 +56,7 @@ it('can parse response', done => {
description:
'Kay (Tommy Lee Jones) and Jay (Will Smith) reunite to provide our best line of defense against a seductress who levels the toughest challenge yet to the MIBs mission statement: protecting the earth from the scum of the universe. While investigating a routine crime, Jay uncovers a plot masterminded by Serleena (Boyle), a Kylothian monster who disguises herself as a lingerie model. When Serleena takes the MIB building hostage, there is only one person Jay can turn to -- his former MIB partner.',
date: '2002',
icon: 'https://www.directv.com/db_photos/movies/AllPhotosAPGI/29160/29160_aa.jpg',
image: 'https://www.directv.com/db_photos/movies/AllPhotosAPGI/29160/29160_aa.jpg',
category: ['Comedy', 'Movies Anywhere', 'Action/Adventure', 'Science Fiction'],
rating: {
system: 'MPA',
@ -69,7 +69,8 @@ it('can parse response', done => {
title: 'South Park',
sub_title: 'Goth Kids 3: Dawn of the Posers',
description: 'The goth kids are sent to a camp for troubled children.',
icon: 'https://www.directv.com/db_photos/showcards/v5/AllPhotos/184338/p184338_b_v5_aa.jpg',
image:
'https://www.directv.com/db_photos/showcards/v5/AllPhotos/184338/p184338_b_v5_aa.jpg',
category: ['Series', 'Animation', 'Comedy'],
season: 17,
episode: 4,

View File

@ -34,7 +34,7 @@ module.exports = {
programs.push({
title: item.title,
description: item.desc,
icon: item.programmeurl,
image: item.programmeurl,
category: item.subgenre,
start: parseStart(item),
stop: parseStop(item)

View File

@ -49,7 +49,8 @@ it('can parse response', () => {
title: 'Imlie',
description:
'Imlie finds herself in deep trouble when she gets tied up before the wedding. Meanwhile, Aryan assumes that he is getting married to Imlie and performs the wedding rituals.',
icon: 'http://imagesstartv.whatsonindia.com/dasimages/landscape/360x270/59A9215E5DE13ABF4B05C59A6C87768AD61CA608M.jpg',
image:
'http://imagesstartv.whatsonindia.com/dasimages/landscape/360x270/59A9215E5DE13ABF4B05C59A6C87768AD61CA608M.jpg',
category: 'Drama'
}
])

View File

@ -35,7 +35,7 @@ module.exports = {
programs.push({
title: item.Title,
description: parseDescription(details),
icon: parseIcon(details),
image: parseImage(details),
category: parseCategory(details),
start: parseTime(item.StartTime, channel),
stop: parseTime(item.EndTime, channel)
@ -178,7 +178,7 @@ function parseDescription(details) {
return details ? details.Synopsis : null
}
function parseIcon(details) {
function parseImage(details) {
return details ? details.ThumbnailUri : null
}

View File

@ -60,7 +60,8 @@ it('can parse response for ZA', async () => {
title: 'UFC FN HL: Nzechukwu v Cutelaba',
description:
"'UFC Fight Night Highlights - Heavyweight Bout: Kennedy Nzechukwu vs Ion Cutelaba'. From The UFC APEX Center - Las Vegas, USA.",
icon: 'https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/271546_UFC Fight Night.png',
image:
'https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/271546_UFC Fight Night.png',
category: ['All Sport', 'Mixed Martial Arts']
})
})
@ -91,7 +92,8 @@ it('can parse response for NG', async () => {
title: 'UFC FN HL: Nzechukwu v Cutelaba',
description:
"'UFC Fight Night Highlights - Heavyweight Bout: Kennedy Nzechukwu vs Ion Cutelaba'. From The UFC APEX Center - Las Vegas, USA.",
icon: 'https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/271546_UFC Fight Night.png',
image:
'https://03mcdecdnimagerepository.blob.core.windows.net/epguideimage/img/271546_UFC Fight Night.png',
category: ['All Sport', 'Mixed Martial Arts']
})
})

View File

@ -28,7 +28,7 @@ module.exports = {
title: parseTitle(item),
description: parseDescription(item),
category: parseCategory(item),
icon: parseIcon(item),
image: parseImage(item),
start,
stop
})
@ -62,7 +62,7 @@ module.exports = {
}
}
function parseIcon(item) {
function parseImage(item) {
const $ = cheerio.load(item)
const imgSrc =
$('.row > div.columns.small-3.large-1 > a > img').data('src') ||

View File

@ -35,7 +35,8 @@ it('can parse response (en)', () => {
start: '2022-08-27T14:25:00.000Z',
stop: '2022-08-27T15:15:00.000Z',
title: 'Station 19 S5',
icon: 'https://media.elcinema.com/uploads/_150x200_ec30d1a2251c8edf83334be4860184c74d2534d7ba508a334ad66fa59acc4926.jpg',
image:
'https://media.elcinema.com/uploads/_150x200_ec30d1a2251c8edf83334be4860184c74d2534d7ba508a334ad66fa59acc4926.jpg',
category: 'Series'
})
})
@ -52,7 +53,8 @@ it('can parse response (ar)', () => {
start: '2022-08-27T14:25:00.000Z',
stop: '2022-08-27T15:15:00.000Z',
title: 'Station 19 S5',
icon: 'https://media.elcinema.com/uploads/_150x200_ec30d1a2251c8edf83334be4860184c74d2534d7ba508a334ad66fa59acc4926.jpg',
image:
'https://media.elcinema.com/uploads/_150x200_ec30d1a2251c8edf83334be4860184c74d2534d7ba508a334ad66fa59acc4926.jpg',
category: 'مسلسل'
})
})

View File

@ -27,7 +27,7 @@ module.exports = {
title: parseTitle($item),
description: parseDescription($item),
categories: parseCategories($item),
icon: parseIcon($item),
image: parseImage($item),
start,
stop
})
@ -54,7 +54,7 @@ module.exports = {
}
}
function parseIcon($item) {
function parseImage($item) {
return $item('.text-holder > .btn-hold > .btn-wrap > a.btn-share').data('img')
}

View File

@ -31,7 +31,8 @@ it('can parse response', () => {
stop: '2023-06-29T08:00:00.000Z',
title: 'EuroNews',
description: 'European and international headlines live via satellite',
icon: 'https://img.resized.co/entertainment/eyJkYXRhIjoie1widXJsXCI6XCJodHRwczpcXFwvXFxcL3R2LmFzc2V0cy5wcmVzc2Fzc29jaWF0aW9uLmlvXFxcLzcxZDdkYWY2LWQxMjItNTliYy1iMGRjLTFkMjc2ODg1MzhkNC5qcGdcIixcIndpZHRoXCI6NDgwLFwiaGVpZ2h0XCI6Mjg4LFwiZGVmYXVsdFwiOlwiaHR0cHM6XFxcL1xcXC9lbnRlcnRhaW5tZW50LmllXFxcL2ltYWdlc1xcXC9uby1pbWFnZS5wbmdcIn0iLCJoYXNoIjoiZDhjYzA0NzFhMGZhOTI1Yjc5ODI0M2E3OWZjMGI2ZGJmMDIxMjllNyJ9/71d7daf6-d122-59bc-b0dc-1d27688538d4.jpg',
image:
'https://img.resized.co/entertainment/eyJkYXRhIjoie1widXJsXCI6XCJodHRwczpcXFwvXFxcL3R2LmFzc2V0cy5wcmVzc2Fzc29jaWF0aW9uLmlvXFxcLzcxZDdkYWY2LWQxMjItNTliYy1iMGRjLTFkMjc2ODg1MzhkNC5qcGdcIixcIndpZHRoXCI6NDgwLFwiaGVpZ2h0XCI6Mjg4LFwiZGVmYXVsdFwiOlwiaHR0cHM6XFxcL1xcXC9lbnRlcnRhaW5tZW50LmllXFxcL2ltYWdlc1xcXC9uby1pbWFnZS5wbmdcIn0iLCJoYXNoIjoiZDhjYzA0NzFhMGZhOTI1Yjc5ODI0M2E3OWZjMGI2ZGJmMDIxMjllNyJ9/71d7daf6-d122-59bc-b0dc-1d27688538d4.jpg',
categories: ['Factual']
})
@ -40,7 +41,8 @@ it('can parse response', () => {
stop: '2023-06-30T06:00:00.000Z',
title: 'EuroNews',
description: 'European and international headlines live via satellite',
icon: 'https://img.resized.co/entertainment/eyJkYXRhIjoie1widXJsXCI6XCJodHRwczpcXFwvXFxcL3R2LmFzc2V0cy5wcmVzc2Fzc29jaWF0aW9uLmlvXFxcLzcxZDdkYWY2LWQxMjItNTliYy1iMGRjLTFkMjc2ODg1MzhkNC5qcGdcIixcIndpZHRoXCI6NDgwLFwiaGVpZ2h0XCI6Mjg4LFwiZGVmYXVsdFwiOlwiaHR0cHM6XFxcL1xcXC9lbnRlcnRhaW5tZW50LmllXFxcL2ltYWdlc1xcXC9uby1pbWFnZS5wbmdcIn0iLCJoYXNoIjoiZDhjYzA0NzFhMGZhOTI1Yjc5ODI0M2E3OWZjMGI2ZGJmMDIxMjllNyJ9/71d7daf6-d122-59bc-b0dc-1d27688538d4.jpg',
image:
'https://img.resized.co/entertainment/eyJkYXRhIjoie1widXJsXCI6XCJodHRwczpcXFwvXFxcL3R2LmFzc2V0cy5wcmVzc2Fzc29jaWF0aW9uLmlvXFxcLzcxZDdkYWY2LWQxMjItNTliYy1iMGRjLTFkMjc2ODg1MzhkNC5qcGdcIixcIndpZHRoXCI6NDgwLFwiaGVpZ2h0XCI6Mjg4LFwiZGVmYXVsdFwiOlwiaHR0cHM6XFxcL1xcXC9lbnRlcnRhaW5tZW50LmllXFxcL2ltYWdlc1xcXC9uby1pbWFnZS5wbmdcIn0iLCJoYXNoIjoiZDhjYzA0NzFhMGZhOTI1Yjc5ODI0M2E3OWZjMGI2ZGJmMDIxMjllNyJ9/71d7daf6-d122-59bc-b0dc-1d27688538d4.jpg',
categories: ['Factual']
})
})

View File

@ -16,7 +16,7 @@ module.exports = {
title: item.program.title,
description: item.program.longDescription,
category: item.program.subType,
icon: parseIcon(item),
image: parseImage(item),
start: parseStart(item),
stop: parseStop(item)
})
@ -26,7 +26,7 @@ module.exports = {
}
}
function parseIcon(item) {
function parseImage(item) {
const uri = item.program.preferredImage.uri
return uri ? `https://adma.tmsimg.com/assets/${uri}` : null

View File

@ -33,7 +33,7 @@ it('can parse response', () => {
stop: '2023-01-19T06:00:00.000Z',
title: 'The Greg Peterson Experience',
category: 'Sports non-event',
icon: 'https://adma.tmsimg.com/assets/assets/p20628892_b_v13_aa.jpg?w=270&h=360',
image: 'https://adma.tmsimg.com/assets/assets/p20628892_b_v13_aa.jpg?w=270&h=360',
description: 'A different kind of sports betting.'
})
})

View File

@ -34,7 +34,7 @@ module.exports = {
programs.push({
title: parseTitle($item),
sub_title: parseSubTitle($item),
icon: parseIcon($item),
image: parseImage($item),
rating: parseRating($item),
season: parseSeason($item),
episode: parseEpisode($item),
@ -87,7 +87,7 @@ function parseEpisode($item) {
return episode ? parseInt(episode) : null
}
function parseIcon($item) {
function parseImage($item) {
return $item('.epg-event-thumbnail > img').attr('src')
}

View File

@ -41,7 +41,8 @@ it('can parse response', () => {
stop: '2022-11-07T13:30:00.000Z',
title: 'The Equalizer',
sub_title: 'Glory',
icon: 'https://images1.resources.foxtel.com.au/store2/mount1/16/3/69e0v.jpg?maxheight=90&limit=91aa1c7a2c485aeeba0706941f79f111adb35830',
image:
'https://images1.resources.foxtel.com.au/store2/mount1/16/3/69e0v.jpg?maxheight=90&limit=91aa1c7a2c485aeeba0706941f79f111adb35830',
rating: {
system: 'ACB',
value: 'M'

View File

@ -30,7 +30,7 @@ module.exports = {
programs.push({
title: parseTitle($item),
description: parseDescription($item),
icon: parseIcon($item),
image: parseImage($item),
start,
stop
})
@ -62,14 +62,16 @@ module.exports = {
}
function parseTitle($item) {
return $item('td:nth-child(4) > div > div > a > span,td:nth-child(3) > div > div > span,td:nth-child(3) > div > div > a > span').text()
return $item(
'td:nth-child(4) > div > div > a > span,td:nth-child(3) > div > div > span,td:nth-child(3) > div > div > a > span'
).text()
}
function parseDescription($item) {
return $item('td:nth-child(4) > div').clone().children().remove().end().text().trim()
}
function parseIcon($item) {
function parseImage($item) {
return $item('td:nth-child(3) > a > img').attr('src')
}

View File

@ -24,7 +24,7 @@ module.exports = {
start: parseStart(item),
stop: parseStop(item),
url: parseURL(item),
icon: parseIcon(item)
image: parseImage(item)
})
})
@ -79,7 +79,7 @@ function parseURL(item) {
return item.content.url ? `https://guidatv.sky.it${item.content.url}` : null
}
function parseIcon(item) {
function parseImage(item) {
const cover = item.content.imagesMap ? item.content.imagesMap.find(i => i.key === 'cover') : null
return cover && cover.img && cover.img.url ? `https://guidatv.sky.it${cover.img.url}` : null

View File

@ -35,7 +35,8 @@ it('can parse response', () => {
"S6 Ep26 La resa dei conti - Fino all'ultimo la sfida tra Ardenzi e Carrano, nemici di vecchia data, riserva clamorosi colpi di scena. E si scopre che non e' tutto come sembrava.",
season: 6,
episode: 26,
icon: 'https://guidatv.sky.it/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b',
image:
'https://guidatv.sky.it/uuid/77c630aa-4744-44cb-a88e-3e871c6b73d9/cover?md5ChecksumParam=61135b999a63e3d3f4a933b9edeb0c1b',
category: 'Intrattenimento/Fiction',
url: 'https://guidatv.sky.it/serie-tv/distretto-di-polizia/stagione-6/episodio-26/77c630aa-4744-44cb-a88e-3e871c6b73d9'
}

View File

@ -23,7 +23,7 @@ module.exports = {
programs.push({
title: item.show.title,
description: item.show.body,
icon: parseIcon(item),
image: parseImage(item),
start: parseStart(item, date),
stop: parseStop(item, date)
})
@ -33,7 +33,7 @@ module.exports = {
}
}
function parseIcon(item) {
function parseImage(item) {
return item.show.image ? item.show.image.href : null
}

View File

@ -30,7 +30,8 @@ it('can parse response', () => {
stop: '2022-03-06T13:28:00.000Z',
title: 'تغطية خاصة',
description: 'Special Edition',
icon: 'https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png'
image:
'https://cdn.i24news.tv/uploads/a1/be/85/20/69/6f/32/1c/ed/b0/f8/5c/f6/1c/40/f9/a1be8520696f321cedb0f85cf61c40f9.png'
}
])
})

View File

@ -23,7 +23,7 @@ module.exports = {
programs.push({
title: item.title,
description: item.description,
icon: getIcon(item),
image: getImage(item),
start: getStart(item),
stop: getStop(item)
})
@ -52,7 +52,7 @@ module.exports = {
}
}
function getIcon(item) {
function getImage(item) {
const image = item.images.find(i => i.type === 'default' && i.sizeTag === '1200x630')
return image ? image.url : null

View File

@ -33,7 +33,8 @@ it('can parse response', () => {
title: 'Puoli seitsemän',
description:
'Vieraana näyttelijä Elias Salonen. Puoli seiskassa vietetään sekä halloweeniä että joulua, kun Olli-Pekka tapaa todellisen jouluttajan. Juontajina Anniina Valtonen, Tuulianna Tola ja Olli-Pekka Kursi.',
icon: 'https://thumbor.prod.telkku.com/YTglotoUl7aJtzPtYnvM9tH03sY=/1200x630/smart/filters:quality(86):format(jpeg)/img.prod.telkku.com/program-images/0f885238ac16ce167a9d80eace450254.jpg'
image:
'https://thumbor.prod.telkku.com/YTglotoUl7aJtzPtYnvM9tH03sY=/1200x630/smart/filters:quality(86):format(jpeg)/img.prod.telkku.com/program-images/0f885238ac16ce167a9d80eace450254.jpg'
})
})

View File

@ -35,7 +35,7 @@ module.exports = {
title: parseTitle($item),
sub_title: parseSubTitle($item),
description: parseDescription($item),
icon: parseIcon($item),
image: parseImage($item),
rating: parseRating($item),
start,
stop
@ -50,7 +50,7 @@ function parseDescription($item) {
return $item('.panel-body > div > div > div > p:nth-child(2)').text().trim()
}
function parseIcon($item) {
function parseImage($item) {
return $item('.video-thumbnail img').attr('src')
}

View File

@ -29,7 +29,8 @@ it('can parse response', () => {
stop: '2022-11-08T11:00:00.000Z',
title: 'All For Nothing?',
sub_title: '226 : Randy & Sarita Vs. Jean-marcel & Melodie',
icon: 'https://ionplustv.com/static/programs/shows/all-for-nothing/show-banner-all-for-nothing-5ab162f2d8ee6-897aca6d7d9a7d4e2026ca3b592d8b2a047238fa.png',
image:
'https://ionplustv.com/static/programs/shows/all-for-nothing/show-banner-all-for-nothing-5ab162f2d8ee6-897aca6d7d9a7d4e2026ca3b592d8b2a047238fa.png',
rating: {
system: 'MPA',
value: 'TV-PG+L'

View File

@ -22,7 +22,7 @@ module.exports = {
programs.push({
title: item.title,
description: item.live_desc,
icon: item.picture_code,
image: item.picture_code,
start: parseStart(item),
stop: parseStop(item)
})

View File

@ -33,7 +33,7 @@ it('can parse response', () => {
title: 'ארץ מולדת - בין תורכיה לבריטניה',
description:
"קבוצת תלמידים מתארגנת בפרוץ מלחמת העולם הראשונה להגיש עזרה לישוב. באמצעות התלמידים לומד הצופה על בעיותיו של הישוב בתקופת המלחמה, והתלבטותו בין נאמנות לשלטון העות'מאני לבין תקוותיו מהבריטים הכובשים.",
icon: 'https://kanweb.blob.core.windows.net/download/pictures/2021/1/20/imgid=45847_Z.jpeg'
image: 'https://kanweb.blob.core.windows.net/download/pictures/2021/1/20/imgid=45847_Z.jpeg'
}
])
})

View File

@ -35,7 +35,7 @@ module.exports = {
if (prev) prev.stop = start
programs.push({
title: item.Program.Name,
icon: item.Program.Images,
image: item.Program.Images,
category: item.Program.Genres,
start,
stop

View File

@ -42,14 +42,15 @@ it('can parse response', () => {
start: '2022-03-14T23:15:00.000Z',
stop: '2022-03-15T00:00:00.000Z',
title: 'WEEKLY FILMS AND STARS, EP740',
icon: 'https://img.kplus.vn/images?filename=Media/HDVN/2022_02/ENT_DOC_LNO_21_2649421_2652183_2652183.jpg',
image:
'https://img.kplus.vn/images?filename=Media/HDVN/2022_02/ENT_DOC_LNO_21_2649421_2652183_2652183.jpg',
category: 'Documentary'
},
{
start: '2022-03-15T00:00:00.000Z',
stop: '2022-03-15T01:00:00.000Z',
title: 'ST. VINCENT',
icon: 'https://img.kplus.vn/images?filename=Media/HDVN/2020_05/MOV_COM__2632318_2632318.jpg',
image: 'https://img.kplus.vn/images?filename=Media/HDVN/2020_05/MOV_COM__2632318_2632318.jpg',
category: 'Comedy'
}
])

View File

@ -30,7 +30,7 @@ module.exports = {
actors: item.program.actor,
start: parseStart(item),
stop: parseStop(item),
icon: parseIcon(item)
image: parseImage(item)
})
})
@ -63,7 +63,7 @@ module.exports = {
}
}
function parseIcon(item) {
function parseImage(item) {
return item.program.image.length ? `https://image.tving.com${item.program.image[0].url}` : null
}

View File

@ -30,7 +30,7 @@ it('can parse response', () => {
expect(results[0]).toMatchObject({
title: '외계+인 1부',
description: '외계+인 1부',
icon: 'https://image.tving.com/upload/cms/caip/CAIP0200/P001661154.jpg',
image: 'https://image.tving.com/upload/cms/caip/CAIP0200/P001661154.jpg',
date: 2022,
categories: [],
directors: ['최동훈'],

View File

@ -20,7 +20,7 @@ module.exports = {
programs.push({
title: item.ProgramName,
description: item.EventDescription,
icon: item.Picture,
image: item.Picture,
start,
stop
})

View File

@ -26,7 +26,7 @@ it('can parse response', () => {
stop: '2022-03-07T00:39:00.000Z',
title: 'רוקדים עם כוכבים - בר זומר',
description: 'מהדורת החדשות המרכזית של הבוקר, האנשים הפרשנויות והכותרות שיעשו את היום.',
icon: 'https://img.mako.co.il/2022/02/13/DancingWithStars2022_EPG.jpg'
image: 'https://img.mako.co.il/2022/02/13/DancingWithStars2022_EPG.jpg'
}
])
})

View File

@ -22,7 +22,7 @@ module.exports = {
title: item.title,
category: item.category,
description: parseDescription(item),
icon: parseIcon(item),
image: parseImage(item),
start: parseStart(item),
stop: parseStop(item)
})
@ -60,7 +60,7 @@ function parseDescription(item) {
return typeof item.desc === 'string' ? item.desc : null
}
function parseIcon(item) {
function parseImage(item) {
return item.icon['@attributes'].src
}

View File

@ -34,7 +34,8 @@ it('can parse response', () => {
category: 'Останато',
description:
'Екстремниот рибар, Џереми Вејд, е во потрага по слатководни риби кои јадат човечко месо. Со форензички методи, Џереми им илустрира на гледачите како овие нови чудовишта се создадени да убиваат.',
icon: 'https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1'
image:
'https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1'
}
])
})
@ -55,7 +56,8 @@ it('can parse response with no description', () => {
title: 'Палмето - игран филм',
category: 'Останато',
description: null,
icon: 'https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1'
image:
'https://prd-static-mkt.spectar.tv/rev-1636968170/image_transform.php/transform/1/epg_program_id/21949063/instance_id/1'
}
])
})

View File

@ -34,7 +34,7 @@ module.exports = {
programs.push({
title: parseTitle($item),
description: parseDescription($item),
icon: parseIcon($item),
image: parseImage($item),
start,
stop
})
@ -69,13 +69,13 @@ function parseDescription($item) {
return $item('.program_about > .program_description > p').text().trim()
}
function parseIcon($item) {
function parseImage($item) {
const backgroundImage = $item('.program_about > .program_photo').css('background-image')
if (!backgroundImage) return null
const [, icon] = backgroundImage.match(/url\('(.*)'\)/) || [null, null]
if (!icon) return null
const [, imageUrl] = backgroundImage.match(/url\('(.*)'\)/) || [null, null]
if (!imageUrl) return null
return `https:${icon}`
return `https:${imageUrl}`
}
function parseItems(content) {

View File

@ -49,7 +49,8 @@ it('can parse response', () => {
title: 'A hegyi doktor - I. évad',
description:
'Maxl iskolatársának, Vroninak az anyja egy autóbalesetben meghal. A 20 éves testvér, Vinzenz magához szeretné venni a lányt, ám a gyámüggyel problémái akadnak, ezért megpróbálja elszöktetni.(Eredeti hang digitálisan.)',
icon: 'https://mediaklikk.hu/wp-content/uploads/sites/4/2019/10/A-hegyi-doktor-I-évad-e1571318391226-150x150.jpg'
image:
'https://mediaklikk.hu/wp-content/uploads/sites/4/2019/10/A-hegyi-doktor-I-évad-e1571318391226-150x150.jpg'
})
expect(results[56]).toMatchObject({

View File

@ -18,7 +18,7 @@ module.exports = {
programs.push({
title: item.title,
description: item.shortSynopsis,
icon: parseIcon(item),
image: parseImage(item),
category: item.tags,
season: item.season,
episode: item.episode,
@ -59,7 +59,7 @@ function parseStop(item) {
return dayjs(item.published.end)
}
function parseIcon(item) {
function parseImage(item) {
return item.posterImage ? item.posterImage + '?form=epg-card-6' : null
}

View File

@ -35,7 +35,8 @@ it('can parse response', () => {
'Symphony of Illumination - Robin gets some bad news and decides to keep it to herself. Marshall decorates the house.',
season: 7,
episode: 12,
icon: 'https://androme.melitacable.com/media/images/epg/bc/07/p8953134_e_h10_ad.jpg?form=epg-card-6',
image:
'https://androme.melitacable.com/media/images/epg/bc/07/p8953134_e_h10_ad.jpg?form=epg-card-6',
category: ['comedy']
}
])

View File

@ -16,7 +16,7 @@ module.exports = {
programs.push({
title: info.title,
description: info.description,
icon: info.images.tile,
image: info.images.tile,
episode: info.episodeNumber,
season: info.seasonNumber,
start: parseStart(item),

View File

@ -33,7 +33,8 @@ it('can parse response', () => {
title: 'Open Homes S3 - EP 2',
description:
'Mike heads down to the Sydney beaches to visit a beachside renovation with all the bells and whistles, we see a kitchen tip and recipe anyone can do at home. We finish up in the prestigious Byron bay to visit a multi million dollar award winning home.',
icon: "https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all",
image:
"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853697'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all",
episode: 2,
season: 3,
rating: {

View File

@ -34,7 +34,7 @@ module.exports = {
title: parseTitle($item),
category: parseCategory($item),
description: parseDescription($item),
icon: parseIcon($item),
image: parseImage($item),
start,
stop
})
@ -93,11 +93,11 @@ function parseDescription($item) {
return $item('a > div.content > p.synopsis').text().trim()
}
function parseIcon($item) {
function parseImage($item) {
const backgroundImage = $item('a > div.image-parent > div.image').css('background-image')
const [, icon] = backgroundImage.match(/url\('(.*)'\)/) || [null, null]
const [, image] = backgroundImage.match(/url\('(.*)'\)/) || [null, null]
return icon
return image
}
function parseItems(content) {

View File

@ -33,7 +33,7 @@ it('can parse response', () => {
title: 'Trasnoche de 24/7',
category: 'Interés general',
description: 'Lo más visto de la semana en nuestra pantalla.',
icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg'
image: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg'
},
{
start: '2021-11-24T23:00:00.000Z',
@ -42,7 +42,7 @@ it('can parse response', () => {
category: 'Noticiero',
description:
'Cerramos el día con un completo resumen de los temas más relevantes con columnistas y análisis especiales para terminar el día.',
icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg'
image: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg'
},
{
start: '2021-11-25T01:00:00.000Z',
@ -51,7 +51,7 @@ it('can parse response', () => {
category: 'Cultural',
description:
'La energía tiene mucho para mostrar. Este programa reúne a las principales empresas y protagonistas de la actividad que esta revolucionando la región.',
icon: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg'
image: 'https://cdn.mitvstatic.com/programs/fallback_other_l_m.jpg'
}
])
})

View File

@ -34,7 +34,7 @@ module.exports = {
title: parseTitle($item),
description: parseDescription($item),
category: parseCategory($item),
icon: parseIcon($item),
image: parseImage($item),
start,
stop
})
@ -85,7 +85,7 @@ function parseCategory($item) {
return $item('.type').text().trim()
}
function parseIcon($item) {
function parseImage($item) {
return $item('.image img').data('src')
}

View File

@ -32,7 +32,7 @@ it('can parse response', () => {
stop: '2023-01-19T05:55:00.000Z',
title: 'LN Matin',
category: 'Magazine Actualité',
icon: 'https://dnsmptv-img.pragma-consult.be/imgs/picto/132/Reportage_1.jpg'
image: 'https://dnsmptv-img.pragma-consult.be/imgs/picto/132/Reportage_1.jpg'
})
expect(results[1]).toMatchObject({
@ -40,7 +40,7 @@ it('can parse response', () => {
stop: '2023-01-19T06:00:00.000Z',
title: 'Météo',
category: 'Météo',
icon: 'https://dnsmptv-img.pragma-consult.be/imgs/picto/132/Meteo.jpg'
image: 'https://dnsmptv-img.pragma-consult.be/imgs/picto/132/Meteo.jpg'
})
expect(results[8]).toMatchObject({
@ -49,7 +49,7 @@ it('can parse response', () => {
title: 'Le journal',
description: "L'information de la mi-journée avec des JT...",
category: 'Journal',
icon: 'https://dnsmptv-img.pragma-consult.be/imgs/picto/132/journal.jpg'
image: 'https://dnsmptv-img.pragma-consult.be/imgs/picto/132/journal.jpg'
})
})

View File

@ -26,7 +26,7 @@ module.exports = {
title: item.title,
description: item.description,
category: item.category,
icon: item.image,
image: item.image,
start: parseStart(item).toJSON(),
stop: parseStop(item).toJSON()
})

View File

@ -32,7 +32,7 @@ it('can parse response', () => {
start: '2021-11-09T22:29:00.000Z',
stop: '2021-11-09T23:46:00.000Z',
title: 'Šuma',
icon: 'https://mtel.ba/oec/images/epg/60881491.jpg',
image: 'https://mtel.ba/oec/images/epg/60881491.jpg',
description:
'Krajem decembra 1947. godine jugoslovenski predsjednik Josip Broz Tito prvi put je posjetio Rumuniju. Da bi učvrstili novo socijalističko prijateljstvo, rumunski zvaničnici su poklonili Titu sliku velikog rumunskog umjetnika Jona Andreskua pod nazivom Šuma. Mnogo godina kasnije ta slika je umješana u napetu špijunsku priču i otkriva tajnu koja će uzdrmati temelje i Jugoslavije i Rumunije. Film je svjedok kompleksnosti i raznovrsnosti glasova koji čine ono što zovemo stvarnošću.',
category: 'Televizijski film'

View File

@ -28,7 +28,7 @@ module.exports = {
title: item.title,
category: item.category,
description: item.description,
icon: item.image,
image: item.image,
start: parseStart(item),
stop: parseStop(item)
})

View File

@ -36,7 +36,8 @@ it('can parse response', () => {
stop: '2021-11-07T00:43:00.000Z',
title: 'Zaboravljeni zlo\u010din',
category: 'Bioskopski film',
icon: 'https://mts.rs/oec/images/epg/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg',
image:
'https://mts.rs/oec/images/epg/2_abb81cc24d8ce957eece50f991a31e59780e4e53_E7D8ECDE568E84E3C86CCDBDB647355E.jpg',
description:
'Novinarka-fotoreporter, D\u017ein, istra\u017euje okrutno i senzacionalno, nere\u0161eno ubistvo sekirom iz davne 1873. godine. Ubistvo koje koincidira sa nedavnim identi\u010dnim brutalnim dvostrukim ubistvom. Zaplet se odvija izme\u0111u pri\u010de o\u010devica iz toga doba - pri\u010de iz novinske arhive i D\u017einine privatne borbe sa ljubomorom i sumnjom koje prate njen brak.'
}

View File

@ -27,7 +27,7 @@ module.exports = {
programs.push({
title: parseTitle($item),
description: parseDescription($item),
icon: parseIcon($item),
image: parseImage($item),
start,
stop
})
@ -59,7 +59,7 @@ module.exports = {
}
}
function parseIcon($item) {
function parseImage($item) {
const imgSrc = $item('div.smartpe_screenshot > img').attr('src')
return imgSrc ? `https:${imgSrc}` : null

View File

@ -10,15 +10,20 @@ const headers = {
'X-Core-Contentratinglimit': '0',
'X-Core-Deviceid': '',
'X-Core-Devicetype': 'web',
'Origin': 'https://nostv.pt',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
Origin: 'https://nostv.pt',
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
module.exports = {
site: 'nostv.pt',
days: 2,
url({ channel, date }) {
return `https://tyr-prod.apigee.net/nostv/ott/schedule/range/contents/guest?channels=${channel.site_id}&minDate=${date.format('YYYY-MM-DD')}T00:00:00Z&maxDate=${date.format('YYYY-MM-DD')}T23:59:59Z&isDateInclusive=true&client_id=${headers['X-Apikey']}`
return `https://tyr-prod.apigee.net/nostv/ott/schedule/range/contents/guest?channels=${
channel.site_id
}&minDate=${date.format('YYYY-MM-DD')}T00:00:00Z&maxDate=${date.format(
'YYYY-MM-DD'
)}T23:59:59Z&isDateInclusive=true&client_id=${headers['X-Apikey']}`
},
request: { headers },
parser({ content }) {
@ -32,9 +37,9 @@ module.exports = {
description: item.Metadata?.Description,
season: item.Metadata?.Season,
episode: item.Metadata?.Episode,
icon: item.Images ?
`https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=${item.Images[0].Url}&profile=ott_1_452x340&client_id=${headers['X-Apikey']}` :
null,
image: item.Images
? `https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=${item.Images[0].Url}&profile=ott_1_452x340&client_id=${headers['X-Apikey']}`
: null,
start: dayjs.utc(item.UtcDateTimeStart),
stop: dayjs.utc(item.UtcDateTimeEnd)
})
@ -45,7 +50,10 @@ module.exports = {
},
async channels() {
const result = await axios
.get(`https://tyr-prod.apigee.net/nostv/ott/channels/guest?client_id=${headers['X-Apikey']}`, { headers })
.get(
`https://tyr-prod.apigee.net/nostv/ott/channels/guest?client_id=${headers['X-Apikey']}`,
{ headers }
)
.then(r => r.data)
.catch(console.error)

View File

@ -22,12 +22,11 @@ it('can generate valid url', () => {
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/data.json'))
const results = parser({ content })
.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
const results = parser({ content }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2023-12-11T16:30:00.000Z',
@ -37,7 +36,8 @@ it('can parse response', () => {
'A história de dois melhores amigos veterinários e o seu extraordinário trabalho na Austrália.',
season: 1,
episode: 12,
icon: 'https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=http://vip.pam.local.internal/PAM.Images/Store/8329ed1aec5d4c0faa2056972256ff9f&profile=ott_1_452x340&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI'
image:
'https://mage.stream.nos.pt/v1/nostv_mage/Images?sourceUri=http://vip.pam.local.internal/PAM.Images/Store/8329ed1aec5d4c0faa2056972256ff9f&profile=ott_1_452x340&client_id=xe1dgrShwdR1DVOKGmsj8Ut4QLlGyOFI'
})
})

View File

@ -27,7 +27,7 @@ module.exports = {
programs.push({
title: item.title,
description: item.description,
icon: parseIcon(item),
image: parseImage(item),
start,
stop
})
@ -55,7 +55,7 @@ function parseStart(item) {
return dayjs.tz(item.datetime, 'YYYY-MM-DD HH:mm:ss', 'Asia/Nicosia')
}
function parseIcon(item) {
function parseImage(item) {
return item.mediaItems.length ? item.mediaItems[0].CdnUrl : null
}

View File

@ -32,7 +32,8 @@ it('can parse response', () => {
stop: '2021-11-17T06:10:00.000Z',
title: 'Δεσμοί Αίματος',
description: 'Θρίλερ Μυστηρίου',
icon: 'http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg'
image:
'http://cache-forthnet.secure.footprint.net/linear/3/0/305608_COMMOBLOOX_GUIDE_STILL.jpg'
}
])
})

View File

@ -33,7 +33,7 @@ module.exports = {
programs.push({
title: details.main_title,
description: details.short_argument,
icon: parseIcon(details),
image: parseImage(details),
actors: parseActors(details),
rating: parseRating(details),
date: details.year,
@ -87,7 +87,7 @@ function parseActors(details) {
return details.actors.split(', ')
}
function parseIcon(details) {
function parseImage(details) {
return details.image ? `https://img-ns.s3.amazonaws.com/grid_data/${details.image}` : null
}

View File

@ -51,7 +51,7 @@ it('can parse response', async () => {
title: 'Jurassic World: Dominion',
description:
'Años después de la destrucción de Isla Nublar, los dinosaurios viven y cazan junto a los humanos. Este equilibrio determinará, si los humanos seguirán siendo los depredadores máximos en un planeta que comparten con las criaturas temibles.',
icon: 'https://img-ns.s3.amazonaws.com/grid_data/23354476.jpg',
image: 'https://img-ns.s3.amazonaws.com/grid_data/23354476.jpg',
date: '2022',
rating: {
system: 'MPAA',
@ -66,7 +66,7 @@ it('can parse response', async () => {
title: 'Black Adam',
description:
'Black Adam es liberado de su tumba casi cinco mil años después de haber sido encarcelado y recibir sus poderes de los antiguos dioses. Ahora está listo para desatar su forma única de justicia en el mundo.',
icon: 'https://img-ns.s3.amazonaws.com/grid_data/24638423.jpg',
image: 'https://img-ns.s3.amazonaws.com/grid_data/24638423.jpg',
date: '2022',
rating: {
system: 'MPAA',

View File

@ -2,33 +2,34 @@ const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
let apiVersion;
let isApiVersionFetched = false;
let apiVersion
let isApiVersionFetched = false
(async () => {
;(async () => {
try {
await fetchApiVersion();
isApiVersionFetched = true;
await fetchApiVersion()
isApiVersionFetched = true
} catch (error) {
console.error('Error during script initialization:', error);
console.error('Error during script initialization:', error)
}
})();
})()
dayjs.extend(utc)
module.exports = {
site: 'pickx.be',
days: 2,
apiVersion: function () {
return apiVersion;
return apiVersion
},
fetchApiVersion: fetchApiVersion, // Export fetchApiVersion
fetchApiVersion: fetchApiVersion, // Export fetchApiVersion
url: async function ({ channel, date }) {
while (!isApiVersionFetched) {
await new Promise(resolve => setTimeout(resolve, 100)); // Wait for 100 milliseconds
await new Promise(resolve => setTimeout(resolve, 100)) // Wait for 100 milliseconds
}
return `https://px-epg.azureedge.net/airings/${apiVersion}/${date.format('YYYY-MM-DD')}/channel/${channel.site_id}?timezone=Europe%2FBrussels`;
return `https://px-epg.azureedge.net/airings/${apiVersion}/${date.format(
'YYYY-MM-DD'
)}/channel/${channel.site_id}?timezone=Europe%2FBrussels`
},
request: {
headers: {
@ -45,10 +46,12 @@ module.exports = {
title: item.program.title,
sub_title: item.program.episodeTitle,
description: item.program.description,
category: item.program.translatedCategory?.[channel.lang] ?
item.program.translatedCategory[channel.lang] : item.program.category.split('.')[1],
icon: item.program.posterFileName ?
`https://experience-cache.proximustv.be/posterserver/poster/EPG/w-166_h-110/${item.program.posterFileName}` : null,
category: item.program.translatedCategory?.[channel.lang]
? item.program.translatedCategory[channel.lang]
: item.program.category.split('.')[1],
image: item.program.posterFileName
? `https://experience-cache.proximustv.be/posterserver/poster/EPG/w-166_h-110/${item.program.posterFileName}`
: null,
season: item.program.seasonNumber,
episode: item.program.episodeNumber,
actors: item.program.actors,
@ -61,19 +64,18 @@ module.exports = {
return programs
},
async channels({ lang = ''}) {
async channels({ lang = '' }) {
const query = {
operationName: 'getChannels',
variables: {
language: lang,
queryParams: {},
'id': '0',
id: '0',
params: {
shouldReadFromCache: true
}
},
query:
`query getChannels($language: String!, $queryParams: ChannelQueryParams, $id: String, $params: ChannelParams) {
query: `query getChannels($language: String!, $queryParams: ChannelQueryParams, $id: String, $params: ChannelParams) {
channels(language: $language, queryParams: $queryParams, id: $id, params: $params) {
id
channelReferenceNumber
@ -118,21 +120,25 @@ module.exports = {
.then(r => r.data)
.catch(console.error)
return result?.data?.channels
.filter(channel => !channel.radio && (!lang || channel.language === (lang === 'de' ? 'ger' : lang)))
.map(channel => {
return {
lang: channel.language === 'ger' ? 'de' : channel.language,
site_id: channel.id,
name: channel.name
}
}) || []
return (
result?.data?.channels
.filter(
channel =>
!channel.radio && (!lang || channel.language === (lang === 'de' ? 'ger' : lang))
)
.map(channel => {
return {
lang: channel.language === 'ger' ? 'de' : channel.language,
site_id: channel.id,
name: channel.name
}
}) || []
)
}
}
function fetchApiVersion() {
return new Promise(async (resolve, reject) => {
try {
// https://px-epg.azureedge.net/version is deprecated
// probably the version url will be changed around over time
@ -145,25 +151,26 @@ function fetchApiVersion() {
//const versionUrl = 'https://www.pickx.be/api/s-626d8fdabfb1d44e5a614cd69f4b45d6843fdb63566fc80ea4f97f40e4ea3152';
//the new strategy to break the provider is to leave old version url's available and to return invalid results on those endpoints
const versionUrl = 'https://www.pickx.be//api/s-cefaf96e249e53648c4895c279e7a621233c50b4357d62b0bdf6bff45f31b5c0';
const versionUrl =
'https://www.pickx.be//api/s-cefaf96e249e53648c4895c279e7a621233c50b4357d62b0bdf6bff45f31b5c0'
const response = await axios.get(versionUrl, {
headers: {
'Origin': 'https://www.pickx.be',
'Referer': 'https://www.pickx.be/'
Origin: 'https://www.pickx.be',
Referer: 'https://www.pickx.be/'
}
});
})
if (response.status === 200) {
apiVersion = response.data.version;
resolve();
apiVersion = response.data.version
resolve()
} else {
console.error(`Failed to fetch API version. Status: ${response.status}`);
reject(`Failed to fetch API version. Status: ${response.status}`);
console.error(`Failed to fetch API version. Status: ${response.status}`)
reject(`Failed to fetch API version. Status: ${response.status}`)
}
} catch (error) {
console.error('Error fetching API version:', error.message);
reject(error);
console.error('Error fetching API version:', error.message)
reject(error)
}
});
})
}

View File

@ -4,10 +4,8 @@ const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
dayjs.extend(utc)
const date = dayjs.utc('2023-12-13').startOf('d')
const channel = {
lang: 'fr',
@ -16,11 +14,13 @@ const channel = {
}
it('can generate valid url', async () => {
await fetchApiVersion();
const generatedUrl = await url({ channel, date });
const resolvedApiVersion = apiVersion();
expect(generatedUrl).toBe(`https://px-epg.azureedge.net/airings/${resolvedApiVersion}/2023-12-13/channel/UID0118?timezone=Europe%2FBrussels`);
});
await fetchApiVersion()
const generatedUrl = await url({ channel, date })
const resolvedApiVersion = apiVersion()
expect(generatedUrl).toBe(
`https://px-epg.azureedge.net/airings/${resolvedApiVersion}/2023-12-13/channel/UID0118?timezone=Europe%2FBrussels`
)
})
it('can generate valid request headers', () => {
expect(request.headers).toMatchObject({
@ -41,10 +41,10 @@ it('can parse response', () => {
start: '2023-12-12T23:55:00.000Z',
stop: '2023-12-13T00:15:00.000Z',
title: 'Le 22h30',
description:
'Le journal de vivre ici.',
description: 'Le journal de vivre ici.',
category: 'Info',
icon: 'https://experience-cache.proximustv.be/posterserver/poster/EPG/w-166_h-110/250_250_4B990CC58066A7B2A660AFA0BDDE5C41.jpg'
image:
'https://experience-cache.proximustv.be/posterserver/poster/EPG/w-166_h-110/250_250_4B990CC58066A7B2A660AFA0BDDE5C41.jpg'
})
})

View File

@ -24,7 +24,7 @@ module.exports = {
title: item.title,
description: item.summary,
categories: parseCategories(item),
icon: item.art,
image: item.art,
start: parseStart(item),
stop: parseStop(item)
})

View File

@ -43,7 +43,7 @@ it('can parse response', () => {
title: 'Violet & Daisy',
description:
'Two teenage assassins accept what they think will be a quick-and-easy job, until an unexpected target throws them off their plan.',
icon: 'https://provider-static.plex.tv/epg/images/ott_channels/arts/darkmatter-tv-about.jpg',
image: 'https://provider-static.plex.tv/epg/images/ott_channels/arts/darkmatter-tv-about.jpg',
categories: ['Movies']
})
})

View File

@ -31,7 +31,7 @@ module.exports = {
sub_title: details.episode_title,
description: details.episode_description || item.description,
category: parseCategory(details),
icon: parseIcon(details),
image: parseImage(details),
director: parseList(details.director),
actors: parseList(details.actors),
writer: parseList(details.script),
@ -70,7 +70,7 @@ function parseList(str) {
return typeof str === 'string' ? str.split(', ') : []
}
function parseIcon(details) {
function parseImage(details) {
const url = new URL(details.image, 'https://programacion-tv.elpais.com/')
return url.href

View File

@ -57,7 +57,7 @@ it('can parse response', async () => {
category: 'Ocio-Cultura/Cocina',
season: 1,
episode: 23,
icon: 'https://programacion-tv.elpais.com/imagenes/programas/2099957.jpg'
image: 'https://programacion-tv.elpais.com/imagenes/programas/2099957.jpg'
}
])
})

View File

@ -28,7 +28,7 @@ module.exports = {
date: item.year,
season: item.season_number,
episode: item.episode_number,
icon: parseIcon(item),
image: parseImage(item),
start: parseStart(item),
stop: parseStop(item)
})
@ -78,7 +78,7 @@ function parseCategories(item) {
.filter(Boolean)
}
function parseIcon(item) {
function parseImage(item) {
const uri = item.images[0] ? item.images[0].image_media.file : null
return uri ? `https:${uri}` : null

View File

@ -36,7 +36,7 @@ it('can parse response', () => {
season: 3,
episode: 3,
categories: [],
icon: 'https://zpapi.zetatv.com.uy/media/images/2b45d2675389f2e4f7f6fe0655ccc968.jpg',
image: 'https://zpapi.zetatv.com.uy/media/images/2b45d2675389f2e4f7f6fe0655ccc968.jpg',
description:
'Cada episodio relata un lugar y una historia diferente pero siguiendo la línea de una investigación basada en una leyenda la cual es guiada por una pareja. Estos dos personajes no son necesariamente ambos policías, pero se ven obligados a colaborar a pesar de los primeros informes difíciles.'
})
@ -48,7 +48,7 @@ it('can parse response', () => {
season: null,
episode: null,
categories: ['Drama'],
icon: 'https://zpapi.zetatv.com.uy/media/images/8cab42d88691edaa8a4001b91f809d91.jpg',
image: 'https://zpapi.zetatv.com.uy/media/images/8cab42d88691edaa8a4001b91f809d91.jpg',
description:
'Basada en la novela de Charles Dickens, cuenta la historia del pintor Finn que persigue obsesionado a su amor de la niñez, la bella y rica Estella. Gracias a un misterioso benefactor, Finn es enviado a Nueva York, donde se reúne con la hermosa y fría joven.'
})
@ -60,7 +60,7 @@ it('can parse response', () => {
season: null,
episode: null,
categories: ['Comedia', 'Drama'],
icon: 'https://zpapi.zetatv.com.uy/media/images/51684d91ed33cb9b0c1863b7a9b097e9.jpg',
image: 'https://zpapi.zetatv.com.uy/media/images/51684d91ed33cb9b0c1863b7a9b097e9.jpg',
description:
'Una pareja de lesbianas conciben a un niño y una niña por inseminacion artificial. Al paso del tiempo, los chicos deciden conocer a su verdadero padre a espaldas de sus madres. Tras localizarlo intentan integrar toda una familia. Podran lograrlo?.'
})

View File

@ -29,13 +29,13 @@ module.exports = {
items.forEach(item => {
const $item = cheerio.load(item)
const title = parseTitle($item)
const icon = parseIcon($item)
const image = parseImage($item)
const category = parseCategory($item)
const start = parseStart($item, date)
const duration = parseDuration($item)
const stop = start.add(duration, 'ms')
programs.push({ title, icon, category, start, stop })
programs.push({ title, image, category, start, stop })
})
return programs
@ -88,13 +88,13 @@ function parseDuration($item) {
return durationParser(duration)
}
function parseIcon($item) {
function parseImage($item) {
const img = $item('.mainBroadcastCard-imageContent').first().find('img')
const value = img.attr('srcset') || img.data('srcset')
const obj = value ? srcset.parse(value).find(i => i.width === 128) : {}
if (obj.url) {
obj.url = obj.url.replace('128x180', '960x540');
obj.url = obj.url.replace('128x180', '960x540')
}
return obj.url

View File

@ -39,7 +39,8 @@ it('can parse response', () => {
stop: '2023-11-27T05:30:00.000Z',
title: 'Programmes de la nuit',
category: 'Autre',
icon: 'https://www.programme-tv.net/imgre/fit/~2~program~978eb86d5b99cee0.jpg/960x540/quality/80/programmes-de-la-nuit.jpg'
image:
'https://www.programme-tv.net/imgre/fit/~2~program~978eb86d5b99cee0.jpg/960x540/quality/80/programmes-de-la-nuit.jpg'
})
expect(results[27]).toMatchObject({
@ -47,7 +48,8 @@ it('can parse response', () => {
stop: '2023-11-27T23:45:00.000Z',
title: 'Coup de foudre chez le Père Noël',
category: 'Téléfilm',
icon: 'https://www.programme-tv.net/imgre/fit/~2~program~5a4e78779c4a3fac.jpg/960x540/quality/80/coup-de-foudre-chez-le-pere-noel.jpg'
image:
'https://www.programme-tv.net/imgre/fit/~2~program~5a4e78779c4a3fac.jpg/960x540/quality/80/coup-de-foudre-chez-le-pere-noel.jpg'
})
})

View File

@ -35,7 +35,7 @@ module.exports = {
title: item.titreP,
description: item.desc,
category: item.categorieP,
icon: item.srcP,
image: item.srcP,
start: dayjs.unix(item.timestampDeb),
stop: dayjs.unix(item.timestampFin)
})

View File

@ -62,7 +62,8 @@ it('can parse response', done => {
category: 'Magazine',
description:
"Pour faire face à la crise du logement, aux loyers toujours plus élevés, à la solitude ou pour les gardes d'enfants, les colocations ont le vent en poupe, Pour mieux comprendre ce nouveau phénomène, une équipe a partagé le quotidien de quatre foyers : une retraitée qui héberge des étudiants, des mamans solos, enceintes, qui partagent un appartement associatif, trois générations de la même famille sur un domaine viticole et une étudiante qui intègre une colocation XXL.",
icon: 'https://programme-tv.vini.pf/sites/default/files/img-icones/52ada51ed86b7e7bc11eaee83ff2192785989d77.jpg'
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/52ada51ed86b7e7bc11eaee83ff2192785989d77.jpg'
},
{
start: '2021-11-21T01:10:00.000Z',
@ -71,7 +72,8 @@ it('can parse response', done => {
category: 'Magazine',
description:
'Un documentaire français réalisé en 2019, Cindy Sander, Myriam Abel, Mario, Michal ou encore Magali Vaé ont fait les grandes heures des premières émissions de télécrochet modernes, dans les années 2000, Des années après leur passage, que reste-t-il de leur notoriété ? Comment ces candidats ont-ils vécu leur soudaine médiatisation ? Quels rapports entretenaient-ils avec les autres participants et les membres du jury, souvent intransigeants ?',
icon: 'https://programme-tv.vini.pf/sites/default/files/img-icones/6e64cfbc55c1f4cbd11e3011401403d4dc08c6d2.jpg'
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/6e64cfbc55c1f4cbd11e3011401403d4dc08c6d2.jpg'
},
{
start: '2021-11-21T02:30:00.000Z',
@ -80,7 +82,8 @@ it('can parse response', done => {
category: 'Magazine',
description:
"50'INSIDE, c'est toute l'actualité des stars résumée, chaque samedi, Le rendez-vous glamour pour retrouver toujours,,",
icon: 'https://programme-tv.vini.pf/sites/default/files/img-icones/3d7e252312dacb5fb7a1a786fa0022ca1be15499.jpg'
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/3d7e252312dacb5fb7a1a786fa0022ca1be15499.jpg'
}
])
done()

View File

@ -35,7 +35,7 @@ module.exports = {
url: parseURL(item),
start,
stop,
icon: parseIcon(item)
image: parseImage(item)
})
})
@ -47,7 +47,7 @@ function parseStart(item, date) {
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${item.hour}`, 'YYYY-MM-DD HH:mm', 'Europe/Rome')
}
function parseIcon(item) {
function parseImage(item) {
let cover = null
if (item.image) {
cover = `https://www.raiplay.it${item.image}`

View File

@ -37,7 +37,7 @@ it('can parse response', () => {
season: '3',
episode: '5',
sub_title: 'La prima volta',
icon: 'https://www.raiplay.it/dl/img/2020/03/09/1583748471860_dddddd.jpg',
image: 'https://www.raiplay.it/dl/img/2020/03/09/1583748471860_dddddd.jpg',
url: 'https://www.raiplay.it/dirette/rai2/The-Good-Doctor-S3E5---La-prima-volta-2f81030d-803b-456a-9ea5-40233234fd9d.html'
}
])

View File

@ -45,7 +45,7 @@ module.exports = {
programs.push({
title: parseTitle($item),
category: parseCategory($item),
icon: details.icon,
image: details.image,
description: details.description,
directors: details.directors,
actors: details.actors,
@ -95,7 +95,7 @@ async function loadProgramDetails($item) {
const $ = cheerio.load(content)
return Promise.resolve({
icon: parseIcon($),
image: parseImage($),
actors: parseActors($),
directors: parseDirectors($),
description: parseDescription($)
@ -132,7 +132,7 @@ function parseDescription($) {
return $('#Sinopsis > div').text().trim()
}
function parseIcon($) {
function parseImage($) {
const src = $('#ImgProg').attr('src')
const url = new URL(src, 'https://www.reportv.com.ar/buscador/')

View File

@ -74,7 +74,7 @@ it('can parse response', async () => {
stop: '2022-10-03T05:00:00.000Z',
title: '¿Quién tiene la razón?',
category: 'Talk Show',
icon: 'https://www.reportv.com.ar/buscador/img/Programas/4401882.jpg',
image: 'https://www.reportv.com.ar/buscador/img/Programas/4401882.jpg',
actors: ['Nancy Álvarez'],
description:
'Espacio que dará de qué hablar cuando la doctora Nancy Álvarez y Carmen Jara, acompañadas de un jurado implacable, lleguen a escuchar y a resolver los problemas de las partes en conflicto para luego decidir quién tiene la razón.'
@ -85,7 +85,7 @@ it('can parse response', async () => {
stop: '2022-10-04T04:00:00.000Z',
title: 'Valeria',
category: 'Comedia',
icon: 'https://www.reportv.com.ar/buscador/img/Programas/18788047.jpg',
image: 'https://www.reportv.com.ar/buscador/img/Programas/18788047.jpg',
directors: ['Inma Torrente'],
actors: [
'Diana Gómez',

View File

@ -11,7 +11,8 @@ dayjs.extend(utc)
dayjs.extend(customParseFormat)
const headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 OPR/104.0.0.0'
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 OPR/104.0.0.0'
}
const cookies = {}
@ -64,10 +65,10 @@ async function parseProgram(item, channel, options = {}) {
const top = item.find('.iq-accordion-block')
const info = top.find('.iq-accordion-title .big-title span')
if (info.length) {
const [ time, title ] = info.text().split('\n')
const [ d, m, y ] = item._date.split('-')
const [time, title] = info.text().split('\n')
const [d, m, y] = item._date.split('-')
const start = dayjs.tz(`${y}-${m}-${d} ${time.trim()}`, 'YYYY-MM-DD HH:mm', 'Asia/Riyadh')
let description, icon, stop
let description, image, stop
if (deep) {
const pid = top.attr('id').split('-')[1]
if (pid) {
@ -89,7 +90,7 @@ async function parseProgram(item, channel, options = {}) {
}
const img = $('.row > div > img')
if (img.length) {
icon = img.attr('src')
image = img.attr('src')
}
}
if (item._next) {
@ -102,7 +103,7 @@ async function parseProgram(item, channel, options = {}) {
return {
title: title?.trim(),
description: description?.trim(),
icon: icon,
image,
start: raw ? start : start?.toISOString(),
stop: raw ? stop : stop?.toISOString()
}
@ -125,7 +126,7 @@ function parseItems(content, date) {
if (lastId === expectedId) {
// set next item
if (result.length) {
result[result.length - 1]._next = $item;
result[result.length - 1]._next = $item
}
result.push($item)
} else if (result.length && !result[result.length - 1]._next) {
@ -146,4 +147,4 @@ function parseCookies(headers) {
})
}
return cookies.length ? cookies.join('; ') : null
}
}

View File

@ -63,7 +63,7 @@ it('can parse english response', async () => {
title: 'Katkout',
description:
'In a comic framework, the events of the film revolve around (Katkoot) Al-Saedi, whose aunt, the eldest of the Al-Saedi family, tries to force him to kill himself in order to ransom his family. A time...',
icon: 'https://imgsrv.rotana.net/spider_storage/1398X1000/1690882129.webp?w=450&fit=max'
image: 'https://imgsrv.rotana.net/spider_storage/1398X1000/1690882129.webp?w=450&fit=max'
})
})
@ -79,7 +79,7 @@ it('can parse arabic response', async () => {
title: 'كتكوت',
description:
'في إطار كوميدي تدور أحداث الفيلم، حول (كتكوت) الصعيدي الذي تحاول عمته كبيرة العائلة الصعيدية إجباره على تقديم نفسه للقتل ليفدي عائلته، ولكنه يهرب وتخطفه جهة أمنية لاكتشاف شبه كبير بينه وبين (يوسف خوري...',
icon: 'https://imgsrv.rotana.net/spider_storage/1398X1000/1690882129.webp?w=450&fit=max'
image: 'https://imgsrv.rotana.net/spider_storage/1398X1000/1690882129.webp?w=450&fit=max'
})
})

View File

@ -33,7 +33,7 @@ module.exports = {
title: parseTitle($item),
sub_title: parseSubTitle($item),
categories: parseCategories($item),
icon: parseIcon($item),
image: parseImage($item),
start: parseStart($item, date),
stop: parseStop($item, date)
})
@ -43,7 +43,7 @@ module.exports = {
}
}
function parseIcon($item) {
function parseImage($item) {
return $item('.single-wrap').data('p')
}

View File

@ -49,7 +49,7 @@ it('can parse response', () => {
title: '問天',
sub_title: '第十四集',
categories: ['戲劇'],
icon: 'https://www.rthk.hk/assets/images/rthk/dtt31/thegreataerospace/10239_1920_s.jpg'
image: 'https://www.rthk.hk/assets/images/rthk/dtt31/thegreataerospace/10239_1920_s.jpg'
})
})
@ -68,7 +68,7 @@ it('can parse response in English', () => {
title: 'The Great Aerospace',
sub_title: 'Episode 14',
categories: ['戲劇'],
icon: 'https://www.rthk.hk/assets/images/rthk/dtt31/thegreataerospace/10239_1920_s.jpg'
image: 'https://www.rthk.hk/assets/images/rthk/dtt31/thegreataerospace/10239_1920_s.jpg'
})
})

Some files were not shown because too many files have changed in this diff Show More