diff --git a/sites/zap2it.com/readme.md b/sites/zap2it.com/readme.md new file mode 100644 index 000000000..e67c2d33f --- /dev/null +++ b/sites/zap2it.com/readme.md @@ -0,0 +1,13 @@ +# zap2it.com + +### Download the guide + +```sh +npm run grab --- --site=zap2it.com +``` + +### Test + +```sh +npm test --- zap2it.com +``` diff --git a/sites/zap2it.com/zap2it.com.channels.xml b/sites/zap2it.com/zap2it.com.channels.xml new file mode 100644 index 000000000..009e914cb --- /dev/null +++ b/sites/zap2it.com/zap2it.com.channels.xml @@ -0,0 +1,598 @@ + + + WINS + DTV203 + HSNHD + QVCHD + QVC + HSN + NEWSMIX + JTV + SHPHQHD + SHOPHQ + DT309 + SHOPLC + QVC2 + METVN + COZITV + GRIT + BOUNCE + GET + DT270 + DT225 + DT250 + DT87 + DT268 + DT262 + VALU + DT310 + DTV308 + DT321 + CASH + DT320 + DT255 + DTVSS + DITV105 + DITV112 + DITV113 + DITV114 + DITV131 + LOOR201 + CNNHD + CNN + HLNHD + HLN + SMX + ESPNHD + ESPN + ESPNWHD + ESPNEWS + ESPNUHD + ESPNU + ESPN2HD + ESPN2A + ESPNA + ESPN2 + NFLNRZD + NFLRZ + NFLHD + NFLNET + MLBHDA + MLBNA + MLBHD + MLBN + MAVTVHD + NHLHD + NHLNET + NBATVHD + NBATV + TENISHD + TENNIS + GOLFHD + GOLF + FS1HD + FS1 + CBSSNHD + CBSSN + DT222 + DTVCSHP + DT224 + DT227 + GEM + HGTVD + HGTV + MAGNHD + MAGN + FOODHD + FOOD + COOKHD + COOK + GSNHD + GSN + WOWU + TASTE + EHD + E + BRAVOHD + BRAVO + REELZHD + REELZ + SUNDHD + SUNDANC + PARHD + PAR + USAHD + USA + DT288 + SYFYHD + SYFY + TNTPHD + TNTHD + TNT + TRUTVHD + TRUTV + TBSHDP + TBSHD + TBS + FXHD + FX + CCHDP + CCHD + COMEDY + OXYGNHD + OXYGEN + LIFED + LIFEHD + LIFE + LMNHD + LMN + AMCHD + AMC + TCMHD + TCM + FXMHD + FXM + FXXHD + FXX + WEHD + WE + DLC + GETIT1 + BBCAHD + BBCA + AETVHD + AETV + FYIHD + FYISD + EARTHX + HSTRYHD + HISTORY + VICEHD + VICE + LOGO + POPHD + POPSD + OVATNHD + OVATION + NGCHD + NGC + TRAVHD + TRAV + DSCHD + DSC + OWNPA + OWNHD + OWN + TLCHD + TLC + MTHD + APLHD + APL + NGWIHD + NGWILD + SCIHD + SCIENCE + IDHD + ID + DESTHD + DEST + AHCHD + AHC + DJCHHD + DJCH + DISNHD + DISN + DISNP + DXDHD + DXD + BABY1 + DFCHD + DFC + UKIDSH + UKIDS + TOONHD + TOON + TOONP + BOOM + NIKHD + NIK + NIKP + NICJRHD + NICJR + NIKTON + TNCK + TVLNDHD + TVLAND + IONDHD + MERITST + NWSNTSD + NEWSNTN + HSN2 + FREFMHD + FREEFRM + HALLHD + HALL + FMC + QVC3 + SALE + SCNTV + NHKWRLD + DTV3231 + FETV + DTV323 + PRIMERF + JLTV + GFAMHD + GFAM + CMTVHD + CMTV + TVONEHD + BETHDP + BETHD + BET + BHER + MTVPHD + MTVHD + MTV + MTV2HD + MTV2 + IFCHD + IFC + VH1HD + VH1 + MTVCLAS + UP + FUSEHD + AXSTV + CLEOHD + GRIOCH + I24NWEN + SONLFHD + SBND + RFDHD + BBCWDEH + FIRST + FSTV + NEWSMXH + NEWSMX + CSPAN + CSPAN2 + BLOOMHD + BLOOM + CHDDRSD + CNBCHD + CNBC + MNBCHD + MSNBC + CNBCWLD + CNNI + FBNHD + FBN + FNCHD + FNC + ACUWTHH + WEATHHD + WEATH + GEB + INSPHD + INSP + GODTV + DITV366 + WHMBSAT + HOPE + DSTRESP + DYSTRHD + EWTN + INSPIRE + TBNHD + WORD + BYUTV + BLOSSM + CTN + TCTHD + NRBTV + FAITHHD + IMPCNET + ASPREHD + CMDTVHD + JUST + RVLTHD + HERICNH + FMHD + JBS + KTLADT + KTLA + DT401 + UNIHD + UNI + UNIP + GALAHD + GALA + MEGAUSH + MEGAUS + TELESAT + TELESAP + UNIMPHD + UNIMWST + VEPTVU + UNVSOHD + UNVSO + TEFEIHD + TEFEI + MMTVUS + DSCE + WAPAUS + VROLA + NUESTRT + CARAI + NTN24 + CNNL + ATRESSE + CINESTE + CINLUS + CINENOS + BABYUS + STZESPS + CENTROA + TLCN + HOLATV + PMAGIC + ZOOMOOD + BANDAUS + HOGARHD + HOGAR + NGMUNDO + DFAM + TVNI + ECUAVI + SURPERU + VME + ESTRLLA + HISTE + PASNUS + TR3S + CNL22 + CANAL11 + ENLUSA + SOCINH + CDINA + DEPELUS + DEPELC + NMASFOR + UNITLNO + DT455 + ESNE + TCIE + ANT3I + A3CINE + HITN + CMEX + TUDNUH + TUDNU + FXDEPHD + FXDEP + ESPNDHD + ESPND + GOLTV + TYCINUH + NSTRAVI + ESTNWSD + MNMX + EWTNES + HBOHD + HBO + HBO2HD + HBO2 + HBOSGHD + HBOSIG + HBOHDP + HBOP + HBO2PHD + HBO2P + HBOCHD + HBOFHD + HBOF + HBOFP + HBOZHD + HBOLAHD + HBOLAT + MAXHD + MAX + MAXHDP + MAXP + MOMAXHD + MOMAX + ACMAXHD + 5MAXHD + MOVIEHD + THMAXHD + CMAXHD + STZHD + STARZ + STZHDP + STARZP + STZKHD + STZCHD + STZEHD + STZE + STRZIBH + STZIB + STRZCIH + STZENHD + STZENC + STZENCP + STZENCL + STZEWSS + STZENSU + STZENBK + SZEAHD + STZENAC + STZENFS + PARSHOH + PARSHO + PASHOHW + PARSHOW + SHO2HD + SHO2 + SHOBETH + SHOBET + SHOWXHD + SHOWX + SHOCSHD + NEXTHD + FAMZHD + TMCHD + TMC + TMCP + TMCXHD + FLIX + AMCPLUS + MGMHD + MGMHTH + MGMMRHD + DOGTV + YUM + HFM + HMYSHD + HDNETMV + SONYHD + SMTHHD + CINHD + MTVLIVE + SHORTS + PLYPRMH + DTVPLBY + VIVIDTV + PXX5PRM + PLAYHD + ADLTPPV + RKTV + FDUELTV + COWBOY + PURST + SPRTMAN + OUTHD + OUTD + BTENOHD + BIGTENO + BIG10HD + BIGTEN + SECH + SEC + ACCSD + ACC + FS2HD + FS2 + FSCPLHD + FSP + NLSHD + WLLOHD + WILLOW2 + NESNPLD + NESNPL + NESNHD + NESN + NBCSBH + NBCSB + YESHDNY + YES + MSGHD + MSG + MSGSNHD + MSGSNZ1 + SNYHD + SNY + MASN2HD + MASNHD + MASN2 + MASN + MNMTOM + DFDSOHD + FDSSO + FDSEOMH + FDSE + DTVSUNN + SUNNET + FDFLHD + FDSFL + SNPTHD + SNPT + FDOH1 + CINR + FDOH2 + FDSGL + FDSGLHD + FDSTHD + FDSD + MSNNSD + MSNNF + MNNT + FDNORHD + FDSNOR + FDWIHD + FDWI + FDMSATH + FDMWSAT + SCHN2 + SCHNHD + SCHN + FDSW4HD + FDSW4 + FDSWHD + FDSW + ALTSPHD + ALTSPRT + SNLV + SNLVSD + ARID + RTNWHD + RTNW + SNLA + SSNLA + SPECSN + SPECTSN + FDWHD + FDW + FDSCHD + FDSNSC + FDSCSDH + FDSCSD + NBCSBAH + NBCSBA + NBSCASH + NBCSCAS + MSGSN21 + MLBSZHD + MITALIA + RAII + RAINW24 + RAIPREM + RAIRAD1 + SBN + VGNTV + VETV + VFACE + SCHANNL + VIENTTV + VIETV + FILM24H + HONV + LSRC + NTVCHD + NHK1HD + PBO + OPMTV + SARISARI + ANC + KAPATID + KBSW24 + LIFESKR + SBS + NBCESTR + LOOLOO + NBCWSTR + CDINAHD + ANBUSCH + BAR + DTV9800 + diff --git a/sites/zap2it.com/zap2it.com.config.js b/sites/zap2it.com/zap2it.com.config.js new file mode 100644 index 000000000..1135075e4 --- /dev/null +++ b/sites/zap2it.com/zap2it.com.config.js @@ -0,0 +1,70 @@ +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) + +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', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36', + }, + data({ date, channel }) { + const [device, lineupId, headendId, countryCode, postalCode, prgsvcid] = channel.site_id.split('/') + + 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).add(dayjs(p.start).utcOffset(), 'minute').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 000000000..2a6c46e82 --- /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([]) +})