diff --git a/sites/pickx.be/pickx.be.config.js b/sites/pickx.be/pickx.be.config.js index 1b61a64b..0dd4f099 100644 --- a/sites/pickx.be/pickx.be.config.js +++ b/sites/pickx.be/pickx.be.config.js @@ -2,13 +2,33 @@ const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') -dayjs.extend(utc) +let apiVersion; +let isApiVersionFetched = false; +(async () => { + try { + await fetchApiVersion(); + isApiVersionFetched = true; + + } catch (error) { + console.error('Error during script initialization:', error); + } +})(); + +dayjs.extend(utc) + module.exports = { site: 'pickx.be', days: 2, - url({ channel, date }) { - return `https://px-epg.azureedge.net/airings/11702375189765v.4.2/${date.format('YYYY-MM-DD')}/channel/${channel.site_id}?timezone=Europe%2FBrussels` + apiVersion: function () { + return apiVersion; + }, + fetchApiVersion: fetchApiVersion, // Export fetchApiVersion + url: async function ({ channel, date }) { + while (!isApiVersionFetched) { + await new Promise(resolve => setTimeout(resolve, 100)); // Wait for 100 milliseconds + } + return `https://px-epg.azureedge.net/airings/${apiVersion}/${date.format('YYYY-MM-DD')}/channel/${channel.site_id}?timezone=Europe%2FBrussels`; }, request: { headers: { @@ -108,4 +128,27 @@ module.exports = { } }) || [] } -} \ No newline at end of file +} +function fetchApiVersion() { + return new Promise(async (resolve, reject) => { + try { + const response = await axios.get('https://px-epg.azureedge.net/version', { + headers: { + 'Origin': 'https://www.pickx.be', + 'Referer': 'https://www.pickx.be/' + } + }); + + if (response.status === 200) { + apiVersion = response.data.version; + resolve(); + } else { + console.error(`Failed to fetch API version. Status: ${response.status}`); + reject(`Failed to fetch API version. Status: ${response.status}`); + } + } catch (error) { + console.error('Error fetching API version:', error.message); + reject(error); + } + }); +} diff --git a/sites/pickx.be/pickx.be.test.js b/sites/pickx.be/pickx.be.test.js index 66a4b3a6..9326d7ce 100644 --- a/sites/pickx.be/pickx.be.test.js +++ b/sites/pickx.be/pickx.be.test.js @@ -1,11 +1,13 @@ -const { parser, url, request } = require('./pickx.be.config.js') +const { parser, url, request, fetchApiVersion, apiVersion } = require('./pickx.be.config.js') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') + dayjs.extend(utc) + const date = dayjs.utc('2023-12-13').startOf('d') const channel = { lang: 'fr', @@ -13,10 +15,12 @@ const channel = { xmltv_id: 'Vedia.be' } -it('can generate valid url', () => { - expect(url({channel, date})) - .toBe('https://px-epg.azureedge.net/airings/11702375189765v.4.2/2023-12-13/channel/UID0118?timezone=Europe%2FBrussels') -}) +it('can generate valid url', async () => { + await fetchApiVersion(); + const generatedUrl = await url({ channel, date }); + const resolvedApiVersion = apiVersion(); + expect(generatedUrl).toBe(`https://px-epg.azureedge.net/airings/${resolvedApiVersion}/2023-12-13/channel/UID0118?timezone=Europe%2FBrussels`); +}); it('can generate valid request headers', () => { expect(request.headers).toMatchObject({