Merge pull request #1350 from iptv-org/add-tvgids.nl

Add guide from tvgids.nl
This commit is contained in:
Aleksandr Statciuk 2022-11-17 09:36:13 +03:00 committed by GitHub
commit 6145024a11
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 3210 additions and 0 deletions

17
.github/workflows/tvgids.nl.yml vendored Normal file
View file

@ -0,0 +1,17 @@
name: tvgids.nl
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

View file

@ -0,0 +1,88 @@
const cheerio = require('cheerio')
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const isToday = require('dayjs/plugin/isToday')
dayjs.extend(utc)
dayjs.extend(isToday)
dayjs.extend(timezone)
module.exports = {
site: 'tvgids.nl',
url: function ({ date, channel }) {
const path = date.isToday() ? '' : `${date.format('DD-MM-YYYY')}/`
return `https://www.tvgids.nl/gids/${path}${channel.site_id}`
},
parser: function ({ content, date }) {
date = date.subtract(1, 'd')
let programs = []
const items = parseItems(content)
items.forEach(item => {
const $item = cheerio.load(item)
const prev = programs[programs.length - 1]
let start = parseStart($item, date)
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),
description: parseDescription($item),
icon: parseIcon($item),
start,
stop
})
})
return programs
},
async channels() {
const data = await axios
.get(`https://www.tvgids.nl/gids/`)
.then(r => r.data)
.catch(console.log)
const $ = cheerio.load(data)
const channels = []
$('#channel-container > div').each((i, el) => {
channels.push({
site_id: $(el).find('a').attr('id'),
name: $(el).find('img').attr('title'),
lang: 'nl'
})
})
return channels
}
}
function parseTitle($item) {
return $item('.program__title').text().trim()
}
function parseDescription($item) {
return $item('.program__text').text().trim()
}
function parseIcon($item) {
return $item('.program__thumbnail').data('src')
}
function parseStart($item, date) {
const time = $item('.program__starttime').text().trim()
return dayjs.tz(`${date.format('YYYY-MM-DD')} ${time}`, 'YYYY-MM-DD HH:mm', 'Europe/Amsterdam')
}
function parseItems(content) {
const $ = cheerio.load(content)
return $('.guide__guide .program').toArray()
}

View file

@ -0,0 +1,59 @@
// npm run channels:parse -- --config=./sites/tvgids.nl/tvgids.nl.config.js --output=./sites/tvgids.nl/tvgids.nl_nl.channels.xml
// npx epg-grabber --config=sites/tvgids.nl/tvgids.nl.config.js --channels=sites/tvgids.nl/tvgids.nl_nl.channels.xml --output=guide.xml --days=2
const { parser, url } = require('./tvgids.nl.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-18', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'eurosport1',
xmltv_id: 'Eurosport1Netherlands.nl'
}
it('can generate valid url', () => {
expect(url({ date, channel })).toBe('https://www.tvgids.nl/gids/18-11-2022/eurosport1')
})
it('can generate valid url for today', () => {
const today = dayjs.utc().startOf('d')
expect(url({ date: today, channel })).toBe('https://www.tvgids.nl/gids/eurosport1')
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const results = parser({ content, date }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2022-11-17T22:30:00.000Z',
stop: '2022-11-17T23:30:00.000Z',
title: 'Autosport: 8 uur van Bahrein',
description: 'Verslag van de 8 uur van Bahrein, gereden op het Bahrain International Circuit.'
})
expect(results[1]).toMatchObject({
start: '2022-11-17T23:30:00.000Z',
stop: '2022-11-18T00:30:00.000Z',
title: 'Powerlifting: Wereldkampioenschap Viborg',
description: 'Verslag van de krachtsport powerlifting.',
icon: 'https://tvgidsassets.nl/v270/upload/p/klein/powerlifting-wereldkampioenschap-viborg-418877211.jpg'
})
})
it('can handle empty guide', () => {
const result = parser({
content: ``,
date
})
expect(result).toMatchObject([])
})

View file

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="tvgids.nl">
<channels>
<channel lang="nl" xmltv_id="24Kitchen.nl" site_id="24kitchen">24Kitchen</channel>
<channel lang="nl" xmltv_id="3sat.de" site_id="3sat">3Sat</channel>
<channel lang="nl" xmltv_id="AlJazeeraEnglish.qa" site_id="aljazeera">Al Jazeera Engels</channel>
<channel lang="nl" xmltv_id="AnimalPlanetNetherlands.nl" site_id="animalplanet">Animal Planet</channel>
<channel lang="nl" xmltv_id="ARTE.fr" site_id="arte">ARTE</channel>
<channel lang="nl" xmltv_id="AT5.nl" site_id="at5">AT5</channel>
<channel lang="nl" xmltv_id="BBCEntertainment.uk" site_id="bbce">BBC Entertainment</channel>
<channel lang="nl" xmltv_id="BBCFirstBenelux.uk" site_id="bbcfirst">BBC First</channel>
<channel lang="nl" xmltv_id="BBCWorldNewsEurope.uk" site_id="bbcworld">BBC World</channel>
<channel lang="nl" xmltv_id="BeleefKPN.nl" site_id="kpnpresenteert">Beleef KPN</channel>
<channel lang="nl" xmltv_id="BoomerangNetherlands.nl" site_id="boomerang">Boomerang</channel>
<channel lang="nl" xmltv_id="BVN.nl" site_id="bvn">BVN</channel>
<channel lang="nl" xmltv_id="Canvas.be" site_id="canvas">Canvas</channel>
<channel lang="nl" xmltv_id="CartoonNetworkNetherlands.nl" site_id="cartoonnetwork">Cartoon Network</channel>
<channel lang="nl" xmltv_id="CBSRealityNetherlands.nl" site_id="cbsreality">CBS Reality</channel>
<channel lang="nl" xmltv_id="CNBCEurope.uk" site_id="cnbc">CNBC</channel>
<channel lang="nl" xmltv_id="CNNInternationalEurope.us" site_id="cnn">CNN</channel>
<channel lang="nl" xmltv_id="ComedyCentralExtraNetherlands.nl" site_id="comedycentralextra">Comedy Central Extra</channel>
<channel lang="nl" xmltv_id="ComedyCentralNetherlands.nl" site_id="comedycentral">Comedy Central</channel>
<channel lang="nl" xmltv_id="CrimePlusInvestigationBenelux.uk" site_id="crimeinvestigation">Crime + Investigation</channel>
<channel lang="nl" xmltv_id="DiscoveryChannelNetherlands.nl" site_id="discovery">Discovery</channel>
<channel lang="nl" xmltv_id="DisneyChannelNetherlands.nl" site_id="disneychannel">Disney Channel</channel>
<channel lang="nl" xmltv_id="DisneyXDNetherlands.nl" site_id="disneyxd">Disney XD</channel>
<channel lang="nl" xmltv_id="Een.be" site_id="een">Eén</channel>
<channel lang="nl" xmltv_id="ESPN2Netherlands.nl" site_id="espn2">ESPN 2</channel>
<channel lang="nl" xmltv_id="ESPN3Netherlands.nl" site_id="espn3">ESPN 3</channel>
<channel lang="nl" xmltv_id="ESPN4Netherlands.nl" site_id="espn4">ESPN 4</channel>
<channel lang="nl" xmltv_id="ESPNNetherlands.nl" site_id="espn">ESPN</channel>
<channel lang="nl" xmltv_id="Eurosport1Netherlands.nl" site_id="eurosport1">Eurosport 1</channel>
<channel lang="nl" xmltv_id="Eurosport2Netherlands.nl" site_id="eurosport2">Eurosport 2</channel>
<channel lang="nl" xmltv_id="ExtremeSportsChannelEurope.nl" site_id="extsports">Extreme Sports Channel</channel>
<channel lang="nl" xmltv_id="Film1Action.nl" site_id="film1action">Film1 Action</channel>
<channel lang="nl" xmltv_id="Film1Drama.nl" site_id="film1drama">Film1 Drama</channel>
<channel lang="nl" xmltv_id="Film1Family.nl" site_id="film1family">Film1 Family</channel>
<channel lang="nl" xmltv_id="Film1Premiere.nl" site_id="film1premiere">Film 1 Premiere</channel>
<channel lang="nl" xmltv_id="FilmBoxNetherlands.nl" site_id="filmboxnl">Filmbox.nl</channel>
<channel lang="nl" xmltv_id="FoxNL.nl" site_id="fox">Fox</channel>
<channel lang="nl" xmltv_id="HistoryNetherlands.nl" site_id="history">HISTORY</channel>
<channel lang="nl" xmltv_id="INPLUS.nl" site_id="inplus">INPLUS</channel>
<channel lang="nl" xmltv_id="InvestigationDiscoveryNetherlands.nl" site_id="id">Investigation Discovery</channel>
<channel lang="nl" xmltv_id="Ketnet.be" site_id="ketnet">VRT Ketnet</channel>
<channel lang="nl" xmltv_id="L1TV.nl" site_id="l1tv">L1 TV</channel>
<channel lang="nl" xmltv_id="LaUne.be" site_id="rtbfla1">RTBF La 1</channel>
<channel lang="nl" xmltv_id="LoveNature.ca" site_id="lovenature">Love Nature</channel>
<channel lang="nl" xmltv_id="Mezzo.fr" site_id="mezzo">Mezzo</channel>
<channel lang="nl" xmltv_id="MTVNetherlands.nl" site_id="mtv">MTV</channel>
<channel lang="nl" xmltv_id="NationalGeographicNetherlands.nl" site_id="ngc">National Geographic</channel>
<channel lang="nl" xmltv_id="NationalGeographicWildNetherlands.nl" site_id="natgeowild">Nat Geo Wild</channel>
<channel lang="nl" xmltv_id="NDRFernsehenInternational.de" site_id="ndr">NDR Fernsehen</channel>
<channel lang="nl" xmltv_id="NET5.nl" site_id="net5">NET 5</channel>
<channel lang="nl" xmltv_id="NH.nl" site_id="rtvnh">NH</channel>
<channel lang="nl" xmltv_id="NickelodeonNetherlands.nl" site_id="nickelodeon">Nickelodeon</channel>
<channel lang="nl" xmltv_id="NickJrNetherlands.nl" site_id="nickjr">Nick Jr.</channel>
<channel lang="nl" xmltv_id="NPO1.nl" site_id="npo1">NPO 1</channel>
<channel lang="nl" xmltv_id="NPO1extra.nl" site_id="npo1extra">NPO 1 extra</channel>
<channel lang="nl" xmltv_id="NPO2.nl" site_id="npo2">NPO 2</channel>
<channel lang="nl" xmltv_id="NPO2extra.nl" site_id="npo2extra">NPO 2 extra</channel>
<channel lang="nl" xmltv_id="NPO3.nl" site_id="npo3">NPO 3</channel>
<channel lang="nl" xmltv_id="NPOPolitiek.nl" site_id="npopolitiek">NPO Politiek</channel>
<channel lang="nl" xmltv_id="OmroepBrabant.nl" site_id="brabant">Omroep Brabant</channel>
<channel lang="nl" xmltv_id="OmroepFlevoland.nl" site_id="flevoland">Omroep Flevoland</channel>
<channel lang="nl" xmltv_id="OmroepGelderland.nl" site_id="gelderland">Omroep Gelderland</channel>
<channel lang="nl" xmltv_id="OmroepZeeland.nl" site_id="zeeland">Omroep Zeeland</channel>
<channel lang="nl" xmltv_id="OmropFryslan.nl" site_id="omropfryslan">Omrop Fryslân</channel>
<channel lang="nl" xmltv_id="ONS.nl" site_id="ons">Ons</channel>
<channel lang="nl" xmltv_id="OUTtv.nl" site_id="outtv">OUTtv</channel>
<channel lang="nl" xmltv_id="PebbleTV.nl" site_id="pebbletv">Pebble TV</channel>
<channel lang="nl" xmltv_id="Play4.be" site_id="play4">Play4</channel>
<channel lang="nl" xmltv_id="ProSieben.de" site_id="pro7">PRO 7</channel>
<channel lang="nl" xmltv_id="Rai1.it" site_id="raiuno">Rai Uno</channel>
<channel lang="nl" xmltv_id="RTL4.nl" site_id="rtl4">RTL 4</channel>
<channel lang="nl" xmltv_id="RTL5.nl" site_id="rtl5">RTL 5</channel>
<channel lang="nl" xmltv_id="RTL7.nl" site_id="rtl7">RTL 7</channel>
<channel lang="nl" xmltv_id="RTL8.nl" site_id="rtl8">RTL 8</channel>
<channel lang="nl" xmltv_id="RTLCrimeNetherlands.nl" site_id="rtlcrime">Rtl crime</channel>
<channel lang="nl" xmltv_id="RTLLounge.nl" site_id="rtllounge">RTL Lounge</channel>
<channel lang="nl" xmltv_id="RTLTelekids.nl" site_id="rtltelekids">RTL Telekids</channel>
<channel lang="nl" xmltv_id="RTLZ.nl" site_id="rtlz">RTL Z</channel>
<channel lang="nl" xmltv_id="RTVDrenthe.nl" site_id="drenthe">RTV Drenthe</channel>
<channel lang="nl" xmltv_id="RTVOost.nl" site_id="rtvoost">RTV Oost</channel>
<channel lang="nl" xmltv_id="RTVRijnmond.nl" site_id="rtvrijnmond">RTV Rijnmond</channel>
<channel lang="nl" xmltv_id="RTVUtrecht.nl" site_id="rtvutrecht">RTV Utrecht</channel>
<channel lang="nl" xmltv_id="SBS6.nl" site_id="sbs6">SBS 6</channel>
<channel lang="nl" xmltv_id="SBS9.nl" site_id="sbs9">SBS 9</channel>
<channel lang="nl" xmltv_id="ShortsTV.uk" site_id="shortstv">ShortsTV</channel>
<channel lang="nl" xmltv_id="StingrayClassica.ca" site_id="stingrayclassica">Stingray Classica</channel>
<channel lang="nl" xmltv_id="Tipik.be" site_id="rtbfla2">RTBF La 2</channel>
<channel lang="nl" xmltv_id="TLCNetherlands.nl" site_id="tlc">TLC</channel>
<channel lang="nl" xmltv_id="TRTWorld.tr" site_id="trt">TRT World</channel>
<channel lang="nl" xmltv_id="TV538.nl" site_id="tv538">TV 538</channel>
<channel lang="nl" xmltv_id="TV5MondeEurope.fr" site_id="tv5">TV5MONDE</channel>
<channel lang="nl" xmltv_id="TVEInternacionalEuropeAsia.es" site_id="tve">TV E</channel>
<channel lang="nl" xmltv_id="TVNoord.nl" site_id="noord">TV Noord</channel>
<channel lang="nl" xmltv_id="TVOrange.nl" site_id="oranjetv">Oranje TV</channel>
<channel lang="nl" xmltv_id="TVWest.nl" site_id="rtvwest">RTV West</channel>
<channel lang="nl" xmltv_id="Veronica.nl" site_id="veronica">Veronica</channel>
<channel lang="nl" xmltv_id="VeronicaDisneyXD.nl" site_id="veronicadisneyxd">Veronica/Disney XD</channel>
<channel lang="nl" xmltv_id="XITE.nl" site_id="xite">XITE</channel>
<channel lang="nl" xmltv_id="ZDF.de" site_id="zdf">ZDF</channel>
<channel lang="nl" xmltv_id="ZiggoSport.nl" site_id="ziggosport">Ziggo Sport</channel>
<channel lang="nl" xmltv_id="ZiggoSportDocu.nl" site_id="ziggosportdocu">Ziggo Sport Docu</channel>
<channel lang="nl" xmltv_id="ZiggoSportGolf.nl" site_id="ziggosportgolf">Ziggo Sport Golf</channel>
<channel lang="nl" xmltv_id="ZiggoSportRacing.nl" site_id="ziggosportracing">Ziggo Sport Racing</channel>
<channel lang="nl" xmltv_id="ZiggoSportSelect.nl" site_id="ziggosportselect">Ziggo Sport Select</channel>
<channel lang="nl" xmltv_id="ZiggoSportTennis.nl" site_id="ziggosporttennis">Ziggo Sport Tennis</channel>
<channel lang="nl" xmltv_id="ZiggoSportVoetbal.nl" site_id="ziggosportvoetbal">Ziggo Sport Voetbal</channel>
<!-- <channel lang="nl" xmltv_id="" site_id="ard">ARD</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="bbc1">BBC 1</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="bbc2">BBC 2</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="bbc4">BBC 4</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="discoveryscience">Discovery Science</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="eentertainment">E! Entertainment</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="euronews">Euronews</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="paramountnetwork">Paramount Network</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="rtl">RTL</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="sat1">Sat 1</channel> -->
<!-- <channel lang="nl" xmltv_id="" site_id="wdr">WDR Fernsehen</channel> -->
</channels>
</site>