From 50f472e6298ab3c19a81bbadf53e1ad7ceb8efea Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 07:31:00 +0300
Subject: [PATCH 01/62] Create program_1.json
---
sites/foxtel.com.au/__data__/program_1.json | 1 +
1 file changed, 1 insertion(+)
create mode 100644 sites/foxtel.com.au/__data__/program_1.json
diff --git a/sites/foxtel.com.au/__data__/program_1.json b/sites/foxtel.com.au/__data__/program_1.json
new file mode 100644
index 000000000..d6a87495c
--- /dev/null
+++ b/sites/foxtel.com.au/__data__/program_1.json
@@ -0,0 +1 @@
+{"event":{"eventId":174868153,"programTitle":"Hawaii Five-0","channelId":548,"scheduledDate":1776488400000,"duration":60,"episodeTitle":"Hana Komo Pae","audio":"DIGITAL","parentalRating":"M","seriesLink":"27163","widescreenInd":false,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":true,"actors":["Alex O'Loughlin","Scott Caan","Grace Park","Masi Oka","Chi McBride"],"mergedSynopsis":"(v) S7, Ep8. Hana Komo Pae: While Danny chaperones Grace's winter formal, terrorists seize the venue and hold everyone hostage in order to kidnap a diplomat's son.","seriesNumber":"7","episodeNumber":"8","genreCode":"02","subGenreCode":"5","webLinks":[{"title":"IMDB","url":"http://www.imdb.com/title/tt1600194/"}],"yearOfProduction":"2016","consumerAdvice":"v","countryOfOrigin":"United States","language":"English","displaySepNum":true,"versionNum":2588617,"shortSynopsis":"While Danny chaperones Grace's winter formal, terrorists seize the venue and hold everyone hostage in order to kidnap a diplomat's son.","imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/61x61.jpg?maxheight=213&limit=536db4ca3ea686d56daed0b545cc1b4faaeec82f","genre":"Entertainment","subGenre":"Drama","placeholder":false,"isMovie":false,"adultsOnly":false},"alternateEpisodes":[{"eventId":174868152,"programTitle":"Hawaii Five-0","channelId":548,"scheduledDate":1776484800000,"duration":60,"episodeTitle":"Ka Makuahine A Me Ke Keikikane","audio":"DIGITAL","parentalRating":"M","seriesLink":"27163","widescreenInd":false,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":true,"actors":["Alex O'Loughlin","Scott Caan","Grace Park","Masi Oka","Chi McBride"],"mergedSynopsis":"(v) S7, Ep7. Ka Makuahine A Me Ke Keikikane: McGarrett's long-lost love, Catherine, returns to Hawaii unexpectedly to tell Steve that Doris is in trouble and needs his help to be rescued.","seriesNumber":"7","episodeNumber":"7","genreCode":"02","subGenreCode":"5","webLinks":[{"title":"IMDB","url":"http://www.imdb.com/title/tt1600194/"}],"yearOfProduction":"2016","consumerAdvice":"v","countryOfOrigin":"United States","language":"English","displaySepNum":true,"versionNum":2588617,"shortSynopsis":"McGarrett's long-lost love, Catherine, returns to Hawaii unexpectedly to tell Steve that Doris is in trouble and needs his help to be rescued.","imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/8w048.jpg?maxheight=213&limit=b456324f41f17d5a7726f94ef2b1ae1e8102a7dd","genre":"Entertainment","subGenre":"Drama","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":174869805,"programTitle":"Hawaii Five-0","channelId":714,"scheduledDate":1776492000000,"duration":60,"episodeTitle":"Ka Makuahine A Me Ke Keikikane","audio":"DIGITAL","parentalRating":"M","seriesLink":"26816","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"actors":["Alex O'Loughlin","Scott Caan","Grace Park","Masi Oka","Chi McBride"],"mergedSynopsis":"(v) S7, Ep7. Ka Makuahine A Me Ke Keikikane: McGarrett's long-lost love, Catherine, returns to Hawaii unexpectedly to tell Steve that Doris is in trouble and needs his help to be rescued.","seriesNumber":"7","episodeNumber":"7","genreCode":"02","subGenreCode":"5","webLinks":[{"title":"IMDB","url":"http://www.imdb.com/title/tt1600194/"}],"yearOfProduction":"2016","consumerAdvice":"v","countryOfOrigin":"United States","language":"English","displaySepNum":true,"versionNum":2588617,"shortSynopsis":"McGarrett's long-lost love, Catherine, returns to Hawaii unexpectedly to tell Steve that Doris is in trouble and needs his help to be rescued.","imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/8w048.jpg?maxheight=213&limit=b456324f41f17d5a7726f94ef2b1ae1e8102a7dd","genre":"Entertainment","subGenre":"Drama","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":174868167,"programTitle":"Hawaii Five-0","channelId":548,"scheduledDate":1776542700000,"duration":55,"episodeTitle":"Elua La MA Nowemapa","audio":"DIGITAL","parentalRating":"MA","seriesLink":"61248","widescreenInd":false,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":true,"actors":["Alex O'Loughlin","Scott Caan","Grace Park","Masi Oka","Chi McBride"],"mergedSynopsis":"(v) S7, Ep9. Elua La MA Nowemapa: A conspiracy theorist with compelling information that JFK's own cabinet planned his assassination is murdered. Jerry tells the story of the Honolulu Conference on November 20, 1963.","seriesNumber":"7","episodeNumber":"9","genreCode":"02","subGenreCode":"5","webLinks":[{"title":"IMDB","url":"http://www.imdb.com/title/tt1600194/"}],"yearOfProduction":"2016","consumerAdvice":"v","countryOfOrigin":"United States","language":"English","displaySepNum":true,"versionNum":2588617,"shortSynopsis":"A conspiracy theorist with compelling information that JFK's own cabinet planned his assassination is murdered. Jerry tells the story of the Honolulu Conference on November 20, 1963.","imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/6ww1q.jpg?maxheight=213&limit=dad1d2722cbb5b3ca8fb073fd3ed81387072fa7c","genre":"Entertainment","subGenre":"Drama","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":174868168,"programTitle":"Hawaii Five-0","channelId":548,"scheduledDate":1776546000000,"duration":55,"episodeTitle":"Ka Luhi","audio":"DIGITAL","parentalRating":"M","seriesLink":"61248","widescreenInd":false,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":true,"actors":["Alex O'Loughlin","Scott Caan","Grace Park","Masi Oka","Chi McBride"],"mergedSynopsis":"(a) S7, Ep10. Ka Luhi: Five-0 investigates the 10-year-old cold case of a missing teen when a boy suffering from PTSD undergoes hypnosis and realises he may have witnessed her murder.","extendedSynopsis":"Five-0 investigates the 10-year-old cold case of a missing teen when a boy suffering from PTSD undergoes hypnosis and realizes he may have witnessed her murder. Also, Danny's sister, Bridget (guest star Missy Peregrym), visits Oahu for a business conference, and he suspects that she may be getting too close to a co-worker.","seriesNumber":"7","episodeNumber":"10","genreCode":"02","subGenreCode":"5","webLinks":[{"title":"IMDB","url":"http://www.imdb.com/title/tt1600194/"}],"yearOfProduction":"2016","consumerAdvice":"a","countryOfOrigin":"United States","language":"English","displaySepNum":true,"versionNum":2588617,"shortSynopsis":"Five-0 investigates the 10-year-old cold case of a missing teen when a boy suffering from PTSD undergoes hypnosis and realises he may have witnessed her murder.","imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/a15do.jpg?maxheight=213&limit=de8d920233e635e513b4c4d62d2651041a5aad41","genre":"Entertainment","subGenre":"Drama","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":174869820,"programTitle":"Hawaii Five-0","channelId":714,"scheduledDate":1776549900000,"duration":55,"episodeTitle":"Elua La MA Nowemapa","audio":"DIGITAL","parentalRating":"MA","seriesLink":"60751","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"actors":["Alex O'Loughlin","Scott Caan","Grace Park","Masi Oka","Chi McBride"],"mergedSynopsis":"(v) S7, Ep9. Elua La MA Nowemapa: A conspiracy theorist with compelling information that JFK's own cabinet planned his assassination is murdered. Jerry tells the story of the Honolulu Conference on November 20, 1963.","seriesNumber":"7","episodeNumber":"9","genreCode":"02","subGenreCode":"5","webLinks":[{"title":"IMDB","url":"http://www.imdb.com/title/tt1600194/"}],"yearOfProduction":"2016","consumerAdvice":"v","countryOfOrigin":"United States","language":"English","displaySepNum":true,"versionNum":2588617,"shortSynopsis":"A conspiracy theorist with compelling information that JFK's own cabinet planned his assassination is murdered. Jerry tells the story of the Honolulu Conference on November 20, 1963.","imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/6ww1q.jpg?maxheight=213&limit=dad1d2722cbb5b3ca8fb073fd3ed81387072fa7c","genre":"Entertainment","subGenre":"Drama","placeholder":false,"isMovie":false,"adultsOnly":false}],"alternateTimes":[{"eventId":174869806,"programTitle":"Hawaii Five-0","channelId":714,"scheduledDate":1776495600000,"duration":60,"episodeTitle":"Hana Komo Pae","audio":"DIGITAL","parentalRating":"M","seriesLink":"26816","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"actors":["Alex O'Loughlin","Scott Caan","Grace Park","Masi Oka","Chi McBride"],"mergedSynopsis":"(v) S7, Ep8. Hana Komo Pae: While Danny chaperones Grace's winter formal, terrorists seize the venue and hold everyone hostage in order to kidnap a diplomat's son.","seriesNumber":"7","episodeNumber":"8","genreCode":"02","subGenreCode":"5","webLinks":[{"title":"IMDB","url":"http://www.imdb.com/title/tt1600194/"}],"yearOfProduction":"2016","consumerAdvice":"v","countryOfOrigin":"United States","language":"English","displaySepNum":true,"versionNum":2588617,"shortSynopsis":"While Danny chaperones Grace's winter formal, terrorists seize the venue and hold everyone hostage in order to kidnap a diplomat's son.","genre":"Entertainment","subGenre":"Drama","placeholder":false,"isMovie":false,"adultsOnly":false}],"moreLikeThis":[{"eventId":174868177,"programTitle":"S.W.A.T.","channelId":548,"scheduledDate":1776581400000,"duration":55,"episodeTitle":"Allegiance","audio":"digital","parentalRating":"M","seriesLink":"661813","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"seriesNumber":"7","episodeNumber":"12","genreCode":"2","yearOfProduction":"2024","displaySepNum":false,"imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/4/c16y1k.jpg?maxheight=213&limit=b4951eec0ab9c5f7b60f76796cd1a0f85f74a3ae","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":174868297,"programTitle":"Blue Bloods","channelId":548,"scheduledDate":1776992700000,"duration":55,"episodeTitle":"My Brother's Keeper","audio":"digital","parentalRating":"M","seriesLink":"655050","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"seriesNumber":"9","episodeNumber":"14","genreCode":"2","yearOfProduction":"2018","displaySepNum":false,"imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/94d0l.jpg?maxheight=213&limit=a0057b16e5035cde9b5596bc38f8da86d3a03b25","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":175562561,"programTitle":"Blue Bloods","channelId":548,"scheduledDate":1776896400000,"duration":55,"episodeTitle":"My Funny Valentine","audio":"digital","parentalRating":"M","seriesLink":"661918","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"seriesNumber":"1","episodeNumber":"14","genreCode":"2","yearOfProduction":"2010","displaySepNum":false,"imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/a8rgy.jpg?maxheight=213&limit=ce300c06bc798e07bb73469cad41d2973a1df57d","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":174645222,"programTitle":"NCIS: New Orleans","channelId":555,"scheduledDate":1777067400000,"duration":45,"episodeTitle":"Sins Of The Father","audio":"digital","parentalRating":"M","seriesLink":"656048","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"seriesNumber":"4","episodeNumber":"8","genreCode":"2","yearOfProduction":"2018","displaySepNum":false,"imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/8w3zb.jpg?maxheight=213&limit=1f5ab1440dfe8b43a201fe1179b0cb413f687499","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":174583439,"programTitle":"New York Undercover","channelId":21,"scheduledDate":1776522600000,"duration":60,"episodeTitle":"Missing","audio":"stereo","parentalRating":"M","seriesLink":"656671","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"seriesNumber":"1","episodeNumber":"8","genreCode":"2","yearOfProduction":"1995","displaySepNum":false,"imageUrl":"https://images1.resources.foxtel.com.au/store1/mount1/HAL/2024/dsww1k.jpg?maxheight=213&limit=a7094fd3e1958dd63f792fa806c088343516620c","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":176072598,"programTitle":"Blue Lights","scheduledDate":1777471200000,"duration":65,"episodeTitle":"The Code","audio":"stereo","parentalRating":"M","seriesLink":"H662705","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"seriesNumber":"1","episodeNumber":"1","genreCode":"2","yearOfProduction":"2023","displaySepNum":false,"imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/28/81f989a1-55b8-51d1-af69-9ae8b062888b.jpeg?maxheight=213&limit=db8a3607b491dda2a00f29f016c4ef4cc2672d94","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":175562587,"programTitle":"Blue Bloods","channelId":548,"scheduledDate":1776723600000,"duration":55,"episodeTitle":"Family Ties","audio":"digital","parentalRating":"M","seriesLink":"661918","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"seriesNumber":"1","episodeNumber":"12","genreCode":"2","yearOfProduction":"2010","displaySepNum":false,"imageUrl":"https://images1.resources.foxtel.com.au/store2/mount1/16/3/b1azh.jpg?maxheight=213&limit=5eaa1d8f60af8373ccc4af84c91f0f2414e9eaed","placeholder":false,"isMovie":false,"adultsOnly":false},{"eventId":174645192,"programTitle":"CSI: NY","channelId":555,"scheduledDate":1776975600000,"duration":45,"episodeTitle":"Pay Up","audio":"stereo","parentalRating":"M","seriesLink":"651367","widescreenInd":true,"closedCaptionInd":true,"subtitledInd":false,"premiereInd":false,"hdInd":false,"seriesNumber":"5","episodeNumber":"25","genreCode":"2","yearOfProduction":"2008","displaySepNum":false,"imageUrl":"https://images1.resources.foxtel.com.au/store1/mount1/PAR/2021/I@092798_L.jpg?maxheight=213&limit=5537e09f68de97335b852b9ceb7bf89ceca60ecc","placeholder":false,"isMovie":false,"adultsOnly":false}],"userDevices":[]}
\ No newline at end of file
From 927e66ab0d57e2ad105535cc099d2eb916ec3bdc Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 07:31:02 +0300
Subject: [PATCH 02/62] Update content.html
---
sites/foxtel.com.au/__data__/content.html | 9748 ++++++++++-----------
1 file changed, 4874 insertions(+), 4874 deletions(-)
diff --git a/sites/foxtel.com.au/__data__/content.html b/sites/foxtel.com.au/__data__/content.html
index 88e604efd..a093c292c 100644
--- a/sites/foxtel.com.au/__data__/content.html
+++ b/sites/foxtel.com.au/__data__/content.html
@@ -1,4874 +1,4874 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
From bf8f00c0d2da25be45e5752a3c76f363e89d40c9 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 07:31:27 +0300
Subject: [PATCH 03/62] Update foxtel.com.au.test.js
---
sites/foxtel.com.au/foxtel.com.au.test.js | 28 +++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/sites/foxtel.com.au/foxtel.com.au.test.js b/sites/foxtel.com.au/foxtel.com.au.test.js
index 3485c6f2a..7046fac9b 100644
--- a/sites/foxtel.com.au/foxtel.com.au.test.js
+++ b/sites/foxtel.com.au/foxtel.com.au.test.js
@@ -1,3 +1,4 @@
+const axios = require('axios')
const { parser, url, request } = require('./foxtel.com.au.config.js')
const fs = require('fs')
const path = require('path')
@@ -7,6 +8,23 @@ const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
+jest.mock('axios')
+
+axios.get.mockImplementation(url => {
+ if (
+ url ===
+ 'https://www.foxtel.com.au/webepg/ws/foxtel/event/174868153?movieHeight=213&tvShowHeight=213®ionId=8336'
+ ) {
+ return Promise.resolve({
+ data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/program_1.json')))
+ })
+ } else {
+ return Promise.resolve({
+ data: '{}'
+ })
+ }
+})
+
const date = dayjs.utc('2022-11-08', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'Channel-9-Sydney/NIN',
@@ -26,10 +44,10 @@ it('can generate valid request headers', () => {
})
})
-it('can parse response', () => {
+it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
- let results = parser({ content })
+ let results = await parser({ content })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
@@ -41,6 +59,8 @@ it('can parse response', () => {
stop: '2022-11-07T13:30:00.000Z',
title: 'The Equalizer',
sub_title: 'Glory',
+ description:
+ "While Danny chaperones Grace's winter formal, terrorists seize the venue and hold everyone hostage in order to kidnap a diplomat's son.",
image:
'https://images1.resources.foxtel.com.au/store2/mount1/16/3/69e0v.jpg?maxheight=90&limit=91aa1c7a2c485aeeba0706941f79f111adb35830',
rating: {
@@ -52,8 +72,8 @@ it('can parse response', () => {
})
})
-it('can handle empty guide', () => {
- const result = parser({
+it('can handle empty guide', async () => {
+ const result = await parser({
content: fs.readFileSync(path.resolve(__dirname, '__data__/no-content.html'))
})
expect(result).toMatchObject([])
From 3a282f5108939990a86e912ed77328c6bbaccf35 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 07:32:08 +0300
Subject: [PATCH 04/62] Update foxtel.com.au.config.js
---
sites/foxtel.com.au/foxtel.com.au.config.js | 48 ++++++++++++++++++---
1 file changed, 43 insertions(+), 5 deletions(-)
diff --git a/sites/foxtel.com.au/foxtel.com.au.config.js b/sites/foxtel.com.au/foxtel.com.au.config.js
index da6f04b1b..050261719 100644
--- a/sites/foxtel.com.au/foxtel.com.au.config.js
+++ b/sites/foxtel.com.au/foxtel.com.au.config.js
@@ -14,10 +14,11 @@ module.exports = {
headers: {
'Accept-Language': 'en-US,en;',
Cookie: 'AAMC_foxtel_0=REGION|7',
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
+ 'User-Agent':
+ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
},
- parser: function ({ content, date }) {
+ async parser({ content, date }) {
let programs = []
const items = parseItems(content)
for (let item of items) {
@@ -32,9 +33,18 @@ module.exports = {
prev.stop = start
}
const stop = start.add(30, 'm')
+
+ const programId = parseProgramId($item)
+ const details = await loadProgramDetails(programId)
+ let description
+ if (details) {
+ description = parseDescription(details)
+ }
+
programs.push({
title: parseTitle($item),
sub_title: parseSubTitle($item),
+ description,
image: parseImage($item),
rating: parseRating($item),
season: parseSeason($item),
@@ -72,6 +82,34 @@ module.exports = {
}
}
+function parseProgramId($item) {
+ const href = $item('*').attr('href')
+
+ return href.split('/')[1]
+}
+
+async function loadProgramDetails(programId) {
+ if (!programId) return {}
+
+ return await axios
+ .get(
+ `https://www.foxtel.com.au/webepg/ws/foxtel/event/${programId}?movieHeight=213&tvShowHeight=213®ionId=8336`,
+ {
+ headers: {
+ 'sec-fetch-dest': 'empty',
+ 'sec-fetch-site': 'same-origin',
+ 'User-Agent': 'insomnia/2022.7.5'
+ }
+ }
+ )
+ .then(r => r.data)
+ .catch(console.log)
+}
+
+function parseDescription(details) {
+ return details?.event?.shortSynopsis
+}
+
function parseSeason($item) {
let seasonString = $item('.epg-event-description > div > abbr:nth-child(1)').attr('title')
if (!seasonString) return null
@@ -118,9 +156,9 @@ function parseRating($item) {
return rating
? {
- system: 'ACB',
- value: rating
- }
+ system: 'ACB',
+ value: rating
+ }
: null
}
From c463e6e1fc57beb2f59dd2a42b55411ae2c0a123 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 09:08:18 +0300
Subject: [PATCH 05/62] Create content.json
---
sites/aljazeera.com/__data__/content.json | 1 +
1 file changed, 1 insertion(+)
create mode 100644 sites/aljazeera.com/__data__/content.json
diff --git a/sites/aljazeera.com/__data__/content.json b/sites/aljazeera.com/__data__/content.json
new file mode 100644
index 000000000..bc87ce29d
--- /dev/null
+++ b/sites/aljazeera.com/__data__/content.json
@@ -0,0 +1 @@
+{"data":{"post":{"title":"Schedule","id":"568783","content":"","schedule":[{"showDay":"Friday","showTimeslot":"00:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"01:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"02:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"02:30","showName":"Counting the Cost","showDescription":"From tolls to blockades - who really controls access to the Strait of Hormuz?","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"03:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"04:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"05:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"05:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"06:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"07:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"08:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"08:30","showName":"Talk to Al Jazeera : Zohran Mamdani","showDescription":"New York City’s mayor reflects on his first 100 days in office, from childcare to affordability, bigotry, war and the future of Democrats.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"09:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"10:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"11:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"11:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"12:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"13:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"14:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"15:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"16:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"17:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"17:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"18:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"19:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"19:30","showName":"UpFront","showDescription":"Redi Tlhabi asks renowned economist Marian Mazzucato if she believes the Iran war will lead to a new global economic system.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"20:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"21:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"22:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"22:30","showName":"Counting the Cost","showDescription":"Will the war push Iran’s economy to the brink or can it hold up?","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"23:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"23:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776384000","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"00:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"01:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"02:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"03:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"04:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"04:30","showName":"UpFront","showDescription":"Redi Tlhabi asks renowned economist Marian Mazzucato if she believes the Iran war will lead to a new global economic system.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"05:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"05:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"06:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"07:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"08:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"09:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"09:30","showName":"Counting the Cost","showDescription":"Will the war push Iran’s economy to the brink or can it hold up?","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"10:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"11:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"11:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"12:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"13:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"14:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"14:30","showName":"UpFront","showDescription":"Redi Tlhabi asks renowned economist Marian Mazzucato if she believes the Iran war will lead to a new global economic system.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"15:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"16:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"17:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"17:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"18:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"19:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"19:30","showName":"The Listening Post","showDescription":"The blockade saga in Hormuz and the tactics of war versus tactics of propaganda. Plus, Narges Bajoghli on how the Iranian diaspora is being used to justify war.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"20:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"21:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"22:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"22:30","showName":"The Bottom Line","showDescription":"How will Iran-U.S. talks unfold? Host Steve Clemons speaks with political scientist Mohsen Milani.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"23:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Saturday","showTimeslot":"23:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776470400","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"00:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"01:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"02:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"03:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"03:30","showName":"Counting the Cost","showDescription":"Will the war push Iran’s economy to the brink or can it hold up?","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"04:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"04:30","showName":"The Listening Post","showDescription":"The blockade saga in Hormuz and the tactics of war versus tactics of propaganda. Plus, Narges Bajoghli on how the Iranian diaspora is being used to justify war.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"05:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"05:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"06:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"07:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"08:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"08:30","showName":"UpFront","showDescription":"Redi Tlhabi asks renowned economist Marian Mazzucato if she believes the Iran war will lead to a new global economic system.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"09:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"09:30","showName":"The Bottom Line","showDescription":"How will Iran-U.S. talks unfold? Host Steve Clemons speaks with political scientist Mohsen Milani.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"10:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"11:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"11:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"12:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"13:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"14:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"14:30","showName":"The Listening Post","showDescription":"The blockade saga in Hormuz and the tactics of war versus tactics of propaganda. Plus, Narges Bajoghli on how the Iranian diaspora is being used to justify war.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"15:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"16:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"17:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"17:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"18:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"19:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"19:30","showName":"Talk To Al Jazeera","showDescription":"One-on-one conversations with global leaders, icons, influencers and alternative voices shaping our times.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"20:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"21:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"22:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"23:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Sunday","showTimeslot":"23:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776556800","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"00:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"01:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"02:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"02:30","showName":"UpFront","showDescription":"Redi Tlhabi asks renowned economist Marian Mazzucato if she believes the Iran war will lead to a new global economic system.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"03:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"03:30","showName":"The Bottom Line","showDescription":"How will Iran-U.S. talks unfold? Host Steve Clemons speaks with political scientist Mohsen Milani.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"04:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"04:30","showName":"Talk To Al Jazeera","showDescription":"One-on-one conversations with global leaders, icons, influencers and alternative voices shaping our times.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"05:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"05:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"06:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"07:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"07:30","showName":"Counting the Cost","showDescription":"Will the war push Iran’s economy to the brink or can it hold up?","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"08:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"08:30","showName":"The Listening Post","showDescription":"The blockade saga in Hormuz and the tactics of war versus tactics of propaganda. Plus, Narges Bajoghli on how the Iranian diaspora is being used to justify war.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"09:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"10:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"11:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"11:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"12:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"13:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"14:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"14:30","showName":"Talk To Al Jazeera","showDescription":"One-on-one conversations with global leaders, icons, influencers and alternative voices shaping our times.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"15:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"16:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"17:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"17:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"18:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"19:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"19:30","showName":"Al Jazeera Untangles - The Coloniser’s Academy : British Empire - Rule the Waves","showDescription":"How Britain fused naval dominance with corporate reach to build a global empire of trade and control.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"20:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"21:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"22:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"23:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Monday","showTimeslot":"23:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776643200","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"00:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"01:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"02:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"02:30","showName":"The Listening Post","showDescription":"The blockade saga in Hormuz and the tactics of war versus tactics of propaganda. Plus, Narges Bajoghli on how the Iranian diaspora is being used to justify war.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"03:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"04:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"04:30","showName":"Al Jazeera Untangles - The Coloniser’s Academy : British Empire - Rule the Waves","showDescription":"How Britain fused naval dominance with corporate reach to build a global empire of trade and control.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"05:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"05:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"06:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"07:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"07:30","showName":"The Bottom Line","showDescription":"How will Iran-U.S. talks unfold? Host Steve Clemons speaks with political scientist Mohsen Milani.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"08:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"08:30","showName":"Talk To Al Jazeera","showDescription":"One-on-one conversations with global leaders, icons, influencers and alternative voices shaping our times.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"09:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"10:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"11:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"11:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"12:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"13:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"14:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"14:30","showName":"Al Jazeera Untangles - The Coloniser’s Academy : British Empire - Rule the Waves","showDescription":"How Britain fused naval dominance with corporate reach to build a global empire of trade and control.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"15:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"16:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"16:30","showName":"Counting the Cost","showDescription":"Counting the Cost provides background to the economics stories that shape our world and impact the lives of ordinary people.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"17:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"17:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"18:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"19:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"19:30","showName":"UpFront","showDescription":"Redi Tlhabi asks renowned economist Marian Mazzucato if she believes the Iran war will lead to a new global economic system.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"20:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"21:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"22:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"23:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Tuesday","showTimeslot":"23:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776729600","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"00:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"01:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"02:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"02:30","showName":"Talk To Al Jazeera","showDescription":"One-on-one conversations with global leaders, icons, influencers and alternative voices shaping our times.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"03:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"04:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"04:30","showName":"UpFront","showDescription":"Redi Tlhabi asks renowned economist Marian Mazzucato if she believes the Iran war will lead to a new global economic system.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"05:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"05:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"06:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"06:30","showName":"Counting the Cost","showDescription":"Counting the Cost provides background to the economics stories that shape our world and impact the lives of ordinary people.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"07:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"08:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"08:30","showName":"Al Jazeera Untangles - The Coloniser’s Academy : British Empire - Rule the Waves","showDescription":"How Britain fused naval dominance with corporate reach to build a global empire of trade and control.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"09:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"10:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"11:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"11:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"12:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"13:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"14:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"14:30","showName":"The Listening Post","showDescription":"The blockade saga in Hormuz and the tactics of war versus tactics of propaganda. Plus, Narges Bajoghli on how the Iranian diaspora is being used to justify war.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"15:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"16:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"16:30","showName":"The Bottom Line","showDescription":"How will Iran-U.S. talks unfold? Host Steve Clemons speaks with political scientist Mohsen Milani.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"17:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"17:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"18:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"19:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"19:30","showName":"Counting the Cost","showDescription":"Counting the Cost provides background to the economics stories that shape our world and impact the lives of ordinary people.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"20:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"21:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"22:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"23:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Wednesday","showTimeslot":"23:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776816000","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"00:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"01:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"02:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"02:30","showName":"Al Jazeera Untangles - The Coloniser’s Academy : British Empire - Rule the Waves","showDescription":"How Britain fused naval dominance with corporate reach to build a global empire of trade and control.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"03:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"04:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"05:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"05:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"06:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"06:30","showName":"The Bottom Line","showDescription":"How will Iran-U.S. talks unfold? Host Steve Clemons speaks with political scientist Mohsen Milani.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"07:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"08:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"08:30","showName":"Counting the Cost","showDescription":"Counting the Cost provides background to the economics stories that shape our world and impact the lives of ordinary people.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"09:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"10:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"11:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"11:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"12:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"13:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"14:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"14:30","showName":"Talk To Al Jazeera","showDescription":"One-on-one conversations with global leaders, icons, influencers and alternative voices shaping our times.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"15:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"16:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"17:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"17:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"18:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"19:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"20:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"21:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"22:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"23:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Thursday","showTimeslot":"23:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776902400","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"00:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"01:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"02:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"02:30","showName":"Counting the Cost","showDescription":"Counting the Cost provides background to the economics stories that shape our world and impact the lives of ordinary people.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"03:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"04:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"04:30","showName":"The Stream","showDescription":"Powered by social media, The Stream brings fresh perspectives and new voices, beyond the headlines.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"05:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"05:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"06:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"07:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"08:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"08:30","showName":"Talk To Al Jazeera","showDescription":"One-on-one conversations with global leaders, icons, influencers and alternative voices shaping our times.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"09:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"10:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"11:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"11:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"12:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"13:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"14:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"14:30","showName":"The Stream","showDescription":"Powered by social media, The Stream brings fresh perspectives and new voices, beyond the headlines.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"15:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"16:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"17:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"17:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"18:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"19:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"19:30","showName":"UpFront","showDescription":"Frank, blunt and inquisitive, UpFront cuts through the headlines to get to the heart of the matter with influential guests and newsmakers.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"20:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"21:00","showName":"NEWSHOUR","showDescription":"Latest news and in-depth analysis from around the world.","duration":"01:00:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"22:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"22:30","showName":"Counting the Cost","showDescription":"Counting the Cost provides background to the economics stories that shape our world and impact the lives of ordinary people.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"23:00","showName":"NEWS 30min","showDescription":"Latest news and analysis from around the world.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"},{"showDay":"Friday","showTimeslot":"23:30","showName":"Inside Story","showDescription":"Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.","duration":"00:30:0","startDate":"1776988800","__typename":"Schedule"}],"__typename":"Post"}}}
From 897c01986f6810bca078b85e53bdb3c14a25978a Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 09:08:29 +0300
Subject: [PATCH 06/62] Create aljazeera.com.test.js
---
sites/aljazeera.com/aljazeera.com.test.js | 55 +++++++++++++++++++++++
1 file changed, 55 insertions(+)
create mode 100644 sites/aljazeera.com/aljazeera.com.test.js
diff --git a/sites/aljazeera.com/aljazeera.com.test.js b/sites/aljazeera.com/aljazeera.com.test.js
new file mode 100644
index 000000000..751c1ad7a
--- /dev/null
+++ b/sites/aljazeera.com/aljazeera.com.test.js
@@ -0,0 +1,55 @@
+const { parser, url, request } = require('./aljazeera.com.config.js')
+const fs = require('fs')
+const path = require('path')
+const dayjs = require('dayjs')
+const utc = require('dayjs/plugin/utc')
+const customParseFormat = require('dayjs/plugin/customParseFormat')
+dayjs.extend(customParseFormat)
+dayjs.extend(utc)
+
+const date = dayjs.utc('2026-04-22', 'YYYY-MM-DD').startOf('d')
+const channel = { site_id: 'aje' }
+
+it('can generate valid url', () => {
+ expect(url({ channel })).toBe(
+ 'https://www.aljazeera.com/graphql?wp-site=aje&operationName=ArchipelagoSchedulePageQuery&variables=%7B%22postName%22%3A%22schedule%22%2C%22preview%22%3A%22%22%7D'
+ )
+})
+
+it('can generate valid request headers', () => {
+ expect(request.headers({ channel })).toMatchObject({
+ 'wp-site': 'aje'
+ })
+})
+
+it('can parse response', () => {
+ const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
+
+ const results = parser({ content, date }).map(p => {
+ p.start = p.start.toJSON()
+ p.stop = p.stop.toJSON()
+
+ return p
+ })
+
+ expect(results.length).toBe(35)
+ expect(results[0]).toMatchObject({
+ title: 'NEWSHOUR',
+ description: 'Latest news and in-depth analysis from around the world.',
+ start: '2026-04-21T12:00:00.000Z',
+ stop: '2026-04-21T13:00:00.000Z'
+ })
+ expect(results[34]).toMatchObject({
+ title: 'Inside Story',
+ description:
+ 'Beyond the headlines to the heart of the news of the day. Al Jazeera gets the Inside Story from some of the best minds from around the globe.',
+ start: '2026-04-22T11:30:00.000Z',
+ stop: '2026-04-22T12:00:00.000Z'
+ })
+})
+
+it('can handle empty guide', () => {
+ const results = parser({ content: '', date })
+
+ expect(results).toMatchObject([])
+})
From 5183fca8177a83ac64bf00730ab6ae58efaab800 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 09:08:38 +0300
Subject: [PATCH 07/62] Create aljazeera.com.config.js
---
sites/aljazeera.com/aljazeera.com.config.js | 66 +++++++++++++++++++++
1 file changed, 66 insertions(+)
create mode 100644 sites/aljazeera.com/aljazeera.com.config.js
diff --git a/sites/aljazeera.com/aljazeera.com.config.js b/sites/aljazeera.com/aljazeera.com.config.js
new file mode 100644
index 000000000..4c3b79c82
--- /dev/null
+++ b/sites/aljazeera.com/aljazeera.com.config.js
@@ -0,0 +1,66 @@
+const dayjs = require('dayjs')
+const utc = require('dayjs/plugin/utc')
+const timezone = require('dayjs/plugin/timezone')
+
+dayjs.extend(utc)
+dayjs.extend(timezone)
+
+module.exports = {
+ site: 'aljazeera.com',
+ days: 2,
+ url({ channel }) {
+ return `https://www.aljazeera.com/graphql?wp-site=${channel.site_id}&operationName=ArchipelagoSchedulePageQuery&variables=%7B%22postName%22%3A%22schedule%22%2C%22preview%22%3A%22%22%7D`
+ },
+ request: {
+ headers({ channel }) {
+ return {
+ 'wp-site': channel.site_id
+ }
+ }
+ },
+ parser({ content, date }) {
+ const items = parseItems(content, date)
+
+ return items.map(item => {
+ const start = parseStart(item, date)
+ const duration = parseDuration(item.duration)
+ const stop = start.add(duration, 's')
+
+ return {
+ title: item.showName,
+ description: item.showDescription,
+ start,
+ stop
+ }
+ })
+ },
+ channels() {
+ return [
+ { site_id: 'aje', lang: 'en', xmltv_id: 'AlJazeera.qa@English', name: 'Al Jazeera English' },
+ { site_id: 'aja', lang: 'ar', xmltv_id: 'AlJazeera.qa@Arabic', name: 'Al Jazeera Arabic' }
+ ]
+ }
+}
+
+function parseStart(item, date) {
+ return dayjs(`${date.format('YYYY-MM-DD')} ${item.showTimeslot}`, 'YYYY-MM-DD HH:mm').utc()
+}
+
+function parseDuration(duration) {
+ const [, HH, mm, ss] = duration.match(/(\d+):(\d+)(?::(\d+))?/)
+
+ return parseInt(HH) * 3600 + parseInt(mm) * 60 + parseInt(ss || 0)
+}
+
+function parseItems(content, date) {
+ try {
+ const data = JSON.parse(content)
+ if (!data?.data?.post || !Array.isArray(data.data.post.schedule)) return []
+
+ const startOfDay = date.startOf('day')
+
+ return data.data.post.schedule.filter(item => item.startDate === startOfDay.unix().toString())
+ } catch {
+ return []
+ }
+}
From 676f908d98e15877c9098e7b1288aa6a59f29d30 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 09:08:49 +0300
Subject: [PATCH 08/62] Create aljazeera.com.channels.xml
---
sites/aljazeera.com/aljazeera.com.channels.xml | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 sites/aljazeera.com/aljazeera.com.channels.xml
diff --git a/sites/aljazeera.com/aljazeera.com.channels.xml b/sites/aljazeera.com/aljazeera.com.channels.xml
new file mode 100644
index 000000000..78d2742ba
--- /dev/null
+++ b/sites/aljazeera.com/aljazeera.com.channels.xml
@@ -0,0 +1,5 @@
+
+
+ Al Jazeera Arabic
+ Al Jazeera English
+
From 631036a257231f64ece4f85e53d829afba5a190c Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sat, 18 Apr 2026 09:09:16 +0300
Subject: [PATCH 09/62] Create readme.md
---
sites/aljazeera.com/readme.md | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
create mode 100644 sites/aljazeera.com/readme.md
diff --git a/sites/aljazeera.com/readme.md b/sites/aljazeera.com/readme.md
new file mode 100644
index 000000000..2e7e56c9a
--- /dev/null
+++ b/sites/aljazeera.com/readme.md
@@ -0,0 +1,21 @@
+# aljazeera.com
+
+https://www.aljazeera.com/schedule
+
+### Download the guide
+
+```sh
+npm run grab --- --sites=aljazeera.com
+```
+
+### Update channel list
+
+```sh
+npm run channels:parse --- --config=./sites/aljazeera.com/aljazeera.com.config.js --output=./sites/aljazeera.com/aljazeera.com.channels.xml
+```
+
+### Test
+
+```sh
+npm test --- aljazeera.com
+```
From 418824b88ffe6b8a97fce22f12e313113d212dc5 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Sat, 18 Apr 2026 13:59:45 +0000
Subject: [PATCH 10/62] [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/24606241050) workflow.
---
SITES.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/SITES.md b/SITES.md
index d4ca1c038..a3e5ba6ed 100644
--- a/SITES.md
+++ b/SITES.md
@@ -41,7 +41,7 @@
+
+ serial kryminalny
+
+
+
+ Włochy 2011, 60 min
+
+
+
+
+
+
+
Fabri poznaje młodą studentkę prawa z byłej Jugosławii, Ivanę, która tak jak on przyszła na przyjęcie do sąsiadki policjanta. Nazajutrz Ivana pojawia się na komisariacie. Prosi detektywa o ponowne otwarcie sprawy jej zmarłej przed 17 laty matki.
+ Komentujcie na Facebooku i Twitterze. Wasze zdanie jest dla nas bardzo ważne, dlatego czekamy również na
+ Wasze listy. Już wiele razy nas zainspirowały. Najciekawsze zamieścimy w serwisie.
+
+ Znajdziecie je tutaj.
+
+ Bardzo cieszymy się, że chcesz do nas napisać. Jeśli dzielisz się swoją historią lub podsyłasz informacje,
+ które możemy wykorzystać w materiale, wyślij je z aktualnego adresu e-mail i nie zapomnij się podpisać.
+
Lévai Balázs több mint egy éven át forgatott a Tankcsapdával.
+
19/3.
2006-ban a Harsányi Levente és Korda György alkotta páros volt az egyik legnépszerűbb zenés tévéműsor házigazdája. A műsorban klasszikus nagy slágerek versenyeznek közkedvelt művészek előadásában a nézők szavazataiért.
From fd12f8095652d3af61dc60c6e285ecbcb8574dfb Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sun, 19 Apr 2026 04:33:14 +0300
Subject: [PATCH 24/62] Update musor.tv.test.js
---
sites/musor.tv/musor.tv.test.js | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/sites/musor.tv/musor.tv.test.js b/sites/musor.tv/musor.tv.test.js
index b723fe3f9..696114761 100644
--- a/sites/musor.tv/musor.tv.test.js
+++ b/sites/musor.tv/musor.tv.test.js
@@ -11,7 +11,7 @@ dayjs.extend(utc)
const date = dayjs.utc('2025-10-11', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'MAGYAR_MOZI_TV',
- xmltv_id: 'MagyarMoziTV.hu',
+ xmltv_id: 'MagyarMoziTV.hu'
}
it('can generate valid url', () => {
@@ -36,14 +36,17 @@ it('can parse response', () => {
start: '2025-10-10T23:05:00.000Z',
stop: '2025-10-11T00:50:00.000Z',
title: 'A 25. év - Három rohadék rockcsempész (Tankcsapda road movie)',
- description: 'Lévai Balázs több mint egy éven át forgatott a Tankcsapdával.'
+ subTitle: '19/3.',
+ description:
+ '2006-ban a Harsányi Levente és Korda György alkotta páros volt az egyik legnépszerűbb zenés tévéműsor házigazdája. A műsorban klasszikus nagy slágerek versenyeznek közkedvelt művészek előadásában a nézők szavazataiért.'
})
expect(results[1]).toMatchObject({
start: '2025-10-11T00:50:00.000Z',
stop: '2025-10-11T01:45:00.000Z',
title: 'Megbélyegzetten - 1968',
- description: 'Néhány tinédzser diák, egy csalinak szánt újságcikk nyomán levelet írt Ausztriába 1968-ban.'
+ description:
+ 'Néhány tinédzser diák, egy csalinak szánt újságcikk nyomán levelet írt Ausztriába 1968-ban.'
})
})
From 54f419f22d8bc8ec4aa753d1553eecf8f76c5070 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sun, 19 Apr 2026 04:33:27 +0300
Subject: [PATCH 25/62] Update musor.tv.config.js
---
sites/musor.tv/musor.tv.config.js | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/sites/musor.tv/musor.tv.config.js b/sites/musor.tv/musor.tv.config.js
index 2be25bf1f..c38d926a0 100644
--- a/sites/musor.tv/musor.tv.config.js
+++ b/sites/musor.tv/musor.tv.config.js
@@ -31,9 +31,11 @@ module.exports = {
let start = parseStart($item)
if (prev) prev.stop = start
const stop = start.add(30, 'm')
+ const details = parseDetails($item)
programs.push({
title: parseTitle($item),
- description: parseDescription($item),
+ subTitle: details.subTitle,
+ description: details.description,
image: parseImage($item),
start,
stop
@@ -80,8 +82,20 @@ function parseTitle($item) {
return $item.find('h3 > a').text().trim()
}
-function parseDescription($item) {
- return $item.find('div.progentrylong').text().trim()
+function parseDetails($item) {
+ const details = $item.find('div.progentrylong').html().split(' ').filter(Boolean)
+
+ if (details.length === 1)
+ return {
+ description: details[0]
+ }
+
+ const [subTitle, description] = details
+
+ return {
+ subTitle,
+ description
+ }
}
function parseStart($item) {
From 1c193e7288108dda22223e1d81d4f930530f268a Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sun, 19 Apr 2026 04:38:38 +0300
Subject: [PATCH 26/62] Update starhubtvplus.com_en.channels.xml
---
.../starhubtvplus.com_en.channels.xml | 234 +++++++++---------
1 file changed, 118 insertions(+), 116 deletions(-)
diff --git a/sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml b/sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml
index cccb0d1ac..478d9e370 100644
--- a/sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml
+++ b/sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml
@@ -1,119 +1,121 @@
- Premier Sports
- Euronews HD
- Sony Entertainment Television
- HGTV
- TV5MONDE HD
- Hub Premier 3
- ABC Australia HD
- Hub Sports 2 HD
- DW English HD
- Nick Jr
- HISTORY HD
- TVB Jade HD
- TVB Xing He
- Citra Entertainment
- beIN Sports 4
- Asianet
- ETTV ASIA HD
- CTI TV HD
- BBC World News HD
- Zee TV
- France24
- Hub Premier 7
- Astro Warna HD
- Preview Channel
- Cartoonito HD
- beIN Sports HD
- Travelxp HD
- Discovery HD
- Cbeebies HD
- KTV HD
- Cartoon Network
- Dragon TV
- COLORS Tamil HD
- Cinema One Global
- Astro Sensasi HD
- Zee Cinema
- FIGHT SPORTS HD
- ADITHYA TV
- Arirang TV HD
- CGTN
- Zee Thirai
- Hub Premier 1
- Sky News HD
- Vannathirai
- TestChannel 996
- NHK WORLD - JAPAN HD
- The Filipino Channel HD
- beIN Sports 5
- Hub Premier 8
- Crime + Investigation HD
- Fox News Channel
- ONE (Malay)
- COLORS
- FashionTV HD
- Hub Sports 4 HD
- ONE HD
- Hits HD
- BBC Earth HD
- Bloomberg Originals
- Hub Sports 3 HD
- Asianet Movies
- SPOTV
- NHK World Premium HD
- Sun Music
- CNN HD
- Hub Sports 1 HD
- HBO Signature HD
- BBC Lifestyle
- TVBS Asia
- Celestial Movies HD
- Animax HD
- Hub Premier 5
- HBO Family HD
- Hub Premier 4
- Test 998
- TestChannel2
- SPOTV2
- TVBS-NEWS
- Hub Sports 7
- tvN HD
- TestChannel 993
- Bloomberg Television HD
- Nickelodeon Asia HD
- TestChannel1
- Hub Sports 6
- KBS World HD
- Vijay TV HD
- Karisma
- Hub VVDrama
- HITS MOVIES HD
- HBO Hits HD
- Kalaignar TV
- AXN HD
- Hub E City HD
- Phoenix InfoNews Channel HD
- beIN Sports 2 HD
- Sun TV
- SEA Today
- beIN Sports 3
- Hub E City HD
- SONY MAX
- Lifetime HD
- TestChannel 995
- ANC
- Phoenix Chinese Channel HD
- CCTV-4
- Hub Sports 5 HD
- Hub Premier 6
- CCM
- CNBC HD
- HBO HD
- Zee Tamil
- DreamWorks Channel HD
- ROCK Entertainment
- Hub Premier 2 (HD)
- Cinemax HD
+ SONY MAX
+ ONE HD
+ TV5MONDE HD
+ HBO Signature HD
+ ADITHYA TV
+ SPOTV2
+ Hub Sports 8 HD
+ Sun TV
+ KTV HD
+ Cinemax HD
+ Phoenix Chinese Channel HD
+ NHK World Premium HD
+ TestChannel 996
+ Hub Premier 6
+ Arirang TV HD
+ Vannathirai
+ Hub Premier 8
+ Hub Sports 3 HD
+ Hub Premier 1
+ Zee Cinema HD
+ Premier Sports
+ Hub Premier 2 (HD)
+ beIN SPORTS 2 HD
+ Kalaignar TV
+ NHK WORLD - JAPAN HD
+ Preview Channel
+ TVB Xing He HD
+ Crime + Investigation HD
+ beIN SPORTS 4 HD
+ beIN SPORTS HD
+ Sun Music
+ Hub Premier 3
+ TestChannel2
+ Nick Jr. HD
+ Hub Sports 5 HD
+ ETTV ASIA HD
+ BBC Lifestyle HD
+ Cinema One Global
+ Zee TV HD
+ KBS World HD
+ ABC Australia HD
+ HITS NOW
+ beIN SPORTS 5 HD
+ AXN HD
+ Test 998
+ Hub Premier 4
+ CNBC HD
+ Cbeebies HD
+ beIN SPORTS 3 HD
+ Hub Ruyi
+ Hub Sports 2 HD
+ Asianet
+ ONE (Malay)
+ CTI Asia HD
+ Hub Sports 4 HD
+ Cartoon Network
+ Hub VV Drama HD
+ DreamWorks HD
+ BBC News HD
+ Astro Warna HD
+ Hub E City HD
+ ANC
+ Karisma
+ AFN
+ Sky News HD
+ DW English HD
+ TVB Jade HD
+ Animax HD
+ Hub Sports 7 HD
+ CNN HD
+ COLORS Tamil HD
+ France24
+ Dragon TV
+ Lifetime HD
+ Cricbuzz 2
+ FashionTV HD
+ FIGHT SPORTS HD
+ The Filipino Channel HD
+ Hub E City HD
+ Hub Premier 5
+ Asianet Movies
+ Zee Tamil HD
+ Hits HD
+ Hub Sports 1 HD
+ Celestial Movies HD
+ CGTN
+ Cricbuzz
+ Vijay TV HD
+ COLORS
+ Nickelodeon Asia HD
+ ROCK Entertainment HD
+ HGTV HD
+ CCTV-4
+ Bloomberg Originals
+ Hub Sports 6 HD
+ Hub Premier 7
+ CCM
+ HBO Hits HD
+ Sony Entertainment Television
+ Discovery HD
+ Phoenix InfoNews Channel HD
+ HBO Family HD
+ HBO HD
+ HISTORY HD
+ TVBS Asia
+ TestChannel 993
+ Channel 251
+ SPOTV
+ Zee Thirai
+ TVBS-NEWS
+ Fox News Channel HD
+ Astro Sensasi HD
+ Travelxp HD
+ Citra Entertainment
+ HITS MOVIES HD
+ Bloomberg Television HD
+ Euronews HD
+ BBC Earth HD
From 3caabfba43f6212da3858ec1bb25b8e5f2920be2 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sun, 19 Apr 2026 04:38:46 +0300
Subject: [PATCH 27/62] Update starhubtvplus.com_zh.channels.xml
---
.../starhubtvplus.com_zh.channels.xml | 234 +++++++++---------
1 file changed, 118 insertions(+), 116 deletions(-)
diff --git a/sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml b/sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml
index 893f672ee..02665df7a 100644
--- a/sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml
+++ b/sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml
@@ -1,119 +1,121 @@
- Premier Sports
- Euronews HD
- Sony Entertainment Television
- HGTV
- TV5MONDE HD
- Hub Premier 3
- ABC Australia HD
- Hub Sports 2 HD
- DW English HD
- Nick Jr
- HISTORY HD
- TVB Jade HD
- TVB Xing He
- Citra Entertainment
- beIN Sports 4
- Asianet
- ETTV ASIA HD
- CTI TV HD
- BBC World News HD
- Zee TV
- France24
- Hub Premier 7
- Astro Warna HD
- Preview Channel
- Cartoonito HD
- beIN Sports HD
- Travelxp HD
- Discovery HD
- Cbeebies HD
- KTV HD
- Cartoon Network
- Dragon TV
- COLORS Tamil HD
- Cinema One Global
- Astro Sensasi HD
- Zee Cinema
- FIGHT SPORTS HD
- ADITHYA TV
- Arirang TV HD
- CGTN
- Zee Thirai
- Hub Premier 1
- Sky News HD
- Vannathirai
- TestChannel 996
- NHK WORLD - JAPAN HD
- The Filipino Channel HD
- beIN Sports 5
- Hub Premier 8
- Crime + Investigation HD
- Fox News Channel
- ONE (Malay)
- COLORS
- FashionTV HD
- Hub Sports 4 HD
- ONE HD
- Hits HD
- BBC Earth HD
- Bloomberg Originals
- Hub Sports 3 HD
- Asianet Movies
- SPOTV
- NHK World Premium HD
- Sun Music
- CNN HD
- Hub Sports 1 HD
- HBO Signature HD
- BBC Lifestyle
- TVBS Asia
- Celestial Movies HD
- Animax HD
- Hub Premier 5
- HBO Family HD
- Hub Premier 4
- Test 998
- TestChannel2
- SPOTV2
- TVBS-NEWS
- Hub Sports 7
- tvN HD
- TestChannel 993
- Bloomberg Television HD
- Nickelodeon Asia HD
- TestChannel1
- Hub Sports 6
- KBS World HD
- Vijay TV HD
- Karisma
- Hub VVDrama
- HITS MOVIES HD
- HBO Hits HD
- Kalaignar TV
- AXN HD
- Hub E City HD
- Phoenix InfoNews Channel HD
- beIN Sports 2 HD
- Sun TV
- SEA Today
- beIN Sports 3
- Hub E City HD
- SONY MAX
- Lifetime HD
- TestChannel 995
- ANC
- Phoenix Chinese Channel HD
- CCTV-4
- Hub Sports 5 HD
- Hub Premier 6
- CCM
- CNBC HD
- HBO HD
- Zee Tamil
- DreamWorks Channel HD
- ROCK Entertainment
- Hub Premier 2 (HD)
- Cinemax HD
+ SONY MAX
+ ONE HD
+ TV5MONDE HD
+ HBO Signature HD
+ ADITHYA TV
+ SPOTV2
+ Hub Sports 8
+ Sun TV
+ KTV HD
+ Cinemax HD
+ Phoenix Chinese Channel HD
+ NHK World Premium HD
+ TestChannel 996
+ Hub Premier 6
+ Arirang TV
+ Vannathirai
+ Hub Premier 8
+ Hub Sports 3 HD
+ Hub Premier 1
+ Zee Cinema
+ Premier Sports
+ Hub Premier 2 (HD)
+ beIN Sports 2 HD
+ Kalaignar TV
+ NHK WORLD - JAPAN
+ Preview Channel
+ TVB Xing He
+ Crime + Investigation HD
+ beIN SPORTS MAX 2 HD
+ beIN Sports HD
+ Sun Music
+ Hub Premier 3
+ TestChannel2
+ Nick Jr
+ Hub Sports 5 HD
+ ETTV ASIA HD
+ BBC Lifestyle
+ Cinema One Global
+ Zee TV
+ KBS World HD
+ ABC Australia
+ HITSNOW
+ beIN SPORTS MAX 3 HD
+ AXN HD
+ Test 998
+ Hub Premier 4
+ CNBC HD
+ Cbeebies HD
+ beIN Sports 3
+ Hub Ruyi
+ Hub Sports 2 HD
+ Asianet
+ ONE (Malay)
+ CTI TV HD
+ Hub Sports 4 HD
+ Cartoon Network
+ Hub VVDrama
+ DreamWorks Channel HD
+ BBC World News HD
+ Astro Warna
+ Hub E City HD
+ ANC
+ Karisma
+ AFN
+ Sky News HD
+ DW (Deutsch)
+ TVB Jade HD
+ Animax HD
+ Hub Sports 7
+ CNN HD
+ COLORS Tamil HD
+ France24
+ Dragon TV
+ Lifetime HD
+ Cricbuzz 2
+ FashionTV HD
+ FIGHT SPORTS HD
+ The Filipino Channel
+ Hub E City HD
+ Hub Premier 5
+ Asianet Movies
+ Zee Tamil
+ Hits HD
+ Hub Sports 1 HD
+ Celestial Movies HD
+ CGTN
+ Cricbuzz
+ Vijay TV
+ COLORS
+ Nickelodeon Asia HD
+ ROCK Entertainment
+ HGTV
+ CCTV-4
+ Bloomberg Quicktake
+ Hub Sports 6
+ Hub Premier 7
+ CCM
+ HBO Hits HD
+ Sony Entertainment Television
+ Discovery HD
+ Phoenix InfoNews Channel HD
+ HBO Family HD
+ HBO HD
+ HISTORY HD
+ TVBS Asia
+ TestChannel 993..
+ Channel 251
+ SPOTV
+ Zee Thirai
+ TVBS-NEWS
+ Fox News Channel
+ Hub Sensasi
+ Travelxp HD
+ Citra Entertainment
+ HITS MOVIES HD
+ Bloomberg Television HD
+ Euronews HD
+ BBC Earth HD
From ba064254cd3a66904294c13d0ab8bafa66c9d9a7 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sun, 19 Apr 2026 04:55:09 +0300
Subject: [PATCH 28/62] Update tvguide.com.test.js
---
sites/tvguide.com/tvguide.com.test.js | 24 +++++++-----------------
1 file changed, 7 insertions(+), 17 deletions(-)
diff --git a/sites/tvguide.com/tvguide.com.test.js b/sites/tvguide.com/tvguide.com.test.js
index 52aa40b16..6a6f9459b 100644
--- a/sites/tvguide.com/tvguide.com.test.js
+++ b/sites/tvguide.com/tvguide.com.test.js
@@ -17,29 +17,19 @@ const channel = {
}
it('can generate valid url', async () => {
- axios.get.mockImplementation(url => {
- if (url === 'https://www.tvguide.com/listings/') {
- return Promise.resolve({
- data: fs.readFileSync(path.join(__dirname, '__data__', 'content.html'), 'utf8')
- })
- }
- throw new Error(`Unexpected URL: ${url}`)
- })
-
const result = await url({ date })
expect(result).toBe(
- 'https://backend.tvguide.com/tvschedules/tvguide/9100001138/web?start=1753747200&duration=240&apiKey=DI9elXhZ3bU6ujsA2gXEKOANyncXGUGc'
+ 'https://backend.tvguide.com/tvschedules/tvguide/9100001138/web?start=1753747200&duration=240'
)
})
it('can parse response', async () => {
- const content = JSON.parse(fs.readFileSync(path.join(__dirname, '__data__', 'content.json'), 'utf-8'))
+ const content = JSON.parse(
+ fs.readFileSync(path.join(__dirname, '__data__', 'content.json'), 'utf-8')
+ )
axios.get.mockImplementation(url => {
- if (
- url ===
- 'https://backend.tvguide.com/tvschedules/tvguide/programdetails/9000058285/web'
- ) {
+ if (url === 'https://backend.tvguide.com/tvschedules/tvguide/programdetails/9000058285/web') {
return Promise.resolve({
data: JSON.parse(fs.readFileSync(path.join(__dirname, '__data__', 'program.json')))
})
@@ -61,10 +51,10 @@ it('can parse response', async () => {
title: 'Secrets of the Zoo: North Carolina',
sub_title: 'Chimp Off the Old Block',
description:
- 'Chimps living at the North Carolina Zoo, a zoo located in the center of North Carolina that serves as the world\'s largest natural habitat zoo, as well as one of two state-supported zoos, are cared for',
+ "Chimps living at the North Carolina Zoo, a zoo located in the center of North Carolina that serves as the world's largest natural habitat zoo, as well as one of two state-supported zoos, are cared for",
categories: ['Reality'],
season: 1,
- episode: 1,
+ episode: 1
})
})
From 8bf07f87c73d3933013f3b8a9c8cde4fce2aae7a Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Sun, 19 Apr 2026 02:00:17 +0000
Subject: [PATCH 29/62] [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/24618623535) workflow.
---
SITES.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/SITES.md b/SITES.md
index a3e5ba6ed..eda2b6ed2 100644
--- a/SITES.md
+++ b/SITES.md
@@ -234,7 +234,7 @@
An American cargo ship sets a dangerous course around the coast of Somalia, while inland,
- four men are pressed into service as pirates by the local warlords. The captain is taken
- hostage when the raiding party hijacks the vessel, resulting in a tense five-day crisis.
- Fact-based thriller, starring Tom Hanks and Barkhad Abdi
- Tom Hanks
- (Actor)
- .. Capt Richard Phillips
-
-
-
-
- Born:
-
- July 09, 1956
- in
- California
-
-
-
- Best Known For:
-
- Winning Oscars for Forrest Gump and Philadelphia
-
-
-
- Early-life:
-
- Born in California in 1956, Tom Hanks grew up in what he calls a "fractured"
- family. His parents were pioneers in the development of marriage dissolution law in that
- state, and Tom moved around a lot, living with a succession of step-families. Eager for
- a career in acting, he auditioned for a community theater play, was invited by the
- director of that play to go to Cleveland, and there his acting career started.
-
-
-
- Career:
-
- After several TV roles, Hanks made the transition to movies and became one of the
- biggest stars of the past three decades. His breakthrough came in 1984's Splash,
- and was followed by hit after hit, including Bachelor Party and Dragnet. When he took
- the lead in Oscar-nominated Big in 1988, he transformed a simple comedy into something
- much more powerful, before truly proving his acting credentials with an Oscar-winning
- turn as an Aids-afflicted laweyer in Philadeplhia. He gave terrific turns in romantic
- comedies like Sleepless in Seattle, then another Oscar followed for Forrest Gump. Many
- expected him to garner a third for Saving Private Ryan. He has been a successful
- director of several projects and helped bring iconic TV projects like Band of Brothers
- to the screen. Recent hits include The Da Vinci Code and its follow-up, and the Toy
- Story films.
-
-
-
- Quote:
-
- "My wife keeps on telling me my worst fault is that I keep things to myself and
- appear relaxed. But I am really in a room in my own head and not hearing a thing anyone
- is saying."
-
-
-
-
-
- Barkhad Abdi
- (Actor)
- .. Muse
-
-
-
-
- Catherine Keener
- (Actor)
- .. Andrea Phillips
-
-
-
-
- Born:
-
- March 23, 1959
- in
- Miami, Florida
-
-
-
- Best Known For:
-
- Playing Maxine Lund in Being John Malkovich.
-
-
-
- Early-life:
-
- Catherine Ann Keener was born in Miami, Florida on March 23, 1959. She has four
- siblings, including actress Elizabeth Keener. Catherine studied at Wheaton College in
- Massachusetts, where she graduated with a degree in English and history in 1983. While
- studying here, she joined a theatre course and appeared in her first theatrical
- production during her junior year.
-
-
-
- Career:
-
- Keener's first film appearance was a one-worded role as a waitress in About Last
- Night… (1986). She then went on to appear in Survival Quest (1988). After struggling in
- the industry for a number of years, she landed a part in Johnny Suede (1991) and began
- getting roles in independent films. Her mainstream breakthrough was in Being John
- Malkovich (1999). Since then, she has appeared in many more films, including Capote
- (2005), Into The Wild (2007), Captain Phillips (2013) and Get Out (2017).
-
-
-
- Quote:
-
- "Luck favours the prepared."
-
-
-
- Trivia:
-
- She was Oscar-nominated for Best Supporting Actress in 2000 for her performance in Being
- John Malkovich and in 2006 for her performance in Capote.
-
The artists are tasked with writing a song about their heritage.
- For some, the pressure of the competition proves too much for
- them to match. In their final challenge, they are put face to
- face with industry experts who grill them about their plans
- after the competition. Some impress, while others leave the
- mentors confused
- The artists are tasked with writing a song about
- their heritage. For some, the pressure of the
- competition proves too much for them to match. In
- their final challenge, they are put face to face
- with industry experts who grill them about their
- plans after the competition. Some impress, while
- others leave the mentors confused
-
You can not favourite a USA TV guide show, please go to settings to switch your country.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
From 99760756187e9a38a6fcd0c16312a73aa7f5284c Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sun, 19 Apr 2026 07:54:37 +0300
Subject: [PATCH 42/62] Update mytelly.co.uk.test.js
---
sites/mytelly.co.uk/mytelly.co.uk.test.js | 46 +++--------------------
1 file changed, 5 insertions(+), 41 deletions(-)
diff --git a/sites/mytelly.co.uk/mytelly.co.uk.test.js b/sites/mytelly.co.uk/mytelly.co.uk.test.js
index 6199a416f..ce61c4e9d 100644
--- a/sites/mytelly.co.uk/mytelly.co.uk.test.js
+++ b/sites/mytelly.co.uk/mytelly.co.uk.test.js
@@ -1,5 +1,4 @@
const { parser, url } = require('./mytelly.co.uk.config.js')
-const axios = require('axios')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
@@ -9,35 +8,12 @@ const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
-jest.mock('axios')
-
const date = dayjs.utc('2024-12-07', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '713/bbc-one-london',
xmltv_id: 'BBCOneLondon.uk'
}
-axios.get.mockImplementation(url => {
- if (
- url ===
- 'https://www.mytelly.co.uk/tv-guide/listings/programme?cid=713&pid=1906433&tm=2024-12-07+00%3A00%3A00'
- ) {
- return Promise.resolve({
- data: fs.readFileSync(path.join(__dirname, '__data__', 'programme.html'))
- })
- }
- if (
- url ===
- 'https://www.mytelly.co.uk/tv-guide/listings/programme?cid=713&pid=5656624&tm=2024-12-07+23%3A35%3A00'
- ) {
- return Promise.resolve({
- data: fs.readFileSync(path.join(__dirname, '__data__', 'programme2.html'))
- })
- }
-
- return Promise.resolve({ data: '' })
-})
-
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'https://www.mytelly.co.uk/tv-guide/listings/channel/713/bbc-one-london.html?dt=2024-12-07'
@@ -52,29 +28,17 @@ it('can parse response', async () => {
return p
})
- expect(results.length).toBe(2)
+ expect(results.length).toBe(25)
expect(results[0]).toMatchObject({
start: '2024-12-07T00:00:00.000Z',
stop: '2024-12-07T02:05:00.000Z',
- title: 'Captain Phillips',
- description:
- 'An American cargo ship sets a dangerous course around the coast of Somalia, while inland, four men are pressed into service as pirates by the local warlords. The captain is taken hostage when the raiding party hijacks the vessel, resulting in a tense five-day crisis. Fact-based thriller, starring Tom Hanks and Barkhad Abdi',
- image:
- 'https://d16ia5iwuvax6y.cloudfront.net/uk-prog-images/c44ce7b0d3ae602c0c93ece5af140815.jpg?k=VeeNdUjml3bSHdlZ0OXbGLy%2BmsLdYPwTV6iAxGkzq4dsylOCGGE7OWlqwSWt0cd0Qtrin4DkEMC0Zzdp8ZeNk2vNIQzjMF0DG0h3IeTR5NM%3D',
- category: ['Factual', 'Movie/Drama', 'Thriller']
+ title: 'Captain Phillips (2013)'
})
- expect(results[1]).toMatchObject({
+ expect(results[24]).toMatchObject({
start: '2024-12-07T23:35:00.000Z',
- stop: '2024-12-08T00:40:00.000Z',
+ stop: '2024-12-08T00:05:00.000Z',
title: 'The Rap Game UK',
- subTitle: 'Past and Pressure Season 6, Episode 5',
- description:
- 'The artists are tasked with writing a song about their heritage. For some, the pressure of the competition proves too much for them to match. In their final challenge, they are put face to face with industry experts who grill them about their plans after the competition. Some impress, while others leave the mentors confused',
- image:
- 'https://d16ia5iwuvax6y.cloudfront.net/uk-prog-images/2039278182b27cc279570b9ab9b89379.jpg?k=VeeNdUjml3bSHdlZ0OXbGLy%2BmsLdYPwTV6iAxGkzq4cDhR7jXTNFW3tgwQCdOPUobhXwlT81mIsqOe93HPusDG6tw1aoeYOgafojtynNWxc%3D',
- category: ['Challenge/Reality Show', 'Show/Game Show'],
- season: 6,
- episode: 5
+ subTitle: 'Past and Pressure - Season 6, Episode 5'
})
})
From 7a7a14548f7ca53c65c0cde85366e49f9d7b0730 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Sun, 19 Apr 2026 07:55:47 +0300
Subject: [PATCH 43/62] Update mytelly.co.uk.config.js
---
sites/mytelly.co.uk/mytelly.co.uk.config.js | 127 +++++---------------
1 file changed, 28 insertions(+), 99 deletions(-)
diff --git a/sites/mytelly.co.uk/mytelly.co.uk.config.js b/sites/mytelly.co.uk/mytelly.co.uk.config.js
index dbfd58e11..11584e60b 100644
--- a/sites/mytelly.co.uk/mytelly.co.uk.config.js
+++ b/sites/mytelly.co.uk/mytelly.co.uk.config.js
@@ -3,18 +3,11 @@ const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
-const doFetch = require('@ntlab/sfetch')
-const debug = require('debug')('site:mytelly.co.uk')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
-doFetch.setDebugger(debug)
-
-const detailedGuide = true
-const tz = 'Europe/London'
-
module.exports = {
site: 'mytelly.co.uk',
days: 2,
@@ -32,94 +25,35 @@ module.exports = {
async parser({ content, date }) {
const programs = []
- if (content) {
- const queues = []
- const $ = cheerio.load(content)
-
- $('table.table > tbody > tr')
- .toArray()
- .forEach(el => {
- const td = $(el).find('td:eq(1)')
- const title = td.find('h5 a')
- if (detailedGuide) {
- queues.push({ url: title.attr('href'), params: module.exports.request })
- } else {
- const subtitle = td.find('h6')
- const time = $(el).find('td:eq(0)')
- let start = parseTime(date, time.text().trim())
- const prev = programs[programs.length - 1]
- if (prev) {
- if (start.isBefore(prev.start)) {
- start = start.add(1, 'd')
- date = date.add(1, 'd')
- }
- prev.stop = start
- }
- const stop = start.add(30, 'm')
- programs.push({
- title: parseText(title),
- subTitle: parseText(subtitle),
- start,
- stop
- })
- }
- })
-
- 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
- })
- })
+ const items = parseItems(content)
+ items.forEach(item => {
+ const $item = cheerio.load(item)
+ const td = $item('td:eq(1)')
+ const title = td.find('h5 a')
+ const subtitle = td.find('h6')
+ const time = $item('td:eq(0)')
+ let start = parseTime(date, time.text().trim())
+ const prev = programs[programs.length - 1]
+ if (prev) {
+ if (start.isBefore(prev.start)) {
+ start = start.add(1, 'd')
+ date = date.add(1, 'd')
+ }
+ prev.stop = start
}
- }
+ const stop = start.add(30, 'm')
+ programs.push({
+ title: parseText(title),
+ subTitle: parseText(subtitle),
+ start,
+ stop
+ })
+ })
return programs
},
async channels() {
+ const doFetch = require('@ntlab/sfetch')
const channels = {}
const queues = [{ t: 'p', url: 'https://www.mytelly.co.uk/getform', params: this.request }]
await doFetch(queues, (queue, res) => {
@@ -182,19 +116,14 @@ 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')
- }
+function parseItems(content) {
+ const $ = cheerio.load(content)
- return [start, stop]
+ return $('table.table > tbody > tr').toArray()
}
function parseTime(date, time) {
- return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD H:mm a', tz)
+ return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD H:mm a', 'Europe/London')
}
function parseText($item) {
From 8ca2f37f264c48dc78fc42136aec7835d46929fb Mon Sep 17 00:00:00 2001
From: StrangeDrVN <172238701+StrangeDrVN@users.noreply.github.com>
Date: Sun, 19 Apr 2026 14:50:46 +0530
Subject: [PATCH 44/62] add xmltv_id + fix title/subTitle
---
.../starhubtvplus.com.config.js | 4 +-
.../starhubtvplus.com_en.channels.xml | 208 +++++++++---------
.../starhubtvplus.com_zh.channels.xml | 208 +++++++++---------
3 files changed, 210 insertions(+), 210 deletions(-)
diff --git a/sites/starhubtvplus.com/starhubtvplus.com.config.js b/sites/starhubtvplus.com/starhubtvplus.com.config.js
index c9710bae1..83234f258 100644
--- a/sites/starhubtvplus.com/starhubtvplus.com.config.js
+++ b/sites/starhubtvplus.com/starhubtvplus.com.config.js
@@ -46,8 +46,8 @@ module.exports = {
return programs.map(item => {
return {
- title: item.title,
- subTitle: item.serie_title,
+ title: item.serie_title || item.title,
+ subTitle: (item.serie_title && item.title && item.serie_title !== item.title) ? item.title : null,
description: item.description,
category: item.genres,
image: item.pictures?.map(img => img.url),
diff --git a/sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml b/sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml
index 478d9e370..dc936fb9f 100644
--- a/sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml
+++ b/sites/starhubtvplus.com/starhubtvplus.com_en.channels.xml
@@ -1,121 +1,121 @@
- SONY MAX
- ONE HD
- TV5MONDE HD
- HBO Signature HD
- ADITHYA TV
- SPOTV2
+ SONY MAX
+ ONE HD
+ TV5MONDE HD
+ HBO Signature HD
+ ADITHYA TV
+ SPOTV2Hub Sports 8 HD
- Sun TV
- KTV HD
- Cinemax HD
- Phoenix Chinese Channel HD
- NHK World Premium HD
+ Sun TV
+ KTV HD
+ Cinemax HD
+ Phoenix Chinese Channel HD
+ NHK World Premium HDTestChannel 996
- Hub Premier 6
- Arirang TV HD
- Vannathirai
- Hub Premier 8
- Hub Sports 3 HD
- Hub Premier 1
- Zee Cinema HD
- Premier Sports
- Hub Premier 2 (HD)
- beIN SPORTS 2 HD
- Kalaignar TV
- NHK WORLD - JAPAN HD
- Preview Channel
- TVB Xing He HD
- Crime + Investigation HD
- beIN SPORTS 4 HD
- beIN SPORTS HD
- Sun Music
- Hub Premier 3
+ Hub Premier 6
+ Arirang TV HD
+ Vannathirai
+ Hub Premier 8
+ Hub Sports 3 HD
+ Hub Premier 1
+ Zee Cinema HD
+ Premier Sports
+ Hub Premier 2 (HD)
+ beIN SPORTS 2 HD
+ Kalaignar TV
+ NHK WORLD - JAPAN HD
+ Preview Channel
+ TVB Xing He HD
+ Crime + Investigation HD
+ beIN SPORTS 4 HD
+ beIN SPORTS HD
+ Sun Music
+ Hub Premier 3TestChannel2
- Nick Jr. HD
+ Nick Jr. HDHub Sports 5 HDETTV ASIA HD
- BBC Lifestyle HD
- Cinema One Global
- Zee TV HD
- KBS World HD
- ABC Australia HD
- HITS NOW
- beIN SPORTS 5 HD
- AXN HD
+ BBC Lifestyle HD
+ Cinema One Global
+ Zee TV HD
+ KBS World HD
+ ABC Australia HD
+ HITS NOW
+ beIN SPORTS 5 HD
+ AXN HDTest 998
- Hub Premier 4
- CNBC HD
- Cbeebies HD
- beIN SPORTS 3 HD
+ Hub Premier 4
+ CNBC HD
+ Cbeebies HD
+ beIN SPORTS 3 HDHub Ruyi
- Hub Sports 2 HD
- Asianet
- ONE (Malay)
- CTI Asia HD
- Hub Sports 4 HD
- Cartoon Network
+ Hub Sports 2 HD
+ Asianet
+ ONE (Malay)
+ CTI Asia HD
+ Hub Sports 4 HD
+ Cartoon NetworkHub VV Drama HD
- DreamWorks HD
- BBC News HD
- Astro Warna HD
- Hub E City HD
- ANC
- Karisma
+ DreamWorks HD
+ BBC News HD
+ Astro Warna HD
+ Hub E City HD
+ ANC
+ KarismaAFN
- Sky News HD
- DW English HD
- TVB Jade HD
- Animax HD
+ Sky News HD
+ DW English HD
+ TVB Jade HD
+ Animax HDHub Sports 7 HD
- CNN HD
- COLORS Tamil HD
- France24
- Dragon TV
- Lifetime HD
+ CNN HD
+ COLORS Tamil HD
+ France24
+ Dragon TV
+ Lifetime HDCricbuzz 2
- FashionTV HD
- FIGHT SPORTS HD
- The Filipino Channel HD
- Hub E City HD
- Hub Premier 5
- Asianet Movies
- Zee Tamil HD
- Hits HD
- Hub Sports 1 HD
- Celestial Movies HD
- CGTN
+ FashionTV HD
+ FIGHT SPORTS HD
+ The Filipino Channel HD
+ Hub E City HD
+ Hub Premier 5
+ Asianet Movies
+ Zee Tamil HD
+ Hits HD
+ Hub Sports 1 HD
+ Celestial Movies HD
+ CGTNCricbuzz
- Vijay TV HD
- COLORS
- Nickelodeon Asia HD
- ROCK Entertainment HD
- HGTV HD
- CCTV-4
- Bloomberg Originals
+ Vijay TV HD
+ COLORS
+ Nickelodeon Asia HD
+ ROCK Entertainment HD
+ HGTV HD
+ CCTV-4
+ Bloomberg OriginalsHub Sports 6 HD
- Hub Premier 7
- CCM
- HBO Hits HD
- Sony Entertainment Television
- Discovery HD
- Phoenix InfoNews Channel HD
- HBO Family HD
- HBO HD
- HISTORY HD
- TVBS Asia
+ Hub Premier 7
+ CCM
+ HBO Hits HD
+ Sony Entertainment Television
+ Discovery HD
+ Phoenix InfoNews Channel HD
+ HBO Family HD
+ HBO HD
+ HISTORY HD
+ TVBS AsiaTestChannel 993Channel 251
- SPOTV
- Zee Thirai
- TVBS-NEWS
- Fox News Channel HD
- Astro Sensasi HD
- Travelxp HD
- Citra Entertainment
- HITS MOVIES HD
- Bloomberg Television HD
- Euronews HD
- BBC Earth HD
-
+ SPOTV
+ Zee Thirai
+ TVBS-NEWS
+ Fox News Channel HD
+ Astro Sensasi HD
+ Travelxp HD
+ Citra Entertainment
+ HITS MOVIES HD
+ Bloomberg Television HD
+ Euronews HD
+ BBC Earth HD
+
\ No newline at end of file
diff --git a/sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml b/sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml
index 02665df7a..3127abe4c 100644
--- a/sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml
+++ b/sites/starhubtvplus.com/starhubtvplus.com_zh.channels.xml
@@ -1,121 +1,121 @@
- SONY MAX
- ONE HD
- TV5MONDE HD
- HBO Signature HD
- ADITHYA TV
- SPOTV2
+ SONY MAX
+ ONE HD
+ TV5MONDE HD
+ HBO Signature HD
+ ADITHYA TV
+ SPOTV2Hub Sports 8
- Sun TV
- KTV HD
- Cinemax HD
- Phoenix Chinese Channel HD
- NHK World Premium HD
+ Sun TV
+ KTV HD
+ Cinemax HD
+ Phoenix Chinese Channel HD
+ NHK World Premium HDTestChannel 996
- Hub Premier 6
- Arirang TV
- Vannathirai
- Hub Premier 8
- Hub Sports 3 HD
- Hub Premier 1
- Zee Cinema
- Premier Sports
- Hub Premier 2 (HD)
- beIN Sports 2 HD
- Kalaignar TV
- NHK WORLD - JAPAN
- Preview Channel
- TVB Xing He
- Crime + Investigation HD
- beIN SPORTS MAX 2 HD
- beIN Sports HD
- Sun Music
- Hub Premier 3
+ Hub Premier 6
+ Arirang TV
+ Vannathirai
+ Hub Premier 8
+ Hub Sports 3 HD
+ Hub Premier 1
+ Zee Cinema
+ Premier Sports
+ Hub Premier 2 (HD)
+ beIN Sports 2 HD
+ Kalaignar TV
+ NHK WORLD - JAPAN
+ Preview Channel
+ TVB Xing He
+ Crime + Investigation HD
+ beIN SPORTS MAX 2 HD
+ beIN Sports HD
+ Sun Music
+ Hub Premier 3TestChannel2
- Nick Jr
+ Nick JrHub Sports 5 HDETTV ASIA HD
- BBC Lifestyle
- Cinema One Global
- Zee TV
- KBS World HD
- ABC Australia
- HITSNOW
- beIN SPORTS MAX 3 HD
- AXN HD
+ BBC Lifestyle
+ Cinema One Global
+ Zee TV
+ KBS World HD
+ ABC Australia
+ HITSNOW
+ beIN SPORTS MAX 3 HD
+ AXN HDTest 998
- Hub Premier 4
- CNBC HD
- Cbeebies HD
- beIN Sports 3
+ Hub Premier 4
+ CNBC HD
+ Cbeebies HD
+ beIN Sports 3Hub Ruyi
- Hub Sports 2 HD
- Asianet
- ONE (Malay)
- CTI TV HD
- Hub Sports 4 HD
- Cartoon Network
+ Hub Sports 2 HD
+ Asianet
+ ONE (Malay)
+ CTI TV HD
+ Hub Sports 4 HD
+ Cartoon NetworkHub VVDrama
- DreamWorks Channel HD
- BBC World News HD
- Astro Warna
- Hub E City HD
- ANC
- Karisma
+ DreamWorks Channel HD
+ BBC World News HD
+ Astro Warna
+ Hub E City HD
+ ANC
+ KarismaAFN
- Sky News HD
- DW (Deutsch)
- TVB Jade HD
- Animax HD
+ Sky News HD
+ DW (Deutsch)
+ TVB Jade HD
+ Animax HDHub Sports 7
- CNN HD
- COLORS Tamil HD
- France24
- Dragon TV
- Lifetime HD
+ CNN HD
+ COLORS Tamil HD
+ France24
+ Dragon TV
+ Lifetime HDCricbuzz 2
- FashionTV HD
- FIGHT SPORTS HD
- The Filipino Channel
- Hub E City HD
- Hub Premier 5
- Asianet Movies
- Zee Tamil
- Hits HD
- Hub Sports 1 HD
- Celestial Movies HD
- CGTN
+ FashionTV HD
+ FIGHT SPORTS HD
+ The Filipino Channel
+ Hub E City HD
+ Hub Premier 5
+ Asianet Movies
+ Zee Tamil
+ Hits HD
+ Hub Sports 1 HD
+ Celestial Movies HD
+ CGTNCricbuzz
- Vijay TV
- COLORS
- Nickelodeon Asia HD
- ROCK Entertainment
- HGTV
- CCTV-4
- Bloomberg Quicktake
+ Vijay TV
+ COLORS
+ Nickelodeon Asia HD
+ ROCK Entertainment
+ HGTV
+ CCTV-4
+ Bloomberg QuicktakeHub Sports 6
- Hub Premier 7
- CCM
- HBO Hits HD
- Sony Entertainment Television
- Discovery HD
- Phoenix InfoNews Channel HD
- HBO Family HD
- HBO HD
- HISTORY HD
- TVBS Asia
+ Hub Premier 7
+ CCM
+ HBO Hits HD
+ Sony Entertainment Television
+ Discovery HD
+ Phoenix InfoNews Channel HD
+ HBO Family HD
+ HBO HD
+ HISTORY HD
+ TVBS AsiaTestChannel 993..Channel 251
- SPOTV
- Zee Thirai
- TVBS-NEWS
- Fox News Channel
- Hub Sensasi
- Travelxp HD
- Citra Entertainment
- HITS MOVIES HD
- Bloomberg Television HD
- Euronews HD
- BBC Earth HD
-
+ SPOTV
+ Zee Thirai
+ TVBS-NEWS
+ Fox News Channel
+ Hub Sensasi
+ Travelxp HD
+ Citra Entertainment
+ HITS MOVIES HD
+ Bloomberg Television HD
+ Euronews HD
+ BBC Earth HD
+
\ No newline at end of file
From 9097c035c1e44ccc7c6a51952d8dc533f6604e4a Mon Sep 17 00:00:00 2001
From: StrangeDrVN <172238701+StrangeDrVN@users.noreply.github.com>
Date: Sun, 19 Apr 2026 14:56:31 +0530
Subject: [PATCH 45/62] update test
---
sites/starhubtvplus.com/starhubtvplus.com.test.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sites/starhubtvplus.com/starhubtvplus.com.test.js b/sites/starhubtvplus.com/starhubtvplus.com.test.js
index 78d97c5bf..eef099198 100644
--- a/sites/starhubtvplus.com/starhubtvplus.com.test.js
+++ b/sites/starhubtvplus.com/starhubtvplus.com.test.js
@@ -33,8 +33,8 @@ it('can parse response', async () => {
{
start: '2024-12-03T17:25:00.000Z',
stop: '2024-12-03T18:20:00.000Z',
- title: 'Northern Rexposure',
- subTitle: 'Hudson & Rex (Season 5)',
+ title: 'Hudson & Rex (Season 5)',
+ subTitle: 'Northern Rexposure',
description:
"When Jesse's sister contacts him for help, he, Sarah and Rex head to Northern Ontario and find themselves in the middle of a deadly situation.",
category: ['Drama'],
From 2862e9a84df654f6920f1f9a431f771d4f9fdb97 Mon Sep 17 00:00:00 2001
From: StrangeDrVN <172238701+StrangeDrVN@users.noreply.github.com>
Date: Sun, 19 Apr 2026 21:58:00 +0530
Subject: [PATCH 46/62] update content
---
sites/mewatch.sg/__data__/content.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sites/mewatch.sg/__data__/content.json b/sites/mewatch.sg/__data__/content.json
index 81c223b32..306e5f233 100644
--- a/sites/mewatch.sg/__data__/content.json
+++ b/sites/mewatch.sg/__data__/content.json
@@ -1 +1 @@
-[{"channelId":"97098","startDate":"2022-06-11T21:00:00.000Z","endDate":"2022-06-12T21:00:00.000Z","schedules":[{"channelId":"97098","customId":"37040748","endDate":"2022-06-11T21:30:00Z","id":"788a7dd","live":false,"startDate":"2022-06-11T21:00:00Z","isGap":false,"InteractiveType":"0","item":{"type":"episode","title":"Open Homes S3 - EP 2","blackoutMessage":"Programme is not available for live streaming.","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.","classification":{"code":"IMDA-G (Violence)","name":"G (Violence)"},"episodeNumber":2,"episodeTitle":"Collaroy, Sydney","seasonNumber":3,"images":{"wallpaper":"https://production.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='4853691'&EntityType='LinearSchedule'&EntityId='788a7dd9-9b12-446f-91b4-c8ac9fec95e5'&Width=1280&Height=720&device=web_browser&subscriptions=Anonymous&segmentationTags=all","tile":"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"},"enableCatchUp":true,"enableStartOver":false,"enableSeeking":false,"programSource":"ACQUIRED","simulcast":"LOCAL","masterReferenceKey":"0CH50CH5A0105567800020A0000000000P3254400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}}]}]
\ No newline at end of file
+[{"schedules":[{"item":{"blackout":false,"episodeTitle":"Why Am I A Teacher?!","episodeNumber":4,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"After arriving in Rotsgard, Makoto and Shiki gather info for their new store but soon help a girl named Luria in trouble.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='fdb1a2e4-efe5-41dd-8560-84d4c3f50459'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651061'&EntityType='LinearSchedule'&EntityId='fdb1a2e4-efe5-41dd-8560-84d4c3f50459'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651065'&EntityType='LinearSchedule'&EntityId='fdb1a2e4-efe5-41dd-8560-84d4c3f50459'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - Why Am I A Teacher?!"},"channelId":"571922","customId":"48551936","endDate":"2026-04-19T00:30:00Z","id":"fdb1a2e","live":false,"startDate":"2026-04-19T00:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Lesson Will Now Begin","episodeNumber":5,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Makoto passes the teacher recruitment exam and starts as an adjunct at a school. Meanwhile, Tsubasa investigates a lake linked to a war.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='9f3e2685-47a8-45ad-bc9f-5853ca3b4299'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650998'&EntityType='LinearSchedule'&EntityId='9f3e2685-47a8-45ad-bc9f-5853ca3b4299'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651002'&EntityType='LinearSchedule'&EntityId='9f3e2685-47a8-45ad-bc9f-5853ca3b4299'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - The Lesson Will Now Begin"},"channelId":"571922","customId":"48551937","endDate":"2026-04-19T01:00:00Z","id":"9f3e268","live":false,"startDate":"2026-04-19T00:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Letter From A Friend","episodeNumber":19,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Morihito finds Nico’s childhood letter and visits his late mother’s grave, while the others listen to their story.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='dd632c11-54fb-4eea-bf4e-988398b3bc77'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650920'&EntityType='LinearSchedule'&EntityId='dd632c11-54fb-4eea-bf4e-988398b3bc77'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650924'&EntityType='LinearSchedule'&EntityId='dd632c11-54fb-4eea-bf4e-988398b3bc77'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - Letter From A Friend"},"channelId":"571922","customId":"48551938","endDate":"2026-04-19T01:30:00Z","id":"dd632c1","live":false,"startDate":"2026-04-19T01:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Lost Wolf And The Stray Cat","episodeNumber":20,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Keigo feels useless untransformed. Nico gives him a flying-magic ring, and he begins training. One day, Nemu visits him.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='360a0182-5f3b-446a-804a-ca0a0d6471c7'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651129'&EntityType='LinearSchedule'&EntityId='360a0182-5f3b-446a-804a-ca0a0d6471c7'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651133'&EntityType='LinearSchedule'&EntityId='360a0182-5f3b-446a-804a-ca0a0d6471c7'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - The Lost Wolf And The Stray Cat"},"channelId":"571922","customId":"48551939","endDate":"2026-04-19T02:00:00Z","id":"360a018","live":false,"startDate":"2026-04-19T01:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Keiko's Carefree Style / Secret Urges / Jekyll Visits The Otogi House","episodeNumber":21,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Keigo's channel was struggling with few viewers. He asks Nico to appear but is turned down.Then Nico has a great idea.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='bacddfb7-45d1-4f85-a053-ddc505dd675a'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650973'&EntityType='LinearSchedule'&EntityId='bacddfb7-45d1-4f85-a053-ddc505dd675a'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650977'&EntityType='LinearSchedule'&EntityId='bacddfb7-45d1-4f85-a053-ddc505dd675a'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - Keiko's Carefree Style / Secret Urges / Jekyll Visits The Otogi House"},"channelId":"571922","customId":"48551940","endDate":"2026-04-19T02:30:00Z","id":"bacddfb","live":false,"startDate":"2026-04-19T02:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Incredible Shrinking Adventure / The Hamazaki Fall Bread Festival / Lucky Birthday","episodeNumber":22,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Nico shrinks herself and Morihito to experience the magical candy land every girl dreams of, rolling in donuts.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='0cdde1a1-8b43-49ae-b545-9803d15e4e8d'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651069'&EntityType='LinearSchedule'&EntityId='0cdde1a1-8b43-49ae-b545-9803d15e4e8d'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651073'&EntityType='LinearSchedule'&EntityId='0cdde1a1-8b43-49ae-b545-9803d15e4e8d'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - The Incredible Shrinking Adventure / The Hamazaki Fall Bread Festival / Lucky Birthday"},"channelId":"571922","customId":"48551941","endDate":"2026-04-19T03:00:00Z","id":"0cdde1a","live":false,"startDate":"2026-04-19T02:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Villainess And Sits This One Out","episodeNumber":7,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG","name":"PG"},"description":"Alicia promised her father she’d reach magic level 90 to stay Liz’s overseer, secluding herself in a shed to train.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='be852a11-4107-4793-bf17-ecad287b1bc7'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650981'&EntityType='LinearSchedule'&EntityId='be852a11-4107-4793-bf17-ecad287b1bc7'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650986'&EntityType='LinearSchedule'&EntityId='be852a11-4107-4793-bf17-ecad287b1bc7'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"I'll Become A Villainess Who Goes Down In History - The Villainess And Sits This One Out"},"channelId":"571922","customId":"48551942","endDate":"2026-04-19T03:30:00Z","id":"be852a1","live":false,"startDate":"2026-04-19T03:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Villainess And The Return","episodeNumber":8,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG","name":"PG"},"description":"After two years of training, Alicia sets out for the village of Roana, where she achieves something remarkable.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='9d9cc602-ac29-46fd-bf89-b045ef470e51'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651138'&EntityType='LinearSchedule'&EntityId='9d9cc602-ac29-46fd-bf89-b045ef470e51'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651142'&EntityType='LinearSchedule'&EntityId='9d9cc602-ac29-46fd-bf89-b045ef470e51'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"I'll Become A Villainess Who Goes Down In History - The Villainess And The Return"},"channelId":"571922","customId":"48551943","endDate":"2026-04-19T04:00:00Z","id":"9d9cc60","live":false,"startDate":"2026-04-19T03:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Luffy And Ace! The Story Of How The Brothers Met!","episodeNumber":493,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Luffy faces the greatest battle yet, as pirates and marines clash in a war that will reshape the era.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='4f7827c9-2aa4-4a61-bd88-ba48685ef717'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650928'&EntityType='LinearSchedule'&EntityId='4f7827c9-2aa4-4a61-bd88-ba48685ef717'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650931'&EntityType='LinearSchedule'&EntityId='4f7827c9-2aa4-4a61-bd88-ba48685ef717'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"One Piece: Marineford Arc - Luffy And Ace! The Story Of How The Brothers Met!"},"channelId":"571922","customId":"48551944","endDate":"2026-04-19T04:30:00Z","id":"4f7827c","live":false,"startDate":"2026-04-19T04:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Here Comes Sabo! The Boy At The Gray Terminal!","episodeNumber":494,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Luffy faces the greatest battle yet, as pirates and marines clash in a war that will reshape the era.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='8c1b8611-d4fe-4aa4-a029-402816185ec8'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651146'&EntityType='LinearSchedule'&EntityId='8c1b8611-d4fe-4aa4-a029-402816185ec8'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651149'&EntityType='LinearSchedule'&EntityId='8c1b8611-d4fe-4aa4-a029-402816185ec8'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"One Piece: Marineford Arc - Here Comes Sabo! The Boy At The Gray Terminal!"},"channelId":"571922","customId":"48551945","endDate":"2026-04-19T05:00:00Z","id":"8c1b861","live":false,"startDate":"2026-04-19T04:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"I Won't Run! Ace's Desperate Rescue Operation!","episodeNumber":495,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Luffy faces the greatest battle yet, as pirates and marines clash in a war that will reshape the era.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='2fc75eb6-298e-4c80-904e-af9462d4e3d8'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651154'&EntityType='LinearSchedule'&EntityId='2fc75eb6-298e-4c80-904e-af9462d4e3d8'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651159'&EntityType='LinearSchedule'&EntityId='2fc75eb6-298e-4c80-904e-af9462d4e3d8'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"One Piece: Marineford Arc - I Won't Run! Ace's Desperate Rescue Operation!"},"channelId":"571922","customId":"48551946","endDate":"2026-04-19T05:30:00Z","id":"2fc75eb","live":false,"startDate":"2026-04-19T05:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Letter From A Friend","episodeNumber":19,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Morihito finds Nico’s childhood letter and visits his late mother’s grave, while the others listen to their story.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='61f24aaf-4b54-499b-8038-1acfef553f9e'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651162'&EntityType='LinearSchedule'&EntityId='61f24aaf-4b54-499b-8038-1acfef553f9e'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651165'&EntityType='LinearSchedule'&EntityId='61f24aaf-4b54-499b-8038-1acfef553f9e'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - Letter From A Friend"},"channelId":"571922","customId":"48551947","endDate":"2026-04-19T06:00:00Z","id":"61f24aa","live":false,"startDate":"2026-04-19T05:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Lost Wolf And The Stray Cat","episodeNumber":20,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Keigo feels useless untransformed. Nico gives him a flying-magic ring, and he begins training. One day, Nemu visits him.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='49362b8b-1c75-46b7-ad78-f22362bd06ff'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650934'&EntityType='LinearSchedule'&EntityId='49362b8b-1c75-46b7-ad78-f22362bd06ff'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650938'&EntityType='LinearSchedule'&EntityId='49362b8b-1c75-46b7-ad78-f22362bd06ff'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - The Lost Wolf And The Stray Cat"},"channelId":"571922","customId":"48551948","endDate":"2026-04-19T06:30:00Z","id":"49362b8","live":false,"startDate":"2026-04-19T06:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Keiko's Carefree Style / Secret Urges / Jekyll Visits The Otogi House","episodeNumber":21,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Keigo's channel was struggling with few viewers. He asks Nico to appear but is turned down.Then Nico has a great idea.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='f0622727-9e9c-41ea-8327-f2d229196953'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651023'&EntityType='LinearSchedule'&EntityId='f0622727-9e9c-41ea-8327-f2d229196953'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651026'&EntityType='LinearSchedule'&EntityId='f0622727-9e9c-41ea-8327-f2d229196953'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - Keiko's Carefree Style / Secret Urges / Jekyll Visits The Otogi House"},"channelId":"571922","customId":"48551949","endDate":"2026-04-19T07:00:00Z","id":"f062272","live":false,"startDate":"2026-04-19T06:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Incredible Shrinking Adventure / The Hamazaki Fall Bread Festival / Lucky Birthday","episodeNumber":22,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Nico shrinks herself and Morihito to experience the magical candy land every girl dreams of, rolling in donuts.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='db1a4efb-1f22-4777-8e33-54e5661211db'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650942'&EntityType='LinearSchedule'&EntityId='db1a4efb-1f22-4777-8e33-54e5661211db'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650946'&EntityType='LinearSchedule'&EntityId='db1a4efb-1f22-4777-8e33-54e5661211db'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - The Incredible Shrinking Adventure / The Hamazaki Fall Bread Festival / Lucky Birthday"},"channelId":"571922","customId":"48551950","endDate":"2026-04-19T07:30:00Z","id":"db1a4ef","live":false,"startDate":"2026-04-19T07:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Stellar Wars","episodeNumber":3,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Hibiki and Tomoki clash before the battle to reclaim Stella Fortress, where hidden demonic traps await the human army.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='280e1561-ee4c-43e2-90c1-1b635d30f690'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651006'&EntityType='LinearSchedule'&EntityId='280e1561-ee4c-43e2-90c1-1b635d30f690'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651011'&EntityType='LinearSchedule'&EntityId='280e1561-ee4c-43e2-90c1-1b635d30f690'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - Stellar Wars"},"channelId":"571922","customId":"48551951","endDate":"2026-04-19T08:00:00Z","id":"280e156","live":false,"startDate":"2026-04-19T07:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Why Am I A Teacher?!","episodeNumber":4,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"After arriving in Rotsgard, Makoto and Shiki gather info for their new store but soon help a girl named Luria in trouble.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='aec7a52a-bde1-4fa5-8f98-697b7027937e'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650840'&EntityType='LinearSchedule'&EntityId='aec7a52a-bde1-4fa5-8f98-697b7027937e'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650846'&EntityType='LinearSchedule'&EntityId='aec7a52a-bde1-4fa5-8f98-697b7027937e'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - Why Am I A Teacher?!"},"channelId":"571922","customId":"48551952","endDate":"2026-04-19T08:30:00Z","id":"aec7a52","live":false,"startDate":"2026-04-19T08:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Lesson Will Now Begin","episodeNumber":5,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Makoto passes the teacher recruitment exam and starts as an adjunct at a school. Meanwhile, Tsubasa investigates a lake linked to a war.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='bd01cfb6-7249-49fd-9848-21c0cd140ef3'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651030'&EntityType='LinearSchedule'&EntityId='bd01cfb6-7249-49fd-9848-21c0cd140ef3'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651034'&EntityType='LinearSchedule'&EntityId='bd01cfb6-7249-49fd-9848-21c0cd140ef3'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - The Lesson Will Now Begin"},"channelId":"571922","customId":"48551953","endDate":"2026-04-19T09:00:00Z","id":"bd01cfb","live":false,"startDate":"2026-04-19T08:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Godzilla Minus One","blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"In postwar Japan, a new terror rises; Godzilla. Will the devastated people be able to survive... let alone fight back?","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='bd153223-6b8d-4e9d-92b7-8047a7c76f0d'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651039'&EntityType='LinearSchedule'&EntityId='bd153223-6b8d-4e9d-92b7-8047a7c76f0d'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651043'&EntityType='LinearSchedule'&EntityId='bd153223-6b8d-4e9d-92b7-8047a7c76f0d'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"program","title":"Godzilla Minus One - Godzilla Minus One"},"channelId":"571922","customId":"48551954","endDate":"2026-04-19T11:30:00Z","id":"bd15322","live":false,"startDate":"2026-04-19T09:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Stellar Wars","episodeNumber":3,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Hibiki and Tomoki clash before the battle to reclaim Stella Fortress, where hidden demonic traps await the human army.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='8323777c-48fa-4822-b109-0fe298fab810'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650950'&EntityType='LinearSchedule'&EntityId='8323777c-48fa-4822-b109-0fe298fab810'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650955'&EntityType='LinearSchedule'&EntityId='8323777c-48fa-4822-b109-0fe298fab810'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - Stellar Wars"},"channelId":"571922","customId":"48551955","endDate":"2026-04-19T12:00:00Z","id":"8323777","live":false,"startDate":"2026-04-19T11:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Why Am I A Teacher?!","episodeNumber":4,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"After arriving in Rotsgard, Makoto and Shiki gather info for their new store but soon help a girl named Luria in trouble.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='39de8a48-6200-4e5b-b43e-9764367243c5'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651014'&EntityType='LinearSchedule'&EntityId='39de8a48-6200-4e5b-b43e-9764367243c5'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651018'&EntityType='LinearSchedule'&EntityId='39de8a48-6200-4e5b-b43e-9764367243c5'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - Why Am I A Teacher?!"},"channelId":"571922","customId":"48551956","endDate":"2026-04-19T12:28:00Z","id":"39de8a4","live":false,"startDate":"2026-04-19T12:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Lesson Will Now Begin","episodeNumber":5,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Makoto passes the teacher recruitment exam and starts as an adjunct at a school. Meanwhile, Tsubasa investigates a lake linked to a war.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='a0accdce-f4d3-4749-ae60-38291b4ce76f'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651078'&EntityType='LinearSchedule'&EntityId='a0accdce-f4d3-4749-ae60-38291b4ce76f'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651082'&EntityType='LinearSchedule'&EntityId='a0accdce-f4d3-4749-ae60-38291b4ce76f'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - The Lesson Will Now Begin"},"channelId":"571922","customId":"48551957","endDate":"2026-04-19T13:00:00Z","id":"a0accdc","live":false,"startDate":"2026-04-19T12:28:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Letter From A Friend","episodeNumber":19,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Morihito finds Nico’s childhood letter and visits his late mother’s grave, while the others listen to their story.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='0550e1bf-cf1b-40c4-a70e-6ae7342a30bf'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650958'&EntityType='LinearSchedule'&EntityId='0550e1bf-cf1b-40c4-a70e-6ae7342a30bf'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650962'&EntityType='LinearSchedule'&EntityId='0550e1bf-cf1b-40c4-a70e-6ae7342a30bf'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - Letter From A Friend"},"channelId":"571922","customId":"48551958","endDate":"2026-04-19T13:28:00Z","id":"0550e1b","live":false,"startDate":"2026-04-19T13:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Lost Wolf And The Stray Cat","episodeNumber":20,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Keigo feels useless untransformed. Nico gives him a flying-magic ring, and he begins training. One day, Nemu visits him.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='3d303384-749a-4c5c-a558-65863d4b5f7b'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650852'&EntityType='LinearSchedule'&EntityId='3d303384-749a-4c5c-a558-65863d4b5f7b'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650858'&EntityType='LinearSchedule'&EntityId='3d303384-749a-4c5c-a558-65863d4b5f7b'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - The Lost Wolf And The Stray Cat"},"channelId":"571922","customId":"48551959","endDate":"2026-04-19T13:58:00Z","id":"3d30338","live":false,"startDate":"2026-04-19T13:28:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Keiko's Carefree Style / Secret Urges / Jekyll Visits The Otogi House","episodeNumber":21,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Keigo's channel was struggling with few viewers. He asks Nico to appear but is turned down.Then Nico has a great idea.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='b92a1d95-0ae2-4eea-8292-3bd9abb49323'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650864'&EntityType='LinearSchedule'&EntityId='b92a1d95-0ae2-4eea-8292-3bd9abb49323'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650868'&EntityType='LinearSchedule'&EntityId='b92a1d95-0ae2-4eea-8292-3bd9abb49323'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - Keiko's Carefree Style / Secret Urges / Jekyll Visits The Otogi House"},"channelId":"571922","customId":"48551960","endDate":"2026-04-19T14:28:00Z","id":"b92a1d9","live":false,"startDate":"2026-04-19T13:58:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Incredible Shrinking Adventure / The Hamazaki Fall Bread Festival / Lucky Birthday","episodeNumber":22,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Nico shrinks herself and Morihito to experience the magical candy land every girl dreams of, rolling in donuts.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='3407f829-d483-4eef-8037-209e6e9ea876'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651086'&EntityType='LinearSchedule'&EntityId='3407f829-d483-4eef-8037-209e6e9ea876'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651090'&EntityType='LinearSchedule'&EntityId='3407f829-d483-4eef-8037-209e6e9ea876'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - The Incredible Shrinking Adventure / The Hamazaki Fall Bread Festival / Lucky Birthday"},"channelId":"571922","customId":"48551961","endDate":"2026-04-19T15:00:00Z","id":"3407f82","live":false,"startDate":"2026-04-19T14:28:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"You Look Like You’re Having Fun","episodeNumber":12,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"It is a new school year, and Tohru is excited to see Momiji and Hatsuharu as first year students in their school.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='09ff6b30-b223-4fb2-b1e5-4537cc595d7f'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650965'&EntityType='LinearSchedule'&EntityId='09ff6b30-b223-4fb2-b1e5-4537cc595d7f'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13650969'&EntityType='LinearSchedule'&EntityId='09ff6b30-b223-4fb2-b1e5-4537cc595d7f'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Fruits Basket Season 1 - You Look Like You’re Having Fun"},"channelId":"571922","customId":"48551962","endDate":"2026-04-19T15:30:00Z","id":"09ff6b3","live":false,"startDate":"2026-04-19T15:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"How Have You Been, My Brother?","episodeNumber":13,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"While out at the vegetable patch, Tohru encounters a snake which turns out to be Kyo's older brother Ayame.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='ce3f3183-4fc4-4517-8606-bded9b2e5ebd'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651103'&EntityType='LinearSchedule'&EntityId='ce3f3183-4fc4-4517-8606-bded9b2e5ebd'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651107'&EntityType='LinearSchedule'&EntityId='ce3f3183-4fc4-4517-8606-bded9b2e5ebd'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Fruits Basket Season 1 - How Have You Been, My Brother?"},"channelId":"571922","customId":"48551963","endDate":"2026-04-19T15:58:00Z","id":"ce3f318","live":false,"startDate":"2026-04-19T15:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"That’s A Secret","episodeNumber":14,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"It has been a year since Tohru's mother passed away. At her part time job, Momiji tells Tohru about his family.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='541cbca7-6814-443d-b98d-55905e9b5438'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651094'&EntityType='LinearSchedule'&EntityId='541cbca7-6814-443d-b98d-55905e9b5438'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651098'&EntityType='LinearSchedule'&EntityId='541cbca7-6814-443d-b98d-55905e9b5438'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Fruits Basket Season 1 - That’s A Secret"},"channelId":"571922","customId":"48551964","endDate":"2026-04-19T16:30:00Z","id":"541cbca","live":false,"startDate":"2026-04-19T15:58:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Luffy And Ace! The Story Of How The Brothers Met!","episodeNumber":493,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Luffy faces the greatest battle yet, as pirates and marines clash in a war that will reshape the era.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='4c310ccf-8b3d-4035-8718-0e968a85156a'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663022'&EntityType='LinearSchedule'&EntityId='4c310ccf-8b3d-4035-8718-0e968a85156a'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663030'&EntityType='LinearSchedule'&EntityId='4c310ccf-8b3d-4035-8718-0e968a85156a'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"One Piece: Marineford Arc - Luffy And Ace! The Story Of How The Brothers Met!"},"channelId":"571922","customId":"48551965","endDate":"2026-04-19T17:00:00Z","id":"4c310cc","live":false,"startDate":"2026-04-19T16:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Here Comes Sabo! The Boy At The Gray Terminal!","episodeNumber":494,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Luffy faces the greatest battle yet, as pirates and marines clash in a war that will reshape the era.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='0f3caeb4-1632-4053-9c3d-0f07c853964b'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663039'&EntityType='LinearSchedule'&EntityId='0f3caeb4-1632-4053-9c3d-0f07c853964b'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663046'&EntityType='LinearSchedule'&EntityId='0f3caeb4-1632-4053-9c3d-0f07c853964b'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"One Piece: Marineford Arc - Here Comes Sabo! The Boy At The Gray Terminal!"},"channelId":"571922","customId":"48556028","endDate":"2026-04-19T17:30:00Z","id":"0f3caeb","live":false,"startDate":"2026-04-19T17:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"I Won't Run! Ace's Desperate Rescue Operation!","episodeNumber":495,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Luffy faces the greatest battle yet, as pirates and marines clash in a war that will reshape the era.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='8ea36579-e6b9-4393-a7c7-8800bdcbe460'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13662912'&EntityType='LinearSchedule'&EntityId='8ea36579-e6b9-4393-a7c7-8800bdcbe460'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13662919'&EntityType='LinearSchedule'&EntityId='8ea36579-e6b9-4393-a7c7-8800bdcbe460'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"One Piece: Marineford Arc - I Won't Run! Ace's Desperate Rescue Operation!"},"channelId":"571922","customId":"48556029","endDate":"2026-04-19T18:00:00Z","id":"8ea3657","live":false,"startDate":"2026-04-19T17:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Villainess And Sits This One Out","episodeNumber":7,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG","name":"PG"},"description":"Alicia promised her father she’d reach magic level 90 to stay Liz’s overseer, secluding herself in a shed to train.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='f5925563-652a-49e5-89c1-0670f68734c9'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663215'&EntityType='LinearSchedule'&EntityId='f5925563-652a-49e5-89c1-0670f68734c9'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663224'&EntityType='LinearSchedule'&EntityId='f5925563-652a-49e5-89c1-0670f68734c9'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"I'll Become A Villainess Who Goes Down In History - The Villainess And Sits This One Out"},"channelId":"571922","customId":"48556030","endDate":"2026-04-19T18:30:00Z","id":"f592556","live":false,"startDate":"2026-04-19T18:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Villainess And The Return","episodeNumber":8,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG","name":"PG"},"description":"After two years of training, Alicia sets out for the village of Roana, where she achieves something remarkable.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='3966e13e-bff7-4b31-a835-378d43c9c87b'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663234'&EntityType='LinearSchedule'&EntityId='3966e13e-bff7-4b31-a835-378d43c9c87b'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663242'&EntityType='LinearSchedule'&EntityId='3966e13e-bff7-4b31-a835-378d43c9c87b'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"I'll Become A Villainess Who Goes Down In History - The Villainess And The Return"},"channelId":"571922","customId":"48556031","endDate":"2026-04-19T19:00:00Z","id":"3966e13","live":false,"startDate":"2026-04-19T18:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"You Look Like You’re Having Fun","episodeNumber":12,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"It is a new school year, and Tohru is excited to see Momiji and Hatsuharu as first year students in their school.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='b86ad096-7b3f-42f6-92aa-6fa3fca78635'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663054'&EntityType='LinearSchedule'&EntityId='b86ad096-7b3f-42f6-92aa-6fa3fca78635'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663059'&EntityType='LinearSchedule'&EntityId='b86ad096-7b3f-42f6-92aa-6fa3fca78635'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Fruits Basket Season 1 - You Look Like You’re Having Fun"},"channelId":"571922","customId":"48556032","endDate":"2026-04-19T19:30:00Z","id":"b86ad09","live":false,"startDate":"2026-04-19T19:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"How Have You Been, My Brother?","episodeNumber":13,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"While out at the vegetable patch, Tohru encounters a snake which turns out to be Kyo's older brother Ayame.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='00507779-07b3-490c-a528-c67cb3a5fe21'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663366'&EntityType='LinearSchedule'&EntityId='00507779-07b3-490c-a528-c67cb3a5fe21'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663373'&EntityType='LinearSchedule'&EntityId='00507779-07b3-490c-a528-c67cb3a5fe21'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Fruits Basket Season 1 - How Have You Been, My Brother?"},"channelId":"571922","customId":"48556033","endDate":"2026-04-19T20:00:00Z","id":"0050777","live":false,"startDate":"2026-04-19T19:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"That’s A Secret","episodeNumber":14,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"It has been a year since Tohru's mother passed away. At her part time job, Momiji tells Tohru about his family.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='038e5f4f-3290-4120-b87e-8caf7a59d2e1'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13662927'&EntityType='LinearSchedule'&EntityId='038e5f4f-3290-4120-b87e-8caf7a59d2e1'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13662935'&EntityType='LinearSchedule'&EntityId='038e5f4f-3290-4120-b87e-8caf7a59d2e1'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Fruits Basket Season 1 - That’s A Secret"},"channelId":"571922","customId":"48556034","endDate":"2026-04-19T20:30:00Z","id":"038e5f4","live":false,"startDate":"2026-04-19T20:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Stellar Wars","episodeNumber":3,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Hibiki and Tomoki clash before the battle to reclaim Stella Fortress, where hidden demonic traps await the human army.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='a08a9b96-765d-4682-b127-cad2efb2829e'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663068'&EntityType='LinearSchedule'&EntityId='a08a9b96-765d-4682-b127-cad2efb2829e'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663075'&EntityType='LinearSchedule'&EntityId='a08a9b96-765d-4682-b127-cad2efb2829e'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - Stellar Wars"},"channelId":"571922","customId":"48556035","endDate":"2026-04-19T21:00:00Z","id":"a08a9b9","live":false,"startDate":"2026-04-19T20:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Why Am I A Teacher?!","episodeNumber":4,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"After arriving in Rotsgard, Makoto and Shiki gather info for their new store but soon help a girl named Luria in trouble.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='c4ef95b2-54ef-4acc-ac44-58f55be502eb'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13662943'&EntityType='LinearSchedule'&EntityId='c4ef95b2-54ef-4acc-ac44-58f55be502eb'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13662950'&EntityType='LinearSchedule'&EntityId='c4ef95b2-54ef-4acc-ac44-58f55be502eb'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - Why Am I A Teacher?!"},"channelId":"571922","customId":"48556036","endDate":"2026-04-19T21:30:00Z","id":"c4ef95b","live":false,"startDate":"2026-04-19T21:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Lesson Will Now Begin","episodeNumber":5,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Makoto passes the teacher recruitment exam and starts as an adjunct at a school. Meanwhile, Tsubasa investigates a lake linked to a war.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='4000b4f9-9c9a-497e-81cd-b1329f85c546'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13662849'&EntityType='LinearSchedule'&EntityId='4000b4f9-9c9a-497e-81cd-b1329f85c546'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13662855'&EntityType='LinearSchedule'&EntityId='4000b4f9-9c9a-497e-81cd-b1329f85c546'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Tsukimichi -Moonlit Fantasy- Season 2 - The Lesson Will Now Begin"},"channelId":"571922","customId":"48556037","endDate":"2026-04-19T22:00:00Z","id":"4000b4f","live":false,"startDate":"2026-04-19T21:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"A Chance To Connect","episodeNumber":11,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG","name":"PG"},"description":"The first match of Karasuno is against Tsubakihara. Kageyama and Hinata heat up the stadium with their freak quick move.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='1017c66c-1e34-4791-8960-1198075f1279'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663379'&EntityType='LinearSchedule'&EntityId='1017c66c-1e34-4791-8960-1198075f1279'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663384'&EntityType='LinearSchedule'&EntityId='1017c66c-1e34-4791-8960-1198075f1279'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Haikyu!! 4th Season - A Chance To Connect"},"channelId":"571922","customId":"48556038","endDate":"2026-04-19T22:30:00Z","id":"1017c66","live":false,"startDate":"2026-04-19T22:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Vivid","episodeNumber":12,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG","name":"PG"},"description":"Defeating Tsubakihara, Karasuno advances to the next match. Hinata meets Korai of Kamomedai High from the camp.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='f6d795de-a3da-4a65-9519-e4373676ed1e'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663390'&EntityType='LinearSchedule'&EntityId='f6d795de-a3da-4a65-9519-e4373676ed1e'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663396'&EntityType='LinearSchedule'&EntityId='f6d795de-a3da-4a65-9519-e4373676ed1e'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Haikyu!! 4th Season - Vivid"},"channelId":"571922","customId":"48556039","endDate":"2026-04-19T23:00:00Z","id":"f6d795d","live":false,"startDate":"2026-04-19T22:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Villainess And Sits This One Out","episodeNumber":7,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG","name":"PG"},"description":"Alicia promised her father she’d reach magic level 90 to stay Liz’s overseer, secluding herself in a shed to train.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='847f1b61-0c69-4a56-aaa2-53c957cbdaee'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663082'&EntityType='LinearSchedule'&EntityId='847f1b61-0c69-4a56-aaa2-53c957cbdaee'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663092'&EntityType='LinearSchedule'&EntityId='847f1b61-0c69-4a56-aaa2-53c957cbdaee'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"I'll Become A Villainess Who Goes Down In History - The Villainess And Sits This One Out"},"channelId":"571922","customId":"48556040","endDate":"2026-04-19T23:30:00Z","id":"847f1b6","live":false,"startDate":"2026-04-19T23:00:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"The Villainess And The Return","episodeNumber":8,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG","name":"PG"},"description":"After two years of training, Alicia sets out for the village of Roana, where she achieves something remarkable.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='b560870b-1514-4f37-a01b-b78ca210724b'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663402'&EntityType='LinearSchedule'&EntityId='b560870b-1514-4f37-a01b-b78ca210724b'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663409'&EntityType='LinearSchedule'&EntityId='b560870b-1514-4f37-a01b-b78ca210724b'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"I'll Become A Villainess Who Goes Down In History - The Villainess And The Return"},"channelId":"571922","customId":"48556041","endDate":"2026-04-20T00:00:00Z","id":"b560870","live":false,"startDate":"2026-04-19T23:30:00Z","isGap":false,"InteractiveType":"0"},{"item":{"blackout":false,"episodeTitle":"Keiko's Carefree Style / Secret Urges / Jekyll Visits The Otogi House","episodeNumber":21,"blackoutMessage":"Programme is not available for live streaming.","classification":{"code":"IMDA-PG13","name":"PG13"},"description":"Keigo's channel was struggling with few viewers. He asks Nico to appear but is turned down.Then Nico has a great idea.","images":{"logo":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='png'&Quality=85&ImageId='9519433'&EntityType='LinearSchedule'&EntityId='f394edb9-06d0-483b-9488-5587866c0f45'&Width=2384&Height=1000","wallpaper":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663416'&EntityType='LinearSchedule'&EntityId='f394edb9-06d0-483b-9488-5587866c0f45'&Width=1280&Height=720","tile":"https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13663422'&EntityType='LinearSchedule'&EntityId='f394edb9-06d0-483b-9488-5587866c0f45'&Width=1280&Height=720"},"enableCatchUp":false,"enableSeeking":false,"enableStartOver":false,"enableStartOverV2":false,"type":"episode","title":"Witch Watch - Keiko's Carefree Style / Secret Urges / Jekyll Visits The Otogi House"},"channelId":"571922","customId":"48556042","endDate":"2026-04-20T00:30:00Z","id":"f394edb","live":false,"startDate":"2026-04-20T00:00:00Z","isGap":false,"InteractiveType":"0"}],"channelId":"571922","startDate":"2026-04-19T00:00:00.000Z","endDate":"2026-04-20T00:00:00.000Z"}]
\ No newline at end of file
From 53fd22e0a435b7539faf50fda6b0c99a4b489444 Mon Sep 17 00:00:00 2001
From: StrangeDrVN <172238701+StrangeDrVN@users.noreply.github.com>
Date: Sun, 19 Apr 2026 21:59:29 +0530
Subject: [PATCH 47/62] update channels api + programs
---
sites/mewatch.sg/mewatch.sg.channels.xml | 138 +++++++++++++++++++----
sites/mewatch.sg/mewatch.sg.config.js | 76 ++++++++-----
sites/mewatch.sg/mewatch.sg.test.js | 37 +++---
3 files changed, 183 insertions(+), 68 deletions(-)
diff --git a/sites/mewatch.sg/mewatch.sg.channels.xml b/sites/mewatch.sg/mewatch.sg.channels.xml
index e84bfbccd..b304c3d6b 100644
--- a/sites/mewatch.sg/mewatch.sg.channels.xml
+++ b/sites/mewatch.sg/mewatch.sg.channels.xml
@@ -1,28 +1,122 @@
- CNA
- LIVE 1
- LIVE 2
- Suria
- Vasantham
+ Action Hollywood Movies
+ W-Sport
+ River Monsters
+ Fear Factor
+ MasterChef
+ Vijay Takkar
+ Hub VV Drama HD
+ BBC Earth HD
+ ONE HD
+ Hub Sports 3 HD
+ KTV HD
+ HITS HD
+ FIGHT SPORTS HD
+ KBS World HD
+ Hub E City HD
+ Hub Sports 1 HD
+ Hub Sports 2 HD
+ Nick Jr. HD
+ Nickelodeon Asia HD
+ DreamWorks HD
+ HISTORY HD
+ ANC
+ The Filipino Channel HD
+ HITS MOVIES HD
+ Astro Warna HD
+ Astro Sensasi HD
+ ONE (Malay)
+ BBC News HD
+ CCTV-4
+ Phoenix Chinese Channel HD
+ Phoenix InfoNews Channel HD
+ TVBS-NEWS
+ ETTV Asia HD
+ Cartoon Network
+ Crime + Investigation HD
+ Discovery HD
+ Travelxp HD
+ BBC Lifestyle HD
+ HGTV HD
+ ROCK Entertainment HD
+ Deal or No Deal
+ AXN HD
+ Lifetime HD
+ Fox News Channel HD
+ Sky News HD
+ Euronews HD
+ CNBC HD
+ CNN HD
+ CTI Asia HD
+ Hub Ruyi
+ TVB Xing He HD
+ Celestial Movies HD
+ Zee TV HD
+ Zee Thirai
+ Vijay TV HD
+ Sun TV
+ Sun Music
+ Sony Entertainment Television
+ SONY MAX
+ COLORS
+ COLORS Tamil HD
+ Asianet
+ Asianet Movies
+ Cricbuzz
+ Cricbuzz 2
+ SPOTV
+ SPOTV2
+ beIN SPORTS 5 HD
+ beIN SPORTS HD
+ beIN SPORTS 2 HD
+ Hub Sports 6 HD
+ Hub Sports 5 HD
+ beIN SPORTS 3 HD
+ Hub Sports 4 HD
+ Hub Sports 8 HD
+ beIN SPORTS 4 HD
+ Hub Sports 7 HD
+ That's 80s
+ That's Rock
+ That's 70s
+ ADITHYA TV
+ Animax HD
+ CBeebies HD
+ CCM
+ CGTNChannel 5Channel 8Channel U
- HBO
- HBO Hits
- HBO Signature
- HBO Family
- Cinemax
- SPL01
- SPL02
- Global Trekker
- TRACE Urban
- NOW Rock
- NOW 70s
- NOW 80s
- oktolidays
- ROCK Entertainment
- ROCK Action
- Animax
+ Cinema One GlobalCinemaWorld
-
+ Citra Entertainment
+ CNA
+ Dragon TV
+ FIFA+
+ FoodON
+ Hub Premier 1
+ Hub Premier 2
+ Hub Premier 3
+ Hub Premier 4
+ Hub Premier 5
+ Hub Premier 6
+ Hub Premier 7
+ Hub Premier 8
+ Hub Premier 9
+ Hub Premier 10
+ Hub Premier 11
+ Kalaignar TV
+ Karisma
+ Kartoon Channel!
+ LIVE 1
+ SPL CH01
+ Suria
+ TG Junior
+ TRACE Sport Stars
+ TVBS Asia
+ Vannathirai
+ Vasantham
+ Zee Cinema HD
+ Zee Tamil HD
+
\ No newline at end of file
diff --git a/sites/mewatch.sg/mewatch.sg.config.js b/sites/mewatch.sg/mewatch.sg.config.js
index 1b793c83a..375c374cc 100644
--- a/sites/mewatch.sg/mewatch.sg.config.js
+++ b/sites/mewatch.sg/mewatch.sg.config.js
@@ -24,12 +24,25 @@ module.exports = {
const items = parseItems(content, channel)
items.forEach(item => {
const info = item.item
+
+ let title = info.title || ''
+ let subTitle = info.episodeTitle || null
+
+ if (subTitle && title.includes(` - ${subTitle}`)) {
+ title = title.replace(` - ${subTitle}`, '')
+ }
+
+ if (title === subTitle) {
+ subTitle = null
+ }
+
programs.push({
- title: info.title,
- description: info.description,
- image: info.images.tile,
- episode: info.episodeNumber,
- season: info.seasonNumber,
+ title,
+ subTitle,
+ description: info.description || null,
+ image: info.images?.tile || null,
+ episode: info.episodeNumber || null,
+ season: info.seasonNumber || null,
start: parseStart(item),
stop: parseStop(item),
rating: parseRating(info)
@@ -40,29 +53,40 @@ module.exports = {
},
async channels() {
const axios = require('axios')
- const cheerio = require('cheerio')
- const data = await axios
- .get('https://www.mewatch.sg/channel-guide')
- .then(r => r.data)
- .catch(console.log)
-
+ const LIST_ID = '239614'
let channels = []
- const $ = cheerio.load(data)
- $('#side-nav > div > div > div > nav:nth-child(1) > ul > li > ul > li').each((i, el) => {
- const name = $(el).find('a > span').text()
- const url = $(el).find('a').attr('href')
- const [, site_id = null] = url.match(/\/(\d+)\?player-fullscreen/) ?? []
+ let page = 1
+ let hasNextPage = true
- if (!site_id) {
- return
+ while (hasNextPage) {
+ const url = `https://cdn.mewatch.sg/api/lists/${LIST_ID}?page=${page}&page_size=100&segments=all`
+
+ try {
+ const r = await axios.get(url)
+ const data = r.data
+
+ if (data && Array.isArray(data.items)) {
+ data.items.forEach(item => {
+ if (item.type === 'channel' || item.itemType === 'channel') {
+ channels.push({
+ lang: 'en',
+ name: item.title,
+ site_id: item.id
+ })
+ }
+ })
+ }
+
+ if (data.paging && data.paging.next) {
+ page++
+ } else {
+ hasNextPage = false
+ }
+ } catch (error) {
+ console.error(`Error fetching page ${page}:`, error.message)
+ hasNextPage = false
}
-
- channels.push({
- lang: 'en',
- name,
- site_id
- })
- })
+ }
return channels
}
@@ -97,4 +121,4 @@ function parseItems(content, channel) {
const channelData = data.find(i => i.channelId === channel.site_id)
return channelData && Array.isArray(channelData.schedules) ? channelData.schedules : []
-}
+}
\ No newline at end of file
diff --git a/sites/mewatch.sg/mewatch.sg.test.js b/sites/mewatch.sg/mewatch.sg.test.js
index f65ecb3f9..6364cde07 100644
--- a/sites/mewatch.sg/mewatch.sg.test.js
+++ b/sites/mewatch.sg/mewatch.sg.test.js
@@ -9,13 +9,13 @@ dayjs.extend(utc)
const date = dayjs.utc('2022-06-11', 'YYYY-MM-DD').startOf('d')
const channel = {
- site_id: '97098',
- xmltv_id: 'Channel5Singapore.sg'
+ site_id: '571922',
+ xmltv_id: 'AnimaxAsia.sg@SD'
}
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
- 'https://cdn.mewatch.sg/api/schedules?channels=97098&date=2022-06-10&duration=24&ff=idp,ldp,rpt,cd&hour=12&intersect=true&lang=en&segments=all'
+ 'https://cdn.mewatch.sg/api/schedules?channels=571922&date=2022-06-10&duration=24&ff=idp,ldp,rpt,cd&hour=12&intersect=true&lang=en&segments=all'
)
})
@@ -27,23 +27,20 @@ it('can parse response', () => {
return p
})
- expect(result).toMatchObject([
- {
- start: '2022-06-11T21:00:00.000Z',
- stop: '2022-06-11T21:30:00.000Z',
- 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.',
- 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: {
- system: 'IMDA',
- value: 'G'
- }
- }
- ])
+ expect(result.length).toBe(45)
+ expect(result[0]).toMatchObject({
+ title: 'Tsukimichi -Moonlit Fantasy- Season 2',
+ subTitle: 'Why Am I A Teacher?!',
+ description:
+ 'After arriving in Rotsgard, Makoto and Shiki gather info for their new store but soon help a girl named Luria in trouble.',
+ image:
+ "https://prod98.togglestatic.com/shain/v1/dataservice/ResizeImage/$value?Format='jpg'&Quality=85&ImageId='13651065'&EntityType='LinearSchedule'&EntityId='fdb1a2e4-efe5-41dd-8560-84d4c3f50459'&Width=1280&Height=720",
+ episode: 4,
+ season: null,
+ start: '2026-04-19T00:00:00.000Z',
+ stop: '2026-04-19T00:30:00.000Z',
+ rating: { system: 'IMDA', value: 'PG13' }
+ })
})
it('can handle empty guide', () => {
From a1cb0abd67e57f609762f49b720168a0f0776732 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 03:26:45 +0300
Subject: [PATCH 48/62] Update tv24.se.config.js
---
sites/tv24.se/tv24.se.config.js | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/sites/tv24.se/tv24.se.config.js b/sites/tv24.se/tv24.se.config.js
index 76d92535f..b710c8b47 100644
--- a/sites/tv24.se/tv24.se.config.js
+++ b/sites/tv24.se/tv24.se.config.js
@@ -82,7 +82,12 @@ module.exports = {
async function loadProgramDetails($item) {
const programId = $item('a').attr('href')
const data = await axios
- .get(`https://tv24.se/x${programId}/0/0`)
+ .get(`https://tv24.se/x${programId}/0/0`, {
+ headers: {
+ 'User-Agent':
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
+ }
+ })
.then(r => r.data)
.catch(console.error)
if (!data) return Promise.resolve({})
From 5b31df8e8cd880905fa2f4830dd6ec6edc08c92f Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 03:46:43 +0300
Subject: [PATCH 49/62] Update tvplus.com.tr.test.js
---
sites/tvplus.com.tr/tvplus.com.tr.test.js | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/sites/tvplus.com.tr/tvplus.com.tr.test.js b/sites/tvplus.com.tr/tvplus.com.tr.test.js
index 28b1a342a..38e960bac 100644
--- a/sites/tvplus.com.tr/tvplus.com.tr.test.js
+++ b/sites/tvplus.com.tr/tvplus.com.tr.test.js
@@ -14,29 +14,36 @@ jest.mock('axios')
const date = dayjs.utc('2026-04-22', 'YYYY-MM-DD').startOf('d')
const channel = { site_id: '32' }
-axios.get.mockImplementation(url => {
- if (url === 'https://tvplus.com.tr/canli-tv/yayin-akisi') {
+axios.post.mockImplementation(url => {
+ if (url === 'https://izmaottvsc14.tvplus.com.tr:33207/EPG/JSON/Authenticate') {
return Promise.resolve({
- data: fs.readFileSync(path.join(__dirname, '__data__', 'build.html')).toString()
+ headers: {
+ 'set-cookie': [
+ 'XSESSIONID=05DIPYMD4BHOKRQCZTHF8F5GHMMBCNJ6; Domain=izmaottvsc14.tvplus.com.tr; Path=/; Secure; HttpOnly',
+ 'JSESSIONID=05DIPYMD4BHOKRQCZTHF8F5GHMMBCNJ6; Domain=izmaottvsc14.tvplus.com.tr; Path=/; HttpOnly'
+ ]
+ }
})
}
})
-it('can generate valid url', async () => {
+it('can generate valid url', () => {
expect(url).toBe('https://izmaottvsc14.tvplus.com.tr:33207/EPG/JSON/PlayBillList')
})
-it('can generate valid request method', async () => {
+it('can generate valid request method', () => {
expect(request.method).toBe('POST')
})
it('can generate valid request headers', async () => {
- expect(request.headers).toMatchObject({
- cookie: 'JSESSIONID=05DH3LSUA0W04YMLSYEWK3TRYY1QMBMY;'
+ const headers = await request.headers()
+ expect(headers).toMatchObject({
+ cookie:
+ 'XSESSIONID=05DIPYMD4BHOKRQCZTHF8F5GHMMBCNJ6; Domain=izmaottvsc14.tvplus.com.tr; Path=/; Secure; HttpOnly;JSESSIONID=05DIPYMD4BHOKRQCZTHF8F5GHMMBCNJ6; Domain=izmaottvsc14.tvplus.com.tr; Path=/; HttpOnly'
})
})
-it('can generate valid request data', async () => {
+it('can generate valid request data', () => {
expect(request.data({ channel, date })).toMatchObject({
type: '2',
channelid: '32',
From d684baff2ea909665ceb6dbe86faf1a2d7c691f6 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 03:46:56 +0300
Subject: [PATCH 50/62] Update tvplus.com.tr.config.js
---
sites/tvplus.com.tr/tvplus.com.tr.config.js | 19 +++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)
diff --git a/sites/tvplus.com.tr/tvplus.com.tr.config.js b/sites/tvplus.com.tr/tvplus.com.tr.config.js
index 23b1528ad..8645d5c26 100644
--- a/sites/tvplus.com.tr/tvplus.com.tr.config.js
+++ b/sites/tvplus.com.tr/tvplus.com.tr.config.js
@@ -1,3 +1,4 @@
+const axios = require('axios')
const dayjs = require('dayjs')
const customParseFormat = require('dayjs/plugin/customParseFormat')
@@ -9,8 +10,22 @@ module.exports = {
url: 'https://izmaottvsc14.tvplus.com.tr:33207/EPG/JSON/PlayBillList',
request: {
method: 'POST',
- headers: {
- cookie: 'JSESSIONID=05DH3LSUA0W04YMLSYEWK3TRYY1QMBMY;'
+ async headers() {
+ const response = await axios
+ .post('https://izmaottvsc14.tvplus.com.tr:33207/EPG/JSON/Authenticate', {
+ terminaltype: 'webtv',
+ terminalvendor:
+ '5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
+ osversion: 'Win32',
+ userType: '3',
+ utcEnable: '1',
+ timezone: 'Europe/Istanbul'
+ })
+ .catch(console.error)
+
+ return {
+ cookie: response.headers['set-cookie'].join(';')
+ }
},
data({ channel, date }) {
return {
From 9e16837def28314c800832884bb92e054690d9d5 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 03:54:28 +0300
Subject: [PATCH 51/62] Update web.magentatv.de.test.js
---
sites/web.magentatv.de/web.magentatv.de.test.js | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/sites/web.magentatv.de/web.magentatv.de.test.js b/sites/web.magentatv.de/web.magentatv.de.test.js
index 71f566728..5beb8a22e 100644
--- a/sites/web.magentatv.de/web.magentatv.de.test.js
+++ b/sites/web.magentatv.de/web.magentatv.de.test.js
@@ -27,7 +27,7 @@ axios.request.mockImplementation(req => {
'JSESSIONID=2147EBA9C59BCDC33822CFD2764E5C0B; Path=/EPG/; HttpOnly; SameSite=None; Secure',
'CSESSIONID=1CF187ABCA12ED1B01ADF84C691048ED; Path=/EPG/; Secure; HttpOnly; SameSite=None',
'CSRFSESSION=ea2329ba213271192bffd77c2fa276086a8e828c1a4ee379; Path=/EPG/; SameSite=None; Secure'
- ]
+ ]
},
data: {
csrfToken: '6f678415702493d2c28813747c413aa05c87d8f87ecf05fe'
@@ -94,6 +94,7 @@ it('can parse response', () => {
'Die besten Big-Wave-Surfer werden bei ihrer Suche nach der nächsten großen Welle begleitet.',
image:
'http://ngiss.t-online.de/cm1s/media/gracenote/2/4/p24832950_e_h9_aa_2023-06-22T10_12_01.jpg',
+ icon: 'http://ngiss.t-online.de/cm1s/media/gracenote/2/4/p24832950_e_h9_aa_2023-06-22T10_12_01.jpg',
category: ['Sport']
},
{
@@ -107,6 +108,8 @@ it('can parse response', () => {
episode: '5',
image:
'http://ngiss.t-online.de/cm1s/media/gracenote/1/0/p10262968_e_h9_ah_2021-10-20T07_16_16.jpg',
+ icon:
+ 'http://ngiss.t-online.de/cm1s/media/gracenote/1/0/p10262968_e_h9_ah_2021-10-20T07_16_16.jpg',
category: ['Sitcom'],
directors: ['Mark Cendrowski'],
producers: ['Chuck Lorre', 'Bill Prady', 'Steven Molaro'],
From 2576b9fdeceff2279fe3066b720d6770b35ac151 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 03:54:38 +0300
Subject: [PATCH 52/62] Update web.magentatv.de.config.js
---
sites/web.magentatv.de/web.magentatv.de.config.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/sites/web.magentatv.de/web.magentatv.de.config.js b/sites/web.magentatv.de/web.magentatv.de.config.js
index 3a38685ab..aef724d9b 100644
--- a/sites/web.magentatv.de/web.magentatv.de.config.js
+++ b/sites/web.magentatv.de/web.magentatv.de.config.js
@@ -46,6 +46,7 @@ module.exports = {
title: item.name,
description: item.introduce,
image: parseImage(item),
+ icon: parseImage(item),
category: parseCategory(item),
start: parseStart(item),
stop: parseStop(item),
@@ -176,7 +177,7 @@ async function fetchCookieAndToken() {
T: 'Windows_chrome_118'
},
method: 'POST',
- data: '{"terminalid":"00:00:00:00:00:00","mac":"00:00:00:00:00:00","terminaltype":"WEBTV","utcEnable":1,"timezone":"Etc/GMT0","userType":3,"terminalvendor":"Unknown"}',
+ data: '{"terminalid":"00:00:00:00:00:00","mac":"00:00:00:00:00:00","terminaltype":"WEBTV","utcEnable":1,"timezone":"Etc/GMT0","userType":3,"terminalvendor":"Unknown"}'
})
// Extract the cookies specified in cookiesToExtract
@@ -200,8 +201,7 @@ async function fetchCookieAndToken() {
X_CSRFTOKEN = response.data.csrfToken
Cookie = extractedCookies.join(' ')
-
- } catch(error) {
+ } catch (error) {
console.error(error)
}
}
From 2868ab8688e2f5a45ff5bee6f213eb3d7c5c0259 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 04:02:37 +0300
Subject: [PATCH 53/62] Update ontvtonight.com.test.js
---
sites/ontvtonight.com/ontvtonight.com.test.js | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/sites/ontvtonight.com/ontvtonight.com.test.js b/sites/ontvtonight.com/ontvtonight.com.test.js
index 9f1eaf151..34bafbeb4 100644
--- a/sites/ontvtonight.com/ontvtonight.com.test.js
+++ b/sites/ontvtonight.com/ontvtonight.com.test.js
@@ -1,4 +1,4 @@
-const { parser, url } = require('./ontvtonight.com.config.js')
+const { parser, url, request } = require('./ontvtonight.com.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
@@ -19,6 +19,13 @@ it('can generate valid url', () => {
)
})
+it('can generate valid request headers', () => {
+ expect(request.headers).toMatchObject({
+ 'user-agent':
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
+ })
+})
+
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'), 'utf8')
const result = parser({ content, channel, date }).map(p => {
From e2a427d7d65bd562531f2955ef89d6158512f53a Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 04:02:45 +0300
Subject: [PATCH 54/62] Update ontvtonight.com.config.js
---
sites/ontvtonight.com/ontvtonight.com.config.js | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sites/ontvtonight.com/ontvtonight.com.config.js b/sites/ontvtonight.com/ontvtonight.com.config.js
index 1519f4fc2..4718611b3 100644
--- a/sites/ontvtonight.com/ontvtonight.com.config.js
+++ b/sites/ontvtonight.com/ontvtonight.com.config.js
@@ -21,6 +21,12 @@ module.exports = {
return url
},
+ request: {
+ headers: {
+ 'user-agent':
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
+ }
+ },
parser: function ({ content, date, channel }) {
const programs = []
const items = parseItems(content)
From c1f7ece997ede6e528a2352b72e80d2618e27223 Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 04:39:47 +0300
Subject: [PATCH 55/62] Update tv24.se.config.js
---
sites/tv24.se/tv24.se.config.js | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/sites/tv24.se/tv24.se.config.js b/sites/tv24.se/tv24.se.config.js
index b710c8b47..67bd0db6a 100644
--- a/sites/tv24.se/tv24.se.config.js
+++ b/sites/tv24.se/tv24.se.config.js
@@ -47,7 +47,12 @@ module.exports = {
},
async channels() {
let html = await axios
- .get('https://tv24.se/x/settings/addremove')
+ .get('https://tv24.se/x/settings/addremove', {
+ headers: {
+ 'User-Agent':
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
+ }
+ })
.then(r => r.data)
.catch(console.log)
let $ = cheerio.load(html)
@@ -57,7 +62,9 @@ module.exports = {
html = await axios
.get('https://tv24.se', {
headers: {
- Cookie: `selectedChannels=${nums.join(',')}`
+ Cookie: `selectedChannels=${nums.join(',')}`,
+ 'User-Agent':
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36'
}
})
.then(r => r.data)
From 0be055151e501c55a5c03a40db5e5f26870dab7c Mon Sep 17 00:00:00 2001
From: freearhey <7253922+freearhey@users.noreply.github.com>
Date: Mon, 20 Apr 2026 04:39:57 +0300
Subject: [PATCH 56/62] Update tv24.se.channels.xml
---
sites/tv24.se/tv24.se.channels.xml | 346 ++++++++++++++---------------
1 file changed, 164 insertions(+), 182 deletions(-)
diff --git a/sites/tv24.se/tv24.se.channels.xml b/sites/tv24.se/tv24.se.channels.xml
index b5c1051a3..7c0c60aa4 100644
--- a/sites/tv24.se/tv24.se.channels.xml
+++ b/sites/tv24.se/tv24.se.channels.xml
@@ -1,17 +1,78 @@
+ DR1
+ DR2
+ Kanal 4
+ TV2 Danmark
+ TV2 Charlie
+ TV2 News
+ TV3 Danmark
+ TV3 Plus3sat
- Al Arabiya
- Al Jazeera (English)
- Al Jazeera (Arabic)
+ Das Erste
+ Motorvision TV
+ ProSieben
+ RTL
+ Super RTL
+ RTLZWEI
+ VOX
+ ZDF
+ CGTN
+ The Adult Channel
+ Al Jazeera Arabic
+ Al Jazeera
+ BBC Earth
+ CNBC
+ CNN International
+ Discovery Science
+ Extreme Sports Channel
+ FTV HD
+ Fight Sports
+ Food Network
+ GINX eSports TV
+ God
+ Horse & Country
+ Magnolia Network HD
+ Mezzo
+ MTV 00s Europe
+ MTV 80s
+ MTV 90s
+ Nautical Channel
+ OUTtv
+ Sky History 2 HD
+ Sky News
+ Djazz HD
+ Travel Channel
+ Canal 24H
+ Las Estrellas
+ TVE Internacional
+ MTV3
+ Yle Teema & Fem HD
+ Yle TV1
+ Yle TV2
+ Classica HD
+ France 24
+ TV5 Monde Europe
+ Duna TV
+ Rai 1
+ Rai 2
+ Rai 3
+ NRK2 Norge
+ NRK3
+ NRK Super
+ NRK Super / NRK3 HD
+ TV 2 Zebra
+ TVNorge
+ TVP Polonia
+ RTP Internacional Europe
+ Pro TV int
+ 3sat
+ Al Jazeera (English)
+ Al Jazeera (Arabic)Al Jazeera EnglishAl Jazeera HD
- Animal PlanetAnimal Planet HDARTE
- ATG Live
- Axess TV
- BBC EarthBBC NewsBBC News Europe HDBBC Nordic
@@ -21,224 +82,99 @@
BBC Nordic HDBloomberg HDBloomberg TV HD (UK)
- Blue Hustler
- C More Fotboll/Hockey/Stars HD
- C More Live 2 (PPV)
- C More Live 3 (PPV)
- C More Live 4 (PPV)
- C More Live (PPV)
- C More Sport SF-Kanalen
- Canal 24 Horas
- Canal 24H
- Las Estrellas
- Cartoon Network
+ Canal 24 Horas HDCartoonito
- CCTV-4
- CGTN
- Channel One Russia
- Classica HD
- CNBC
+ CBS Reality MENACNBC HD
- CNN InternationalCNN International HD
- Das Erste
- Di TV HD
- Discovery ChannelDiscovery Channel HD
- Discovery HD ShowcaseDiscovery HD - TextDiscovery Science
- Discovery ScienceDiscovery Science
- Disney Channel
+ Disney ChannelDisney Channel HD
- Disney Junior
- Disney XD
- Djazz HD
- DR1DR1 HD
- DR2DR2 HD
- DR3
- DR3 HD
- DR K
- DR Ramasjang
- DR Ultra
- Duna TVDuna TV HD
- Deutsche Welle
+ Duna TV (Sweden)
+ Deutsche WelleeSportsone
- eSportsTV HDeuronews
- Euronews HD
- Eurosport 1
+ EuronewsEurosport 1 HD
- Eurosport 2Eurosport 2 HD
- Extreme Sports Channel
- Fight SportsFight SportsFight Sports HD
- Food Network
- FOX
- FOX HD
- France 2France 2 HD
- France 24
- France 24 English HDFREEDOM
- FTV HD
+ FTVFTV HD
- Fuel TV
- Fuel TV HD
- GINX eSports TV
- God
- Godare
- H2H2 HD
- Hayat PlusHigh TV 3D
- HistoryHistory ChannelHistory HD
- Horse & Country (UK)
- Horse & Country TV
- HRT1
- Hustler TV
- ID
- Kanal 4
- Kanal 5
+ hr-fernsehenKanal 5 HDKanal 5 HD - Text
- Kanal 9Kanal 9 HDKanal 9 HD - Text
- Kanal 10
- Kanal 11
+ Kanal 10 HDKanal 11 HDKanal 11 HD - Text
- KunskapskanalenKunskapskanalen HDKunskapskanalen HD - Text
+ Love NatureM2 Magyar HD
- Magnolia Network HD
- Manchester United Television HD
- MBCMBC
- Mezzo
+ MDRMezzo Live
- Motorvision TV
+ MoonbugMotorvision TV HDMotorvision TV HDMTV
- MTV3
- MTV 00s Europe
- MTV 80s
- MTV 90sMTV AitioMTV Aitio HDMTV HD
- MTV Hits International
- MTV Live HDMTV ViihdeMTV Viihde HD
- National GeographicNational Geographic HD
- National Geographic HD
- National Geographic WildNational Geographic Wild HD
- Nautical ChannelNautical Channel HD
- NHK World TV
- Nick JRNick Jr. HD
- NickelodeonNickelodeon HD
- Nicktoons
- NRK1 NorgeNRK1 HD
- NRK2 NorgeNRK2 HD
- NRK3
- NRK Super
- NRK Super / NRK3 HD
- OBNÖppna Kanalen StockholmÖppna Kanalen Växjö
- Öppna kanalen VS
- OUTtv
- Pink Extra
- Pink Plus
- Playboy TV
- Pro TV int
- ProSieben
- Rai 1
- Rai 2
- Rai 3
- RT
- RTL
- RTLZWEI
- RTP Mundo Europe
- RTR PlanetaRTS SatSat.1
- SF Kanalen
- SjuanSjuan HDSjuan HD - Text
- Sky Cinema Premiere +1
- Sky History 2 HD
- Sky News
- SkyShowtime 1
- SkyShowtime 2SonLife Broadcasting Network
- Super RTL
- SVT1
+ SonLife International
+ Stingray ClassicaSVT1 HDSVT1 Södertälje
- SVT2SVT2 HD
- SVT24SVT24 HD
- SVT BarnSVT Barn HD
- SVT Barn/SVT24SVTB/SVT24 HDSVTB/SVT24 HD - Text
- TBN Europe
- The Adult Channel
- TLCTLC HDTLC HD
- Trace Urban HD
- Travel ChannelTravel ChannelTravel Channel HDTravel Channel HD
- TRT 1TRT 1 HD
- TRT Turk
- True Crime
- TV2 Danmark
- TV2 CharlieTV2 EchoTV2 Danmark HD
- TV2 News
- TV3
- TV3 DanmarkTV3+TV3 HDTV3 HD - Text
- TV3 Plus
- TV3 Sport
- TV4
- TV4 FaktaTV4 Fakta - Text
- TV4 FilmTV4 Film - TextTV4 FotbollTV4 Fotboll HD
- TV4 GuldTV4 HDTV4 HD - TextTV4 Hits
@@ -263,42 +199,27 @@
TV4 Stars HDTV4 TennisTV4 Tennis HD
- TV5 Monde Europe
- TV6
+ TV5 Monde Europe HDTV6 HD
- TV8TV8 HD
- TV10TV10 HD
- TV12
+ TV12 BedehuskanalenTV12 HDTV12 HD - Text
- TV2 NorgeTV2 Norge HD
- TV 2 Nyheter (NORWAY)
- TV 2 ZebraTV ChileTV Finland
- TVCG Sat
- TVE Internacional
- TVNorge
- TVP Polonia
- V Film Action HD
- V Film Family
- V Film Hits HD
- V Film Premiere HD
+ TV Montenegro RTCG
+ TVE Internacional HD (Europe)
+ TVP Polonia HDV Series HDV Sport 1 HD
- V Sport ExtraV Sport Extra HD
- V Sport Fotboll HD
- V Sport Golf HD
- V Sport Motor HD
- V Sport Premium HD
- V Sport Ultra HD
- V Sport Vinter
+ V Sport Football Live 1
+ V Sport Football Live 2
+ V Sport Football Live 3V Sport Vinter HD
- Viasat Explore
+ Viaplay SportViasat Explore HDViasat Film ActionViasat Film Family HD
@@ -306,24 +227,85 @@
Viasat Film PremiereViasat FotbollViasat Golf
- Viasat HistoryViasat History HD FinlandViasat History HD
- Viasat Hockey FinlandViasat Motor
- Viasat NatureViasat Nature HD
- Viasat Series
- Viasat Sport
- Viasat Sport PremiumVision Sverige
- Visjon Norge HD
- VOX
+ WDR FernsehenYle Teema & Fem
- Yle Teema & Fem HD
- Yle TV1Yle TV1 HD
- Yle TV2Yle TV2 HD
- ZDF
+ ZDF
+ Animal Planet
+ ATG Live
+ Axess TV
+ Cartoon Network
+ C More Sport SF-Kanalen
+ Discovery Channel
+ Disney Channel
+ DR Ramasjang
+ Eurosport 1
+ Eurosport 2
+ France 2
+ Fuel TV
+ Godare
+ Hayat Plus
+ H2
+ History
+ HRT1
+ ID
+ Kanal 5
+ Kanal 9
+ Kanal 10
+ Kanal 11
+ Kunskapskanalen
+ National Geographic
+ National Geographic Wild
+ Nickelodeon
+ Nick JR
+ Nicktoons
+ NRK1 Norge
+ Pink Plus
+ SF Kanalen
+ Sjuan
+ SkyShowtime 1
+ SkyShowtime 2
+ SVT1
+ SVT2
+ SVT24
+ SVT Barn
+ SVT Barn/SVT24
+ TLC
+ TRT 1
+ TV2 Norge
+ TV 2 Nyheter (NORWAY)
+ TV3
+ TV4
+ TV4 Fakta
+ TV4 Film
+ TV4 Guld
+ TV6
+ TV8
+ TV10
+ TV12
+ TVCG Sat
+ Visjon Norge HD
+ V Film Action HD
+ V Film Family
+ V Film Hits HD
+ V Film Premiere HD
+ Viasat Explore
+ Viasat History
+ Viasat Nature
+ Viasat Sport
+ Viasat Series
+ V Sport Extra
+ V Sport Fotboll HD
+ V Sport Golf HD
+ V Sport Motor HD
+ V Sport Premium HD
+ V Sport Ultra HD
+ V Sport Vinter
+ TRT Turk
From 469a64908245f07c138f79ec98a632f7b566af83 Mon Sep 17 00:00:00 2001
From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com>
Date: Mon, 20 Apr 2026 02:01:39 +0000
Subject: [PATCH 57/62] [Bot] Update SITES.md
Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/24644969003) workflow.
---
SITES.md | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/SITES.md b/SITES.md
index eda2b6ed2..05533b0b1 100644
--- a/SITES.md
+++ b/SITES.md
@@ -8,6 +8,7 @@