Replace LF line endings with CRLF

This commit is contained in:
freearhey
2025-09-28 17:55:05 +03:00
parent efc74efcf8
commit b6a589c62a
1192 changed files with 445631 additions and 445631 deletions

View File

@@ -1,61 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="6ter">6ter</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="arte">arte</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bein-sports-1">bein sports 1</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bein-sports-2">bein sports 2</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bein-sports-3">bein sports 3</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bfm-business">bfm business</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bfm-tv">bfm tv</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="c8">c8</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-j">canal j</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-plus">canal plus</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-cinema">canal cinema</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-foot">canal foot</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-series">canal series</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-sport">canal sport</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-sport-360">canal sport 360</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cartoon-network">cartoon network</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cgtn-francais">cgtn francais</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cine-premier">cine premier</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cnn">cnn</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="comedie">comedie</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cstar">cstar</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="discovery-channel">discovery channel</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="discovery-science">discovery science</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="disney-channel">disney channel</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="eurosport-1">eurosport 1</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="eurosport-2">eurosport 2</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-2">france 2</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-24">france 24</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-3">france 3</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-4">france 4</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-5">france 5</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="gulli">gulli</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="infosport">infosport</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="discovery-investigation">discovery investigation</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="lci-la-chaine-info">lci la chaine info</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="la-chaine-parlementaire-public-senat">la chaine parlementaire public senat</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="m6">m6</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="m6-music">m6 music</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="myzen">myzen</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="national-geographic-channel-hd">national geographic channel hd</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="nat-geo-wild">nat geo wild</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="ocs-geants">ocs geants</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="ocs-max">ocs max</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="ocs-pulp">ocs pulp</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="paris-premiere">paris premiere</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="piwi">piwi</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="planete">planete</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="planete-action-experience">planete action experience</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="Polynesie1ere.pf" site_id="polynesie-1ere">polynesie 1ere</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="rmc-decouverte">rmc decouverte</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="rmc-sport-1">rmc sport 1</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="rmc-sport-2">rmc sport 2</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="teletoon">teletoon</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="teva">teva</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="tf1">tf1</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="TNTV.pf" site_id="tntv-local">tntv local</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="ushuaia-tv">ushuaia tv</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="w9">w9</channel>
</channels>
<?xml version="1.0" encoding="UTF-8"?>
<channels>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="6ter">6ter</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="arte">arte</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bein-sports-1">bein sports 1</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bein-sports-2">bein sports 2</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bein-sports-3">bein sports 3</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bfm-business">bfm business</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="bfm-tv">bfm tv</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="c8">c8</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-j">canal j</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-plus">canal plus</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-cinema">canal cinema</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-foot">canal foot</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-series">canal series</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-sport">canal sport</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="canal-sport-360">canal sport 360</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cartoon-network">cartoon network</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cgtn-francais">cgtn francais</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cine-premier">cine premier</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cnn">cnn</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="comedie">comedie</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="cstar">cstar</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="discovery-channel">discovery channel</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="discovery-science">discovery science</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="disney-channel">disney channel</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="eurosport-1">eurosport 1</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="eurosport-2">eurosport 2</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-2">france 2</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-24">france 24</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-3">france 3</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-4">france 4</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="france-5">france 5</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="gulli">gulli</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="infosport">infosport</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="discovery-investigation">discovery investigation</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="lci-la-chaine-info">lci la chaine info</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="la-chaine-parlementaire-public-senat">la chaine parlementaire public senat</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="m6">m6</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="m6-music">m6 music</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="myzen">myzen</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="national-geographic-channel-hd">national geographic channel hd</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="nat-geo-wild">nat geo wild</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="ocs-geants">ocs geants</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="ocs-max">ocs max</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="ocs-pulp">ocs pulp</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="paris-premiere">paris premiere</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="piwi">piwi</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="planete">planete</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="planete-action-experience">planete action experience</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="Polynesie1ere.pf" site_id="polynesie-1ere">polynesie 1ere</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="rmc-decouverte">rmc decouverte</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="rmc-sport-1">rmc sport 1</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="rmc-sport-2">rmc sport 2</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="teletoon">teletoon</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="teva">teva</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="tf1">tf1</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="TNTV.pf" site_id="tntv-local">tntv local</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="ushuaia-tv">ushuaia tv</channel>
<channel site="programme-tv.vini.pf" lang="fr" xmltv_id="" site_id="w9">w9</channel>
</channels>

View File

@@ -1,90 +1,90 @@
const dayjs = require('dayjs')
const axios = require('axios')
const apiUrl = 'https://programme-tv.vini.pf/programmesJSON'
module.exports = {
site: 'programme-tv.vini.pf',
days: 2,
url: apiUrl,
request: {
method: 'POST',
data({ date }) {
return {
dateDebut: `${date.subtract(10, 'h').format('YYYY-MM-DDTHH:mm:ss')}-10:00`
}
}
},
parser: async function ({ content, channel, date }) {
const programs = []
const items = parseItems(content, channel)
if (items.length) {
for (let hours of [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]) {
const nextContent = await loadNextItems(date, hours)
const nextItems = parseItems(nextContent, channel)
for (let item of nextItems) {
if (!items.find(i => i.nidP === item.nidP)) {
items.push(item)
}
}
}
}
items.forEach(item => {
programs.push({
title: item.titreP,
description: item.desc,
category: item.categorieP,
image: item.srcP,
start: dayjs.unix(item.timestampDeb),
stop: dayjs.unix(item.timestampFin)
})
})
return programs
},
async channels() {
const data = await axios
.post('https://programme-tv.vini.pf/programmesJSON')
.then(r => r.data)
.catch(console.log)
return data.programmes.map(item => {
const site_id = item.url.replace('/', '')
const name = site_id.replace(/-/gi, ' ')
return {
lang: 'fr',
site_id,
name
}
})
}
}
async function loadNextItems(date, hours) {
date = date.add(hours, 'h')
return axios
.post(
apiUrl,
{
dateDebut: `${date.subtract(10, 'h').format('YYYY-MM-DDTHH:mm:ss')}-10:00`
},
{
responseType: 'arraybuffer'
}
)
.then(res => res.data.toString())
.catch(console.log)
}
function parseItems(content, channel) {
if (!content) return []
const data = JSON.parse(content)
if (!data || !Array.isArray(data.programmes)) return []
const channelData = data.programmes.find(i => i.url === `/${channel.site_id}`)
if (!channelData) return []
return channelData.programmes || []
}
const dayjs = require('dayjs')
const axios = require('axios')
const apiUrl = 'https://programme-tv.vini.pf/programmesJSON'
module.exports = {
site: 'programme-tv.vini.pf',
days: 2,
url: apiUrl,
request: {
method: 'POST',
data({ date }) {
return {
dateDebut: `${date.subtract(10, 'h').format('YYYY-MM-DDTHH:mm:ss')}-10:00`
}
}
},
parser: async function ({ content, channel, date }) {
const programs = []
const items = parseItems(content, channel)
if (items.length) {
for (let hours of [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]) {
const nextContent = await loadNextItems(date, hours)
const nextItems = parseItems(nextContent, channel)
for (let item of nextItems) {
if (!items.find(i => i.nidP === item.nidP)) {
items.push(item)
}
}
}
}
items.forEach(item => {
programs.push({
title: item.titreP,
description: item.desc,
category: item.categorieP,
image: item.srcP,
start: dayjs.unix(item.timestampDeb),
stop: dayjs.unix(item.timestampFin)
})
})
return programs
},
async channels() {
const data = await axios
.post('https://programme-tv.vini.pf/programmesJSON')
.then(r => r.data)
.catch(console.log)
return data.programmes.map(item => {
const site_id = item.url.replace('/', '')
const name = site_id.replace(/-/gi, ' ')
return {
lang: 'fr',
site_id,
name
}
})
}
}
async function loadNextItems(date, hours) {
date = date.add(hours, 'h')
return axios
.post(
apiUrl,
{
dateDebut: `${date.subtract(10, 'h').format('YYYY-MM-DDTHH:mm:ss')}-10:00`
},
{
responseType: 'arraybuffer'
}
)
.then(res => res.data.toString())
.catch(console.log)
}
function parseItems(content, channel) {
if (!content) return []
const data = JSON.parse(content)
if (!data || !Array.isArray(data.programmes)) return []
const channelData = data.programmes.find(i => i.url === `/${channel.site_id}`)
if (!channelData) return []
return channelData.programmes || []
}

View File

@@ -1,107 +1,107 @@
const { parser, url, request } = require('./programme-tv.vini.pf.config.js')
const fs = require('fs')
const path = require('path')
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
jest.mock('axios')
const date = dayjs.utc('2021-11-21', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'tf1',
xmltv_id: 'TF1.fr'
}
it('can generate valid url', () => {
expect(url).toBe('https://programme-tv.vini.pf/programmesJSON')
})
it('can generate valid request method', () => {
expect(request.method).toBe('POST')
})
it('can generate valid request data', () => {
expect(request.data({ date })).toMatchObject({ dateDebut: '2021-11-20T14:00:00-10:00' })
})
it('can parse response', done => {
axios.post.mockImplementation((url, data) => {
if (data.dateDebut === '2021-11-20T16:00:00-10:00') {
return Promise.resolve({
data: Buffer.from(fs.readFileSync(path.resolve(__dirname, '__data__/content_1.json')))
})
} else {
return Promise.resolve({
data: Buffer.from(fs.readFileSync(path.resolve(__dirname, '__data__/content_2.json')))
})
}
})
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
parser({ content, channel, date })
.then(result => {
result = result.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
start: '2021-11-20T23:50:00.000Z',
stop: '2021-11-21T01:10:00.000Z',
title: 'Reportages découverte',
category: 'Magazine',
description:
"Pour faire face à la crise du logement, aux loyers toujours plus élevés, à la solitude ou pour les gardes d'enfants, les colocations ont le vent en poupe, Pour mieux comprendre ce nouveau phénomène, une équipe a partagé le quotidien de quatre foyers : une retraitée qui héberge des étudiants, des mamans solos, enceintes, qui partagent un appartement associatif, trois générations de la même famille sur un domaine viticole et une étudiante qui intègre une colocation XXL.",
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/52ada51ed86b7e7bc11eaee83ff2192785989d77.jpg'
},
{
start: '2021-11-21T01:10:00.000Z',
stop: '2021-11-21T02:30:00.000Z',
title: 'Les docs du week-end',
category: 'Magazine',
description:
'Un documentaire français réalisé en 2019, Cindy Sander, Myriam Abel, Mario, Michal ou encore Magali Vaé ont fait les grandes heures des premières émissions de télécrochet modernes, dans les années 2000, Des années après leur passage, que reste-t-il de leur notoriété ? Comment ces candidats ont-ils vécu leur soudaine médiatisation ? Quels rapports entretenaient-ils avec les autres participants et les membres du jury, souvent intransigeants ?',
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/6e64cfbc55c1f4cbd11e3011401403d4dc08c6d2.jpg'
},
{
start: '2021-11-21T02:30:00.000Z',
stop: '2021-11-21T03:45:00.000Z',
title: '50mn Inside',
category: 'Magazine',
description:
"50'INSIDE, c'est toute l'actualité des stars résumée, chaque samedi, Le rendez-vous glamour pour retrouver toujours,,",
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/3d7e252312dacb5fb7a1a786fa0022ca1be15499.jpg'
}
])
done()
})
.catch(err => {
done(err)
})
})
it('can handle empty guide', done => {
parser({
date,
channel,
content:
''
})
.then(result => {
expect(result).toMatchObject([])
done()
})
.catch(err => {
done(err)
})
})
const { parser, url, request } = require('./programme-tv.vini.pf.config.js')
const fs = require('fs')
const path = require('path')
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
jest.mock('axios')
const date = dayjs.utc('2021-11-21', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'tf1',
xmltv_id: 'TF1.fr'
}
it('can generate valid url', () => {
expect(url).toBe('https://programme-tv.vini.pf/programmesJSON')
})
it('can generate valid request method', () => {
expect(request.method).toBe('POST')
})
it('can generate valid request data', () => {
expect(request.data({ date })).toMatchObject({ dateDebut: '2021-11-20T14:00:00-10:00' })
})
it('can parse response', done => {
axios.post.mockImplementation((url, data) => {
if (data.dateDebut === '2021-11-20T16:00:00-10:00') {
return Promise.resolve({
data: Buffer.from(fs.readFileSync(path.resolve(__dirname, '__data__/content_1.json')))
})
} else {
return Promise.resolve({
data: Buffer.from(fs.readFileSync(path.resolve(__dirname, '__data__/content_2.json')))
})
}
})
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
parser({ content, channel, date })
.then(result => {
result = result.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(result).toMatchObject([
{
start: '2021-11-20T23:50:00.000Z',
stop: '2021-11-21T01:10:00.000Z',
title: 'Reportages découverte',
category: 'Magazine',
description:
"Pour faire face à la crise du logement, aux loyers toujours plus élevés, à la solitude ou pour les gardes d'enfants, les colocations ont le vent en poupe, Pour mieux comprendre ce nouveau phénomène, une équipe a partagé le quotidien de quatre foyers : une retraitée qui héberge des étudiants, des mamans solos, enceintes, qui partagent un appartement associatif, trois générations de la même famille sur un domaine viticole et une étudiante qui intègre une colocation XXL.",
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/52ada51ed86b7e7bc11eaee83ff2192785989d77.jpg'
},
{
start: '2021-11-21T01:10:00.000Z',
stop: '2021-11-21T02:30:00.000Z',
title: 'Les docs du week-end',
category: 'Magazine',
description:
'Un documentaire français réalisé en 2019, Cindy Sander, Myriam Abel, Mario, Michal ou encore Magali Vaé ont fait les grandes heures des premières émissions de télécrochet modernes, dans les années 2000, Des années après leur passage, que reste-t-il de leur notoriété ? Comment ces candidats ont-ils vécu leur soudaine médiatisation ? Quels rapports entretenaient-ils avec les autres participants et les membres du jury, souvent intransigeants ?',
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/6e64cfbc55c1f4cbd11e3011401403d4dc08c6d2.jpg'
},
{
start: '2021-11-21T02:30:00.000Z',
stop: '2021-11-21T03:45:00.000Z',
title: '50mn Inside',
category: 'Magazine',
description:
"50'INSIDE, c'est toute l'actualité des stars résumée, chaque samedi, Le rendez-vous glamour pour retrouver toujours,,",
image:
'https://programme-tv.vini.pf/sites/default/files/img-icones/3d7e252312dacb5fb7a1a786fa0022ca1be15499.jpg'
}
])
done()
})
.catch(err => {
done(err)
})
})
it('can handle empty guide', done => {
parser({
date,
channel,
content:
''
})
.then(result => {
expect(result).toMatchObject([])
done()
})
.catch(err => {
done(err)
})
})

View File

@@ -1,21 +1,21 @@
# programme-tv.vini.pf
https://programme-tv.vini.pf/
### Download the guide
```sh
npm run grab --- --site=programme-tv.vini.pf
```
### Update channel list
```sh
npm run channels:parse --- --config=./sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js --output=./sites/programme-tv.vini.pf/programme-tv.vini.pf.channels.xml
```
### Test
```sh
npm test --- programme-tv.vini.pf
```
# programme-tv.vini.pf
https://programme-tv.vini.pf/
### Download the guide
```sh
npm run grab --- --site=programme-tv.vini.pf
```
### Update channel list
```sh
npm run channels:parse --- --config=./sites/programme-tv.vini.pf/programme-tv.vini.pf.config.js --output=./sites/programme-tv.vini.pf/programme-tv.vini.pf.channels.xml
```
### Test
```sh
npm test --- programme-tv.vini.pf
```