diff --git a/sites/mtel.ba/mtel.ba.test.js b/sites/mtel.ba/mtel.ba.test.js index aef9f87d..1e0bdeeb 100644 --- a/sites/mtel.ba/mtel.ba.test.js +++ b/sites/mtel.ba/mtel.ba.test.js @@ -32,7 +32,7 @@ it('can get logo url', () => { ) }) -fit('can parse response', () => { +it('can parse response', () => { const result = parser({ date, channel, content }) expect(result).toMatchObject([ { diff --git a/sites/siba.com.co/siba.com.co.config.js b/sites/siba.com.co/siba.com.co.config.js new file mode 100644 index 00000000..30682689 --- /dev/null +++ b/sites/siba.com.co/siba.com.co.config.js @@ -0,0 +1,60 @@ +const dayjs = require('dayjs') + +module.exports = { + site: 'siba.com.co', + url: 'http://devportal.siba.com.co/index.php?action=grilla', + request: { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' + }, + data({ channel, date }) { + const params = new URLSearchParams() + params.append('servicio', '10') + params.append('ini', date.unix()) + params.append('end', date.add(1, 'd').unix()) + params.append('chn', channel.site_id) + + return params + } + }, + logo({ content, channel }) { + const data = parseContent(content, channel) + + return data && data.logo ? `http://cdn-std-1.sibasa.netdna-cdn.com/co/${data.logo}` : null + }, + parser: function ({ content, channel }) { + let programs = [] + const items = parseItems(content, channel) + items.forEach(item => { + programs.push({ + title: item.nom, + start: parseStart(item).toJSON(), + stop: parseStop(item).toJSON() + }) + }) + + return programs + } +} + +function parseStart(item) { + return dayjs.unix(item.ini) +} + +function parseStop(item) { + return dayjs.unix(item.fin) +} + +function parseContent(content, channel) { + const data = JSON.parse(content) + if (!data || !Array.isArray(data.list)) return null + + return data.list.find(i => i.id === channel.site_id) +} + +function parseItems(content, channel) { + const data = parseContent(content, channel) + + return data ? data.prog : [] +} diff --git a/sites/siba.com.co/siba.com.co.test.js b/sites/siba.com.co/siba.com.co.test.js new file mode 100644 index 00000000..22482ff7 --- /dev/null +++ b/sites/siba.com.co/siba.com.co.test.js @@ -0,0 +1,59 @@ +// npx epg-grabber --config=sites/siba.com.co/siba.com.co.config.js --channels=sites/siba.com.co/siba.com.co_co.channels.xml --output=.gh-pages/guides/co/siba.com.co.epg.xml --days=2 + +const { parser, url, request, logo } = require('./siba.com.co.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('2021-11-11', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: '395', + xmltv_id: 'CanalClaro.cl' +} +const content = `{"list":[{"id":"395","nom":"CANAL CLARO","num":"102","logo":"7c4b9e8566a6e867d1db4c7ce845f1f4.jpg","cat":"Exclusivos Claro","prog":[{"id":"665724465","nom":"Worst Cooks In America","ini":1636588800,"fin":1636592400}]}],"error":null}` + +it('can generate valid url', () => { + expect(url).toBe('http://devportal.siba.com.co/index.php?action=grilla') +}) + +it('can generate valid request headers', () => { + expect(request.headers).toMatchObject({ + 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' + }) +}) + +it('can generate valid request data', () => { + const result = request.data({ channel, date }) + expect(result.has('servicio')).toBe(true) + expect(result.has('ini')).toBe(true) + expect(result.has('end')).toBe(true) + expect(result.has('chn')).toBe(true) +}) + +it('can get logo url', () => { + expect(logo({ content, channel })).toBe( + 'http://cdn-std-1.sibasa.netdna-cdn.com/co/7c4b9e8566a6e867d1db4c7ce845f1f4.jpg' + ) +}) + +it('can parse response', () => { + const result = parser({ date, channel, content }) + expect(result).toMatchObject([ + { + start: '2021-11-11T00:00:00.000Z', + stop: '2021-11-11T01:00:00.000Z', + title: 'Worst Cooks In America' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: `{"list":[],"error":null}` + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/siba.com.co/siba.com.co_co.channels.xml b/sites/siba.com.co/siba.com.co_co.channels.xml new file mode 100644 index 00000000..1bc426c2 --- /dev/null +++ b/sites/siba.com.co/siba.com.co_co.channels.xml @@ -0,0 +1,108 @@ + + + + A&E Chile + AMC Andina + Animal Planet Latinoamérica + AXN Latinoamérica + Brazzers TV XX + Cablenoticias + Canal 1 + Canal Capital + Canal Claro + Canal Congreso + Canal Institucional + Canal TRO + Caracol TV + Cartoon Network Latin America + Cinecanal Chile + CineLatino + Cinema + + Cinemax Latinoamérica + City TV + Claro Cinema + Claro música TV + Claro Sports Chile + CNN en Español + Comedy Central Latinoamérica Sur + Cosmovisión + Cristovisión + Discovery Channel Latinoamérica + Discovery Home & Health Latinoamérica + Discovery Kids América Latina + Discovery Turbo América Latina + Disney Channel Sur +1 + Disney Junior Sur +1 + Disney XD Sur +1 + E! Latinoamérica + El Gourmet Norte + El Tiempo TV + Enlace + ESNE TV + ESPN 2 Colombia + ESPN 3 Sur + ESPN América Latina + EWTN España - Latinoamérica + Food Network Latinoamérica + Fox Sports 2 Latin America + Fox Sports 3 Latin America + Fox Sports Latin America + FX Chile + FXM Chile + Glitz Latinoamérica + Golden Latinoamérica + History 2 Latinoamérica + History Latinoamérica + HTV + Investigation Discovery Latinoamérica + Las Estrellas Latinoamérica + Lifetime Latinoamérica + Me Gusta + MTV Latino Sud + MultiPremier + Nat Geo Kids + National Geographic Chile + National Geographic Wild Latin + Nickelodeon Centro + Nick Jr Latin America + NickMusic + NTN 24 + Paramount Network Latin America + Pasiones Latinoamérica + Penthouse TV Latin América + Playboy TV Latin America + RCN Novelas + RCN TV + Red+ + Señal Colombia + Sextreme + Sin Límites + Sony Channel Andes + Space Chile + Star Channel Latin America + Star Life Latin + Studio Universal Chile + TBS América Latina + Tele Amiga + Teleantioquia + Telecafé + Telecaribe + Teleislas + Telemundo Internacional + Telepacífico + TLC Latinoamérica + Tlnovelas América + TNT Chile + TNT Series Colombia + Trece + Tru TV América Latina + TV Agro + TV Familia + Universal TV América Latina + Venus + Ve Plus Panregional + Warner Channel Panregional + Win Sports + Zoom + + \ No newline at end of file