diff --git a/sites/ziggogo.tv/ziggogo.tv.config.js b/sites/ziggogo.tv/ziggogo.tv.config.js index 480904dcb..046a4829e 100644 --- a/sites/ziggogo.tv/ziggogo.tv.config.js +++ b/sites/ziggogo.tv/ziggogo.tv.config.js @@ -1,14 +1,10 @@ const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const doFetch = require('@ntlab/sfetch') -const debug = require('debug')('site:ziggogo.tv') +const uniqBy = require('lodash.uniqby') dayjs.extend(utc) -doFetch.setDebugger(debug) - -const detailedGuide = true - module.exports = { site: 'ziggogo.tv', days: 2, @@ -24,63 +20,57 @@ module.exports = { }, async parser({ content, channel, date }) { const programs = [] - if (content) { - const items = typeof content === 'string' ? JSON.parse(content) : content - if (Array.isArray(items.entries)) { - // fetch other segments - const queues = [ - module.exports.url({ date, segment: 6 }), - module.exports.url({ date, segment: 12 }), - module.exports.url({ date, segment: 18 }) - ] - await doFetch(queues, (url, res) => { - if (Array.isArray(res.entries)) { - items.entries.push(...res.entries) - } - }) - items.entries - .filter(item => item.channelId === channel.site_id) - .forEach(item => { - if (Array.isArray(item.events)) { - if (detailedGuide) { - queues.push( - ...item.events.map( - event => - `https://spark-prod-nl.gnp.cloud.ziggogo.tv/eng/web/linear-service/v2/replayEvent/${event.id}?returnLinearContent=true&forceLinearResponse=true&language=nl` - ) - ) - } else { - item.events.forEach(event => { - programs.push({ - title: event.title, - start: dayjs.utc(event.startTime * 1000), - stop: dayjs.utc(event.endTime * 1000) - }) - }) - } - } - }) - // fetch detailed guide - if (queues.length) { - await doFetch(queues, (url, res) => { - programs.push({ - title: res.title, - subTitle: res.episodeName, - description: res.longDescription ? res.longDescription : res.shortDescription, - category: res.genres, - season: res.seasonNumber, - episode: res.episodeNumber, - country: res.countryOfOrigin, - actor: res.actors, - director: res.directors, - producer: res.producers, - date: res.productionDate, - start: dayjs.utc(res.startTime * 1000), - stop: dayjs.utc(res.endTime * 1000) - }) - }) - } + if (!content) return [] + const parsed = typeof content === 'string' ? JSON.parse(content) : content + if (!Array.isArray(parsed.entries)) return [] + const entries = parsed.entries + + // fetch other segments + let segments = [ + module.exports.url({ date, segment: 6 }), + module.exports.url({ date, segment: 12 }), + module.exports.url({ date, segment: 18 }) + ] + await doFetch(segments, (url, res) => { + if (Array.isArray(res.entries)) { + entries.push(...res.entries) } + }) + + let events = [] + entries + .filter(item => item.channelId === channel.site_id) + .forEach(item => { + if (!Array.isArray(item.events)) return + events.push( + ...item.events.map(event => ({ + startTime: event.startTime, + url: `https://spark-prod-nl.gnp.cloud.ziggogo.tv/eng/web/linear-service/v2/replayEvent/${event.id}?returnLinearContent=true&forceLinearResponse=true&language=nl` + })) + ) + }) + + events = uniqBy(events, 'startTime') + + // fetch detailed guide + if (events.length) { + await doFetch(events, (url, res) => { + programs.push({ + title: res.title, + subTitle: res.episodeName, + description: res.longDescription ? res.longDescription : res.shortDescription, + category: res.genres, + season: res.seasonNumber, + episode: res.episodeNumber, + country: res.countryOfOrigin, + actor: res.actors, + director: res.directors, + producer: res.producers, + date: res.productionDate, + start: dayjs.utc(res.startTime * 1000), + stop: dayjs.utc(res.endTime * 1000) + }) + }) } return programs