From 5427ba2fae8a2130f0e1a8bd2c83d45baf52d726 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sat, 25 Jun 2022 22:58:21 +0300 Subject: [PATCH 1/5] Create directv.com.ar.test.js --- sites/directv.com.ar/directv.com.ar.test.js | 78 +++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 sites/directv.com.ar/directv.com.ar.test.js diff --git a/sites/directv.com.ar/directv.com.ar.test.js b/sites/directv.com.ar/directv.com.ar.test.js new file mode 100644 index 00000000..4d3c62a4 --- /dev/null +++ b/sites/directv.com.ar/directv.com.ar.test.js @@ -0,0 +1,78 @@ +// npx epg-grabber --config=sites/directv.com.ar/directv.com.ar.config.js --channels=sites/directv.com.ar/directv.com.ar_ar.channels.xml --output=guide.xml --days=2 + +const { parser, url, request } = require('./directv.com.ar.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('2022-06-19', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: '120#AME2', + xmltv_id: 'AmericaTV.ar' +} + +it('can generate valid url', () => { + expect(url).toBe('https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming') +}) + +it('can generate valid request method', () => { + expect(request.method).toBe('POST') +}) + +it('can generate valid request headers', () => { + expect(request.headers).toMatchObject({ + 'Content-Type': 'application/json; charset=UTF-8', + Cookie: 'PGCSS=16; PGLang=S; PGCulture=es-AR;' + }) +}) + +it('can generate valid request data', () => { + expect(request.data({ channel, date })).toMatchObject({ + filterParameters: { + day: 19, + time: 0, + minute: 0, + month: 6, + year: 2022, + offSetValue: 0, + filtersScreenFilters: [''], + isHd: '', + isChannelDetails: 'Y', + channelNum: '120', + channelName: 'AME2' + } + }) +}) + +it('can parse response', () => { + const content = `{"d":[{"ChannelSection":"","ChannelFullName":"América TV (ARG)","IsFavorite":false,"ChannelName":"AME2","ChannelNumber":120,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}` + const result = parser({ content, channel }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(result).toMatchObject([ + { + start: '2022-06-19T03:00:00.000Z', + stop: '2022-06-19T03:15:00.000Z', + title: 'Chicas guapas', + description: + 'Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.', + rating: { + system: 'MPA', + value: 'NR' + } + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + content: ``, + channel + }) + expect(result).toMatchObject([]) +}) From 4c74c0a6d4e657f264a860c23d0c8a45aa793ee7 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sat, 25 Jun 2022 22:58:29 +0300 Subject: [PATCH 2/5] Create directv.com.ar_ar.channels.xml --- .../directv.com.ar_ar.channels.xml | 267 ++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 sites/directv.com.ar/directv.com.ar_ar.channels.xml diff --git a/sites/directv.com.ar/directv.com.ar_ar.channels.xml b/sites/directv.com.ar/directv.com.ar_ar.channels.xml new file mode 100644 index 00000000..d4ab9f55 --- /dev/null +++ b/sites/directv.com.ar/directv.com.ar_ar.channels.xml @@ -0,0 +1,267 @@ + + + + 24 Horas + A24 HD + A24 + A&E HD + A&E + AMC + AMC HD + AXN + AXN HD + América TV (ARG) + América TV HD (ARG) + Animal Planet HD + Animal Planet + Antena 3 Internacional + Antena 3 HD + A3Cine HD + Atres Series + Atres Series HD + BBC World News + Baby TV HD + Bloomberg Television + Bravo TV + C5N Canal 5 Noticias (ARG) + C5N HD + CCTV-4 + CGTN-Español + CNN Chile + CNN International + CNN en español + Cable Noticias de Colombia + Canal 26 HD + Canal 26 (ARG). + EL TRES Rosario + Canal 7 de Jujuy + CANAL 9 + Canal LUZ (ARG) + Canal 21 (ARG) + Canal Rural + Canal A HD + CANAL DE LA CIUDAD + Caracol Internacional + Cartoon Network HD + Cartoon Network (Sur) + Cartoonito + CINE.AR (ARG) + Cinelatino + Cinecanal HD + Cinecanal (ARG) + Cinemax HD (Sur) + Cinemax Sur + Magazine + Magazine HD + Comedy Central HD + Comedy Central + Construir TV + Crónica TV (ARG) + DHEHD + DHE + Deutsche Welle + De Película HD (SD) + DeporTV + DeporTV HD + DIRECTV Sports 2 + DIRECTV Sports 2 HD + DIRECTV Sports (ARG) + DIRECTV Sports Fight + DIRECTV Sports Fight + DIRECTV Sports HD (ARG) + DIRECTV Sports + + DIRECTV Sports+ HD + Discovery Channel HD + Discovery Channel (Sur) + Discovery Home & Health HD + Discovery Home & Health + Discovery Kids HD + Discovery Kids (Sur) + Discovery Theater HD + Discovery Turbo + Discovery World HD + Disney HD + Disney Channel (Sur) + Disney Junior Sur + Disney Jr. HD + ESPN 2 Latin Sur SD + ESPN 2 Latin Sur HD + ESPN 3 Sur HD + ESPN 3 Sur + ESPN Argentina SD + ESPN Extra HD + ESPN Argentina HD + ESPN Premium (SD) + ESPN Premium (HD) + E! Entertainment + E! Entertainment HD + Eternal Word TV Network + El Doce CANAL 12 DE CORDOBA + El Garage TV HD + El Gourmet HD + El Gourmet + Canal 9 (ARG) + Canal 9 HD (ARG) + EL SIETE + El Tiempo + El Trece (ARG) + El Trece HD (ARG) + Encuentro (ARG) + Encuentro Internacional + Enlace + Europa Europa HD + FX HD + FX + Film & Arts + Food Network HD + Food Network + FOX Sports 2 HD + FOX Sports 2 + FOX Sports 3 + FOX Sports 3 HD + FOX Sports (ARG) + FOX Sports Argentina HD + Glitz + Golden Edge + Golden TV + Golden HD + Golf Channel + Golf Channel HD + HBO2 + HBO2HD + HBO Family HD + HBO Family (Este) + HBO HD + HBO (Este) + HBO Mundi + HBO Plus HD + HBO Plus (Este) + HBO Pop + HBO Signature + HBO Signature HD + HBO Xtreme + HBO Xtreme + Home & Garden TV HD + HTV + History 2 + H2 HD + History HD + History (Sur) + Hola TV HD + Hola TV + HustlerTV + I-SAT + IVC Internacional HD + IVC Internacional + Informacion Periodística + Discovery ID HD + Investigation Discovery + La Nacion + + La Nacion + HD + Canal de las Estrellas + Lifetime + Lifetime HD + MLB Extra Innings + MLB Extra Innings + MTV Latino + MTV HD + MÁS CHIC + Music Top HD + NBA TV HD + NET TV HD (ARG) + NET TV (ARG) + NHK World TV + NTN 24 - Nuestra Tele noticias 24HS + National Geographic HD + National Geographic (Sur) + Nick JR. HD + NICK JR + Nickelodeon HD + Nickelodeon + OnDIRECTV HD (Sur) + OnDIRECTV (Sur) + PX Sports HD + PAKA PAKA (ARG) + Paramount Network + Paramount HD + Pasiones HD + Pasiones + Playboy TV + Quiero Música en mi Idioma + Quiero Mi Musica en Mi Idioma HD + RCN Nuestra Tele + RTP Internacional + RAI International + Smithsonian Channel HD + Sony Entertainment HD + Sony Entertainment + Space HD + Space (Sur) + STAR Channel + STAR Channel HD + Studio Universal HD + Studio Universal + Sun Channel + SyFy + SyFy HD + TBS Very Funny + Turner Classic Movies + TLC - Travel & Living Channel + TLC HD + TN Todo Noticias + TN Noticias HD + TNT HD + TNT Series HD + TNT Series + TNT (SUR) + TNT SPORTS HD + TNT Sports + TV Chile + Tv Ciudad + TV Cortos HD + Globo Internacional + TV Perú + TV Perú HD + TV Perú Noticias HD + La TV Pública (ARG) + La TV Pública HD (ARG) + Telediario Television + Telefe (ARG) + Telefe HD (ARG) + Canal 5 de Rosario + Telemax + Telemundo Internacional + Tierra Mia HD + TIGO Sports + TLNovelas + TRUTV + TyC Sports + TyC Sports HD + Universal Cinema HD + Universal Cinema + Universal Comedy HD + Universal Comedy + Universal Crime Este HD + Universal Crime Este + Universal Crime Oeste HD + Universal Crime Oeste + Universal Premiere Este HD + Universal Premiere Este + Universal Premiere Oeste HD + Universal Premiere Oeste + Universal Reality + Universal Reality HD + Universal TV HD (Sur) + Universal + Univision + VTV PLUS + VePLUS HD + Venus + Volver + Warner Channel HD + Warner Channel + XTSY + ZEE TV + ZooMoo + + From b41d2448427520e84b491406d83cab339e359d10 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sat, 25 Jun 2022 22:58:44 +0300 Subject: [PATCH 3/5] Create directv.com.ar.yml --- .github/workflows/directv.com.ar.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .github/workflows/directv.com.ar.yml diff --git a/.github/workflows/directv.com.ar.yml b/.github/workflows/directv.com.ar.yml new file mode 100644 index 00000000..c511551f --- /dev/null +++ b/.github/workflows/directv.com.ar.yml @@ -0,0 +1,17 @@ +name: directv.com.ar +on: + schedule: + - cron: '0 0 * * *' + workflow_dispatch: + workflow_run: + workflows: [_trigger] + types: + - completed +jobs: + load: + uses: ./.github/workflows/_load.yml + with: + site: ${{github.workflow}} + secrets: + APP_ID: ${{ secrets.APP_ID }} + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} From fe7a3969f8630ff478672455ce4373a03df1f0ac Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sat, 25 Jun 2022 23:15:27 +0300 Subject: [PATCH 4/5] Update directv.com.ar.test.js --- sites/directv.com.ar/directv.com.ar.test.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sites/directv.com.ar/directv.com.ar.test.js b/sites/directv.com.ar/directv.com.ar.test.js index 4d3c62a4..9a2d7484 100644 --- a/sites/directv.com.ar/directv.com.ar.test.js +++ b/sites/directv.com.ar/directv.com.ar.test.js @@ -9,8 +9,8 @@ dayjs.extend(utc) const date = dayjs.utc('2022-06-19', 'YYYY-MM-DD').startOf('d') const channel = { - site_id: '120#AME2', - xmltv_id: 'AmericaTV.ar' + site_id: '207#A&EHD', + xmltv_id: 'AEHDSouth.us' } it('can generate valid url', () => { @@ -40,14 +40,14 @@ it('can generate valid request data', () => { filtersScreenFilters: [''], isHd: '', isChannelDetails: 'Y', - channelNum: '120', - channelName: 'AME2' + channelNum: '207', + channelName: 'A&EHD' } }) }) it('can parse response', () => { - const content = `{"d":[{"ChannelSection":"","ChannelFullName":"América TV (ARG)","IsFavorite":false,"ChannelName":"AME2","ChannelNumber":120,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}` + const content = `{"d":[{"ChannelSection":"","ChannelFullName":"A&E HD","IsFavorite":false,"ChannelName":"A&EHD","ChannelNumber":207,"ProgramList":[{"_channelSection":"","eventId":"120289890767","titleId":"SH0110397700000001","title":"Chicas guapas","programId":null,"description":"Un espacio destinado a la belleza y los distintos estilos de vida, que muestra el trabajo inspiracional de la moda latinoamericana.","episodeTitle":null,"channelNumber":120,"channelName":"AME2","channelFullName":"América TV (ARG)","channelSection":"","contentChannelID":120,"startTime":"/Date(-62135578800000)/","endTime":"/Date(-62135578800000)/","GMTstartTime":"/Date(-62135578800000)/","GMTendTime":"/Date(-62135578800000)/","css":16,"language":null,"tmsId":"SH0110397700000001","rating":"NR","categoryId":"Tipos de Programas","categoryName":0,"subCategoryId":0,"subCategoryName":"Series","serviceExpiration":"/Date(-62135578800000)/","crId":null,"promoUrl1":null,"promoUrl2":null,"price":0,"isPurchasable":"N","videoUrl":"","imageUrl":"https://dnqt2wx2urq99.cloudfront.net/ondirectv/LOGOS/Canales/AR/120.png","titleSecond":"Chicas guapas","isHD":"N","DetailsURL":null,"BuyURL":null,"ProgramServiceId":null,"SearchDateTime":null,"startTimeString":"6/19/2022 12:00:00 AM","endTimeString":"6/19/2022 12:15:00 AM","DurationInMinutes":null,"castDetails":null,"scheduleDetails":null,"seriesDetails":null,"processedSeasonDetails":null}]}]}` const result = parser({ content, channel }).map(p => { p.start = p.start.toJSON() p.stop = p.stop.toJSON() From 54ecb7cd75c57bb102339f11471db0969fe69d02 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Sat, 25 Jun 2022 23:15:59 +0300 Subject: [PATCH 5/5] Create directv.com.ar.config.js --- sites/directv.com.ar/directv.com.ar.config.js | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 sites/directv.com.ar/directv.com.ar.config.js diff --git a/sites/directv.com.ar/directv.com.ar.config.js b/sites/directv.com.ar/directv.com.ar.config.js new file mode 100644 index 00000000..b4af7929 --- /dev/null +++ b/sites/directv.com.ar/directv.com.ar.config.js @@ -0,0 +1,83 @@ +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(timezone) + +module.exports = { + site: 'directv.com.ar', + url: `https://www.directv.com.ar/guia/ChannelDetail.aspx/GetProgramming`, + request: { + method: 'POST', + headers: { + 'Content-Type': 'application/json; charset=UTF-8', + Cookie: 'PGCSS=16; PGLang=S; PGCulture=es-AR;' + }, + data({ channel, date }) { + const [channelNum, channelName] = channel.site_id.split('#') + + return { + filterParameters: { + day: date.date(), + time: 0, + minute: 0, + month: date.month() + 1, + year: date.year(), + offSetValue: 0, + filtersScreenFilters: [''], + isHd: '', + isChannelDetails: 'Y', + channelNum, + channelName: channelName.replace('&', '&') + } + } + } + }, + parser({ content, channel }) { + let programs = [] + const items = parseItems(content, channel) + items.forEach(item => { + programs.push({ + title: item.title, + description: item.description, + rating: parseRating(item), + start: parseStart(item), + stop: parseStop(item) + }) + }) + + return programs + } +} + +function parseRating(item) { + return item.rating + ? { + system: 'MPA', + value: item.rating + } + : null +} + +function parseStart(item) { + return dayjs.tz(item.startTimeString, 'M/D/YYYY h:mm:ss A', 'America/Argentina/Buenos_Aires') +} + +function parseStop(item) { + return dayjs.tz(item.endTimeString, 'M/D/YYYY h:mm:ss A', 'America/Argentina/Buenos_Aires') +} + +function parseItems(content, channel) { + if (!content) return [] + let [ChannelNumber, ChannelName] = channel.site_id.split('#') + ChannelName = ChannelName.replace('&', '&') + const data = JSON.parse(content) + if (!data || !Array.isArray(data.d)) return [] + const channelData = data.d.find( + c => c.ChannelNumber == ChannelNumber && c.ChannelName === ChannelName + ) + + return channelData && Array.isArray(channelData.ProgramList) ? channelData.ProgramList : [] +}