epg/sites/magticom.ge/magticom.ge.config.js
2025-01-01 12:27:22 +03:00

86 lines
2.2 KiB
JavaScript

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 customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
module.exports = {
site: 'magticom.ge',
days: 2,
url: 'https://www.magticom.ge/request/channel-program.php',
request: {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
Referer: 'https://www.magticom.ge/en/tv/tv-services/tv-guide'
},
data({ channel, date }) {
const params = new URLSearchParams()
params.append('channelId', channel.site_id)
params.append('start', date.unix())
params.append('end', date.add(1, 'd').unix())
return params
}
},
parser({ content }) {
let programs = []
const items = parseItems(content)
items.forEach(item => {
programs.push({
title: item.title,
description: item.info,
start: parseStart(item),
stop: parseStop(item)
})
})
return programs
},
async channels() {
const html = await axios
.get('https://www.magticom.ge/en/tv/tv-services/tv-guide')
.then(r => r.data)
.catch(console.log)
const $ = cheerio.load(html)
const channels = $(
'#article > article > div > div > div.tv-guide > div.tv-guide-channels > div.tv-guide-channel'
).toArray()
return channels.map(item => {
const $item = cheerio.load(item)
const channelId = $item('*').data('id')
return {
lang: 'ka',
site_id: channelId,
name: $item('.tv-guide-channel-title > div > div').text()
}
})
}
}
function parseStart(item) {
return dayjs.tz(item.startTimestamp, 'YYYY-MM-DDTHH:mm:ss', 'Asia/Tbilisi')
}
function parseStop(item) {
return dayjs.tz(item.endTimestamp, 'YYYY-MM-DDTHH:mm:ss', 'Asia/Tbilisi')
}
function parseItems(content) {
let data
try {
data = JSON.parse(content)
} catch {
return []
}
if (!data || !Array.isArray(data)) return []
return data
}