Add files via upload

This commit is contained in:
Ismaël Moret
2026-04-15 10:52:28 +02:00
committed by GitHub
parent 67c1a7e45e
commit 9c0093c098
29 changed files with 35200 additions and 2918 deletions

View File

@@ -1,22 +1,76 @@
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const tz = require('dayjs/plugin/timezone')
const timezone = 'Pacific/Auckland'
dayjs.extend(utc)
dayjs.extend(tz)
module.exports = {
site: 'sky.co.nz',
days: 2,
url({ date, channel }) {
return `https://web-epg.sky.co.nz/prod/epgs/v1?channelNumber=${
channel.site_id
}&start=${date.valueOf()}&end=${date.add(1, 'day').valueOf()}&limit=20000`
url: 'https://api.skyone.co.nz/exp/graph',
request: {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
data({ date } = {}) {
return ({
query: `{
experience(appId: TV_GUIDE_WEB) {
channelGroup(id: "4b7LA20J4iHaThwky9iVqn") {
id
title
channels {
... on LinearChannel {
id
title
number
tileImage {
uri
}
slotsForDay(date: "${dayjs.tz(date || dayjs(), timezone).format('YYYY-MM-DD')}") {
slots {
id
startMs
endMs
live
nzBsaRatingString
programme {
... on Episode {
id
title
synopsis
}
... on Movie {
id
title
}
... on PayPerViewEventProgram {
id
title
}
}
}
}
}
}
}
}
}`
})
}
},
parser({ content }) {
parser({ content, channel }) {
let programs = []
const items = parseItems(content)
const items = parseItems(content, channel)
items.forEach(item => {
programs.push({
title: item.title,
description: item.synopsis,
category: item.genres,
rating: parseRating(item),
start: dayjs(parseInt(item.start)),
stop: dayjs(parseInt(item.end))
@@ -31,19 +85,41 @@ module.exports = {
.then(r => r.data)
.catch(console.log)
return data.channels.map(item => {
return data.map(item => {
return {
lang: 'en',
site_id: parseInt(item.number).toString(),
name: item.name
name: item.sort
}
})
}
}
function parseItems(content) {
const data = JSON.parse(content)
return data && data.events && Array.isArray(data.events) ? data.events : []
function parseItems(content, channel) {
if (!channel?.site_id) return []
let data
try {
data = JSON.parse(content)
} catch {
return []
}
const channels = data?.data?.experience?.channelGroup?.channels
if (!Array.isArray(channels)) return []
const channelData = channels.find(i => i.number === parseInt(channel.site_id))
if (!channelData?.slotsForDay?.slots) return []
return channelData.slotsForDay.slots.map(slot => ({
title: slot.programme.title || null,
synopsis: slot.programme.synopsis || null,
rating: slot.nzBsaRatingString || null,
start: slot.startMs,
end: slot.endMs
}))
}
function parseRating(item) {