From 868a6f89a3b2e63f9dd2839d6b7ad64c1b98caca Mon Sep 17 00:00:00 2001 From: freearhey <7253922+freearhey@users.noreply.github.com> Date: Tue, 21 Jan 2025 04:21:36 +0300 Subject: [PATCH] Update mts.rs.config.js --- sites/mts.rs/mts.rs.config.js | 112 ++++++++++------------------------ 1 file changed, 31 insertions(+), 81 deletions(-) diff --git a/sites/mts.rs/mts.rs.config.js b/sites/mts.rs/mts.rs.config.js index 8b700c38..0ad5215b 100644 --- a/sites/mts.rs/mts.rs.config.js +++ b/sites/mts.rs/mts.rs.config.js @@ -1,105 +1,55 @@ const axios = require('axios') const dayjs = require('dayjs') -const utc = require('dayjs/plugin/utc') -const timezone = require('dayjs/plugin/timezone') - -dayjs.extend(utc) -dayjs.extend(timezone) module.exports = { site: 'mts.rs', days: 2, - url({ date, channel }) { - const [position] = channel.site_id.split('#') - - return `https://mts.rs/oec/epg/program?date=${date.format('YYYY-MM-DD')}&position=${position}` + url({ date }) { + return `https://mts.rs/hybris/ecommerce/b2c/v1/products/search?sort=pozicija-rastuce&searchQueryContext=CHANNEL_PROGRAM&query=:pozicija-rastuce:tip-kanala-radio:TV kanali:channelProgramDates:${date.format( + 'YYYY-MM-DD' + )}&pageSize=10000` }, request: { - headers: { - 'X-Requested-With': 'XMLHttpRequest' - } + maxContentLength: 10000000 // 10 Mb }, - parser: function ({ content, channel }) { - let programs = [] - const data = parseContent(content, channel) - const items = parseItems(data) - items.forEach(item => { - programs.push({ + parser({ content, channel }) { + const items = parseItems(content, channel) + + return items.map(item => { + return { title: item.title, category: item.category, description: item.description, - image: item.image, - start: parseStart(item), - stop: parseStop(item) - }) + image: item?.picture?.url || null, + start: dayjs(item.start), + stop: dayjs(item.end) + } }) - - return programs }, async channels() { - let channels = [] + const data = await axios + .get(module.exports.url({ date: dayjs() })) + .then(r => r.data) + .catch(console.error) - const totalPages = await getTotalPageCount() - const pages = Array.from(Array(totalPages).keys()) - for (let page of pages) { - const data = await axios - .get('https://mts.rs/oec/epg/program', { - params: { page, date: dayjs().format('YYYY-MM-DD') }, - headers: { - 'X-Requested-With': 'XMLHttpRequest' - } - }) - .then(r => r.data) - .catch(console.log) - - data.channels.forEach(item => { - channels.push({ - lang: 'bs', - site_id: `${item.position}#${item.id}`, - name: item.name - }) - }) - } - - return channels + return data.products.map(channel => ({ + lang: 'bs', + name: channel.name, + site_id: encodeURIComponent(channel.code) + })) } } -async function getTotalPageCount() { - const data = await axios - .get('https://mts.rs/oec/epg/program', { - params: { page: 0, date: dayjs().format('YYYY-MM-DD') }, - headers: { - 'X-Requested-With': 'XMLHttpRequest' - } - }) - .then(r => r.data) - .catch(console.log) - - return data.total_pages -} - -function parseContent(content, channel) { - const [, site_id] = channel.site_id.split('#') - let data +function parseItems(content, channel) { try { - data = JSON.parse(content) + const data = JSON.parse(content) + if (!data || !Array.isArray(data.products)) return [] + + const channelData = data.products.find(c => c.code === channel.site_id) + if (!channelData || !Array.isArray(channelData.programs)) return [] + + return channelData.programs } catch { return [] } - if (!data || !data.channels || !data.channels.length) return null - - return data.channels.find(c => c.id === site_id) || null -} - -function parseStart(item) { - return dayjs.tz(item.full_start, 'Europe/Belgrade') -} - -function parseStop(item) { - return dayjs.tz(item.full_end, 'Europe/Belgrade') -} - -function parseItems(data) { - return data && Array.isArray(data.items) ? data.items : [] }