From 8374cd588584391dbedb9b80f429cdd694ec9c9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Thu, 19 Dec 2024 15:55:23 +0100 Subject: [PATCH] Update pickx.be.config.js --- sites/pickx.be/pickx.be.config.js | 92 ++++++++++++------------------- 1 file changed, 35 insertions(+), 57 deletions(-) diff --git a/sites/pickx.be/pickx.be.config.js b/sites/pickx.be/pickx.be.config.js index 3fc67e31..38d1ac21 100644 --- a/sites/pickx.be/pickx.be.config.js +++ b/sites/pickx.be/pickx.be.config.js @@ -3,29 +3,22 @@ const dayjs = require('dayjs') const utc = require('dayjs/plugin/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, - apiVersion: function () { + setApiVersion: function (version) { + apiVersion = version + }, + getApiVersion: function () { return apiVersion }, - fetchApiVersion: fetchApiVersion, // Export fetchApiVersion + fetchApiVersion: fetchApiVersion, url: async function ({ channel, date }) { - while (!isApiVersionFetched) { - await new Promise(resolve => setTimeout(resolve, 100)) // Wait for 100 milliseconds + if (!apiVersion) { + await fetchApiVersion() } return `https://px-epg.azureedge.net/airings/${apiVersion}/${date.format( 'YYYY-MM-DD' @@ -116,7 +109,7 @@ module.exports = { }` } const result = await axios - .post('https://api.proximusmwc.be/tiams/v2/graphql', query) + .post('https://api.proximusmwc.be/tiams/v3/graphql', query) .then(r => r.data) .catch(console.error) @@ -140,53 +133,38 @@ function fetchApiVersion() { return new Promise(async (resolve, reject) => { try { // you'll never find what happened here :) - // load pickx bundle and get react version hash (regex). + // load the pickx page and get the hash from the MWC configuration. // it's not the best way to get the version but it's the only way to get it. - // find bundle version - const minBundleVer = "https://www.pickx.be/minimal-bundle-version" - const bundleVerData = await axios.get(minBundleVer, { - headers: { - Origin: 'https://www.pickx.be', - Referer: 'https://www.pickx.be/' - } + const hashUrl = 'https://www.pickx.be/nl/televisie/tv-gids'; + + const hashData = await axios.get(hashUrl) + .then(r => { + const re = /"hashes":\["(.*)"\]/ + const match = r.data.match(re) + if (match && match[1]) { + return match[1] + } else { + throw new Error('React app version hash not found') + } + }) + .catch(console.error); + + const versionUrl = `https://www.pickx.be/api/s-${hashData}` + + const response = await axios.get(versionUrl, { + headers: { + Origin: 'https://www.pickx.be', + Referer: 'https://www.pickx.be/' + } }) - if (bundleVerData.status !== 200) { - console.error(`Failed to fetch bundle version. Status: ${bundleVerData.status}`) - reject(`Failed to fetch bundle version. Status: ${bundleVerData.status}`) + if (response.status === 200) { + apiVersion = response.data.version + resolve() } else { - const bundleVer = bundleVerData.data.version - // get the minified JS app bundle - const bundleUrl = `https://components.pickx.be/pxReactPlayer/${bundleVer}/bundle.min.js` - - // now, find the react hash inside the bundle URL - const bundle = await axios.get(bundleUrl).then(r => { - const re = /REACT_APP_VERSION_HASH:"([^"]+)"/ - const match = r.data.match(re) - if (match && match[1]) { - return match[1] - } else { - throw new Error('React app version hash not found') - } - }).catch(console.error) - - const versionUrl = `https://www.pickx.be/api/s-${bundle.replace('/REACT_APP_VERSION_HASH:"', '')}` - - const response = await axios.get(versionUrl, { - 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}`) - } + console.error(`Failed to fetch API version. Status: ${response.status}`) + reject(`Failed to fetch API version. Status: ${response.status}`) } } catch (error) { console.error('Error during fetchApiVersion:', error)