mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 00:50:09 -04:00
Merge pull request #1350 from iptv-org/add-tvgids.nl
Add guide from tvgids.nl
This commit is contained in:
commit
6145024a11
5 changed files with 3210 additions and 0 deletions
17
.github/workflows/tvgids.nl.yml
vendored
Normal file
17
.github/workflows/tvgids.nl.yml
vendored
Normal 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 }}
|
2924
sites/tvgids.nl/__data__/content.html
Normal file
2924
sites/tvgids.nl/__data__/content.html
Normal file
File diff suppressed because one or more lines are too long
88
sites/tvgids.nl/tvgids.nl.config.js
Normal file
88
sites/tvgids.nl/tvgids.nl.config.js
Normal 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()
|
||||
}
|
59
sites/tvgids.nl/tvgids.nl.test.js
Normal file
59
sites/tvgids.nl/tvgids.nl.test.js
Normal 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([])
|
||||
})
|
122
sites/tvgids.nl/tvgids.nl_nl.channels.xml
Normal file
122
sites/tvgids.nl/tvgids.nl_nl.channels.xml
Normal 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>
|
Loading…
Add table
Add a link
Reference in a new issue