Merge pull request #1421 from iptv-org/add-cablego.com.pe

Add guide from cablego.com.pe
This commit is contained in:
Aleksandr Statciuk 2022-11-28 11:06:53 +03:00 committed by GitHub
commit a30b6501ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 282 additions and 0 deletions

17
.github/workflows/cablego.com.pe.yml vendored Normal file
View file

@ -0,0 +1,17 @@
name: cablego.com.pe
on:
schedule:
- cron: '0 3 * * *'
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 }}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,108 @@
const dayjs = require('dayjs')
const axios = require('axios')
const cheerio = require('cheerio')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
module.exports = {
site: 'cablego.com.pe',
request: {
method: 'POST',
headers: {
'x-requested-with': 'XMLHttpRequest'
},
cache: {
ttl: 60 * 60 * 1000 // 1 hour
}
},
url({ channel, date }) {
const [page] = channel.site_id.split('#')
return `https://cablego.com.pe/epg/default/${date.format(
'YYYY-MM-DD'
)}?page=${page}&do=loadPage`
},
parser: function ({ content, channel, date }) {
let programs = []
const items = parseItems(content, channel)
items.forEach(item => {
const $item = cheerio.load(item)
const prev = programs[programs.length - 1]
let start = parseStart($item, date)
if (!start) return
if (prev) {
if (start.isBefore(prev.start)) {
start = start.add(1, 'd')
date = date.add(1, 'd')
}
prev.stop = start
}
const stop = start.add(30, 'm')
programs.push({
title: parseTitle($item),
start,
stop
})
})
return programs
},
async channels() {
const promises = [0, 1, 2, 3, 4].map(page => {
return axios.post(
`https://cablego.com.pe/epg/default/2022-11-28?page=${page}&do=loadPage`,
null,
{
headers: {
'x-requested-with': 'XMLHttpRequest'
}
}
)
})
const channels = []
await Promise.allSettled(promises).then(results => {
results.forEach((r, page) => {
if (r.status === 'fulfilled') {
const html = r.value.data.snippets['snippet--channelGrid']
const $ = cheerio.load(html)
$('.epg-channel-strip').each((i, el) => {
const channelId = $(el).find('.epg-channel-logo').attr('id')
channels.push({
lang: 'es',
site_id: `${page}#${channelId}`,
name: $(el).find('img').attr('alt')
})
})
}
})
})
return channels
}
}
function parseTitle($item) {
return $item('span:nth-child(2) > a').text().trim()
}
function parseStart($item, date) {
const time = $item('.epg-show-start').text().trim()
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'America/Lima')
}
function parseItems(content, channel) {
const [, channelId] = channel.site_id.split('#')
const data = JSON.parse(content)
if (!data || !data.snippets || !data.snippets['snippet--channelGrid']) return []
const html = data.snippets['snippet--channelGrid']
const $ = cheerio.load(html)
return $(`#${channelId}`).parent().find('.epg-show').toArray()
}

View file

@ -0,0 +1,54 @@
// npm run channels:parse -- --config=./sites/cablego.com.pe/cablego.com.pe.config.js --output=./sites/cablego.com.pe/cablego.com.pe_pe.channels.xml
// npx epg-grabber --config=sites/cablego.com.pe/cablego.com.pe.config.js --channels=sites/cablego.com.pe/cablego.com.pe_pe.channels.xml --output=guide.xml --days=2
const { parser, url, request } = require('./cablego.com.pe.config.js')
const fs = require('fs')
const path = require('path')
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-11-28', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '0#LATINA',
xmltv_id: 'Latina.pe'
}
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'https://cablego.com.pe/epg/default/2022-11-28?page=0&do=loadPage'
)
})
it('can generate valid request method', () => {
expect(request.method).toBe('POST')
})
it('can generate valid request headers', () => {
expect(request.headers).toMatchObject({
'x-requested-with': 'XMLHttpRequest'
})
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
let results = parser({ content, channel, date }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2022-11-28T05:00:00.000Z',
stop: '2022-11-28T06:30:00.000Z',
title: 'Especiales Qatar'
})
})
it('can handle empty guide', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
const result = parser({ content, channel, date })
expect(result).toMatchObject([])
})

View file

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="cablego.com.pe">
<channels>
<channel lang="es" xmltv_id="AmericaTelevision.pe" site_id="4#AMERICATV">AMERICA TV</channel>
<channel lang="es" xmltv_id="ATV.pe" site_id="0#ATVHD">ATV</channel>
<channel lang="es" xmltv_id="ATVPlus.pe" site_id="0#ATVMAS">ATV+</channel>
<channel lang="es" xmltv_id="BHTV.pe" site_id="0#BHTV">BHTV</channel>
<channel lang="es" xmltv_id="Conecta2TV.pe" site_id="0#CONECTA2">CONECTA2 TV</channel>
<channel lang="es" xmltv_id="CongresoTV.pe" site_id="0#CANALCONGRESO">CONGRESO TV</channel>
<channel lang="es" xmltv_id="DePeliculaLatinAmerica.mx" site_id="1#DEPELICULA">DE PELICULA</channel>
<channel lang="es" xmltv_id="DistritoComedia.mx" site_id="2#DISTRITOCOMEDIA">DISTRITO COMEDIA</channel>
<channel lang="es" xmltv_id="EcuadorTV.ec" site_id="4#ECUADORTV">ECUADOR TV</channel>
<channel lang="es" xmltv_id="EuropaEuropa.ar" site_id="1#EUROPAEUROPA">EUROPA EUROPA</channel>
<channel lang="es" xmltv_id="ExitosaTV.pe" site_id="0#EXITOSATV">EXITOSA TV</channel>
<channel lang="es" xmltv_id="GlobalTV.pe" site_id="0#GLOBAL">GLOBAL</channel>
<channel lang="es" xmltv_id="GoldenEdgePanregional.mx" site_id="1#GOLDENEDGE">GOLDEN EDGE</channel>
<channel lang="es" xmltv_id="Karibena.pe" site_id="3#KARIBENA">KARIBEÑA</channel>
<channel lang="es" xmltv_id="Latina.pe" site_id="0#LATINA">LATINA</channel>
<channel lang="es" xmltv_id="Nativa.pe" site_id="0#NATIVA">NATIVA</channel>
<channel lang="es" xmltv_id="OvacionTV.pe" site_id="3#OVACION">OVACION</channel>
<channel lang="es" xmltv_id="PanamericanaTV.pe" site_id="0#PANAMERICANATV">PANAMERICANA TV</channel>
<channel lang="es" xmltv_id="PasionesLatinAmerica.us" site_id="1#PASIONES">PASIONES</channel>
<channel lang="es" xmltv_id="PBO.pe" site_id="0#PBO">PBO</channel>
<channel lang="es" xmltv_id="TVPeru.pe" site_id="0#TVPERU">TV PERU</channel>
<channel lang="es" xmltv_id="USMPTV.pe" site_id="0#USMPTV">USMP TV</channel>
<channel lang="es" xmltv_id="Venus.ar" site_id="4#VENUS">VENUS</channel>
<channel lang="es" xmltv_id="WillaxTV.pe" site_id="0#WILLAX">WILLAX</channel>
<!-- <channel lang="es" xmltv_id="" site_id="0#AMC">AMC</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="0#CloverCH">CLOVER CHANNEL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="0#FOXCHANNEL">STAR CHANNEL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="0#FX">FX</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="0#ID">ID</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="0#PARAMOUNTCH">PARAMOUNT CHANNEL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#ANIMALPLANET">ANIMAL PLANET</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#AZCINEMA">CINEMA INOLVIDABLE</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#AZCORAZON">CORAZON</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#CHESTRELLAS">CANAL DE LAS ESTRELLAS</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#CINECANAL">CINECANAL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#DISCOVERYCHANNEL">DISCOVERY CHANNEL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#DISCOVERYSCIENCE">DISCOVERY SCIENCE</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#DISCOVERYTHEATER">DISCOVERY THEATER</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#DISCOVERYTURBO">DISCOVERY TURBO</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#DISCOVERYWORLD">DISCOVERY WORLD</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#FILMSandARTS">FILMS &amp; ARTS</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#GOLDENLATINO">GOLDEN LATINO</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#NATGEO">NATGEO</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#SONYMOVIES">SONY MOVIES</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#TELEMUNDO">TELEMUNDO</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="1#UNIVISION">UNIVISION</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#AZMUNDO">MUNDO</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#BITME">BITME</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#DISCOVERYKIDS">DISCOVERY KIDS</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#DISNEYCHANNEL">DISNEY CHANNEL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#DISNEYJUNIOR">DISNEY JUNIOR</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#DREAMWORKS">DREAMWORKS</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#ESPN">ESPN</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#ESPN2">ESPN2</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#FOODNETWORK">FOOD NETWORK</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#GOURMET">GOURMET</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#HGTV">HGTV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#HOMEANDHEALTH">HOME &amp; HEALTH</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#KANALD">KANAL D</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#MASCHIC">MAS CHIC</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#NICKELODEON">NICKELODEON</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#NICKJR">NICK JR</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#TELENOVELAS">TELENOVELAS</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#TRAVELANDLIVING">TLC</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="2#ZOOMOO">ZOOMOO</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#ANTENA3">ANTENA 3</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#BANDAMAX">BANDAMAX</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#CGTN">CGTN</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#ESPN3">ESPN3</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#ESPNMAS">ESPN EXTRA</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#FOXSPORTS">ESPN4</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#FOXSPORTS2">FOX SPORTS 2</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#FOXSPORTS3">FOX SPORTS 3</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#IVCNETWORKS">IVC NETWORKS</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#LANACIONAL">LA NACIONAL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#MTV">MTV</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#NICKMUSIC">NICKMUSIC</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#NOTICIASCARACOL">NOTICIAS CARACOL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#SBTBRASIL">SBT Brasil</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#TELEFE">TELEFE</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#TELEHITLATINO">TELEHIT LATINO</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#TELEHITMUSICA">TELEHIT MUSICA</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="3#TRECEARGENTINA">TRECE ARGENTINA</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#AandEMUNDO">A&amp;E</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#AXN">AXN</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#DW">DW</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#ECH">E!</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#HISTORY2">HISTORY 2</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#HISTORYCHANNEL">HISTORY CHANNEL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#LIFETIME">LIFE TIME</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#PLAYBOY">PLAYBOY</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#SONY">SONY</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#STUDIOUNIVERSAL">STUDIO UNIVERSAL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#SYFY">SYFY</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#UNIVERSAL">UNIVERSAL</channel> -->
<!-- <channel lang="es" xmltv_id="" site_id="4#WARNERCHANNEL">WARNER CH</channel> -->
</channels>
</site>