From e952ba25857ab71ef59ea937ba67303724984a1d Mon Sep 17 00:00:00 2001 From: Newbiect <51307314+Newbiect@users.noreply.github.com> Date: Fri, 7 Feb 2025 22:17:12 -0500 Subject: [PATCH] Add files via upload --- sites/zap2it.com/zap2it.com.config.js | 75 +++++++++++++++++++++++++++ sites/zap2it.com/zap2it.com.test.js | 72 +++++++++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 sites/zap2it.com/zap2it.com.config.js create mode 100644 sites/zap2it.com/zap2it.com.test.js diff --git a/sites/zap2it.com/zap2it.com.config.js b/sites/zap2it.com/zap2it.com.config.js new file mode 100644 index 00000000..d65813ea --- /dev/null +++ b/sites/zap2it.com/zap2it.com.config.js @@ -0,0 +1,75 @@ +const dayjs = require('dayjs') +const timezone = require('dayjs/plugin/timezone') +const utc = require('dayjs/plugin/utc'); +const isBetween = require('dayjs/plugin/isBetween') + +dayjs.extend(timezone); +dayjs.extend(utc); +dayjs.extend(isBetween); + +const localTimezone = dayjs.tz.guess() + +module.exports = { + site: 'zap2it.com', + days: 2, + url: 'https://tvlistings.zap2it.com/api/sslgrid', + request: { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + data({ date, channel }) { + const [device, lineupId, headendId, countryCode, postalCode, prgsvcid] = channel.site_id.split('/') + + if (!device || !lineupId || !headendId || !countryCode || !postalCode || !prgsvcid) { + throw new Error('El site_id no contiene todos los valores obligatorios.') + } + + const timestamp = dayjs(date).unix().toString() + + return { + lineupId, + IsSSLinkNavigation: 'true', + timespan: '336', + timestamp, + prgsvcid, + headendId, + countryCode, + postalCode, + device, + userId: '-', + aid: 'gapzap', + DSTUTCOffset: '-240', + STDUTCOffset: '-300', + DSTStart: '2025-03-09T02:00Z', + DSTEnd: '2025-11-02T02:00Z', + languagecode: 'en-us', + }; + }, + }, + parser: function ({ content, date }) { + const data = JSON.parse(content); + const programs = []; + + Object.keys(data).forEach(dateKey => { + data[dateKey].forEach(item => { + programs.push({ + title: item.program.title, + subTitle: item.program.episodeTitle || '', + description: item.program.shortDesc || '', + genres: item.program.genres ? item.program.genres.map(genre => genre.name) : [], + start: dayjs.unix(item.startTime).utc().format('YYYY-MM-DD HH:mm:ss'), + stop: dayjs.unix(item.endTime).utc().format('YYYY-MM-DD HH:mm:ss'), + icon: item.thumbnail ? `https://zap2it.tmsimg.com/assets/${item.thumbnail}.jpg` : '', + rating: item.rating || '', + season: item.program.season || '', + episode: item.program.episode || '', + date: item.program.releaseYear || '', + }); + }); + }); + + return programs.filter(p => dayjs(p.start).isBetween(date.startOf('day').utc(), date.endOf('day').utc(), 'second', '[]')) + } +}; diff --git a/sites/zap2it.com/zap2it.com.test.js b/sites/zap2it.com/zap2it.com.test.js new file mode 100644 index 00000000..2a6c46e8 --- /dev/null +++ b/sites/zap2it.com/zap2it.com.test.js @@ -0,0 +1,72 @@ +const { parser, url } = require('./zap2it.com.config.js') +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('2025-02-06', 'YYYY-MM-DD').startOf('d') +const channel = { site_id: 'X/USA-NY31695-DEFAULT/NY31695/USA/13302/49141', xmltv_id: 'Spectrum News 1' } + +it('can generate valid url', () => { + expect(url).toBe('https://tvlistings.zap2it.com/api/sslgrid') +}) + +it('can parse response', () => { + const content = JSON.stringify({ + '2025-02-06': [ + { + program: { + title: 'Your Afternoon on Spectrum News 1 - Central NY', + episodeTitle: '', + shortDesc: '', + genres: [], + season: '', + episode: '', + releaseYear: '' + }, + startTime: 1738868400, + endTime: 1738872000, + thumbnail: '' + }, + { + program: { + title: 'Your Afternoon on Spectrum News 1 - Central NY', + episodeTitle: '', + shortDesc: '', + genres: [], + season: '', + episode: '', + releaseYear: '' + }, + startTime: 1738872000, + endTime: 1738875600, + thumbnail: '' + } + ] + }) + + const results = parser({ content, date }) + + expect(results.length).toBe(2) + expect(results[0]).toMatchObject({ + title: 'Your Afternoon on Spectrum News 1 - Central NY', + start: dayjs.unix(1738868400).utc().format('YYYY-MM-DD HH:mm:ss'), + stop: dayjs.unix(1738872000).utc().format('YYYY-MM-DD HH:mm:ss') + }) + expect(results[1]).toMatchObject({ + title: 'Your Afternoon on Spectrum News 1 - Central NY', + start: dayjs.unix(1738872000).utc().format('YYYY-MM-DD HH:mm:ss'), + stop: dayjs.unix(1738875600).utc().format('YYYY-MM-DD HH:mm:ss') + }) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: '{}' + }) + + expect(result).toEqual([]) +})