Fix linter issues in sites/

This commit is contained in:
freearhey 2025-01-01 12:27:22 +03:00
parent d6d20b6413
commit 5df982bb7c
129 changed files with 3316 additions and 3226 deletions

View file

@ -2,9 +2,7 @@ const dayjs = require('dayjs')
const doFetch = require('@ntlab/sfetch')
const debug = require('debug')('site:tv.yandex.ru')
doFetch
.setDebugger(debug)
.setMaxWorker(10)
doFetch.setDebugger(debug).setMaxWorker(10)
// enable to fetch guide description but its take a longer time
const detailedGuide = true
@ -12,14 +10,16 @@ const detailedGuide = true
// update this data by heading to https://tv.yandex.ru and change the values accordingly
const cookies = {
i: 'eIUfSP+/mzQWXcH+Cuz8o1vY+D2K8fhBd6Sj0xvbPZeO4l3cY+BvMp8fFIuM17l6UE1Z5+R2a18lP00ex9iYVJ+VT+c=',
spravka: 'dD0xNzM0MjA0NjM4O2k9MTI1LjE2NC4xNDkuMjAwO0Q9QTVCQ0IyOTI5RDQxNkU5NkEyOTcwMTNDMzZGMDAzNjRDNTFFNDM4QkE2Q0IyOTJDRjhCOTZDRDIzODdBQzk2MzRFRDc5QTk2Qjc2OEI1MUY5MTM5M0QzNkY3OEQ2OUY3OTUwNkQ3RjBCOEJGOEJDMjAwMTQ0RDUwRkFCMDNEQzJFMDI2OEI5OTk5OUJBNEFERUYwOEQ1MjUwQTE0QTI3RDU1MEQwM0U0O3U9MTczNDIwNDYzODUyNDYyNzg1NDtoPTIxNTc0ZTc2MDQ1ZjcwMDBkYmY0NTVkM2Q2ZWMyM2Y1',
spravka:
'dD0xNzM0MjA0NjM4O2k9MTI1LjE2NC4xNDkuMjAwO0Q9QTVCQ0IyOTI5RDQxNkU5NkEyOTcwMTNDMzZGMDAzNjRDNTFFNDM4QkE2Q0IyOTJDRjhCOTZDRDIzODdBQzk2MzRFRDc5QTk2Qjc2OEI1MUY5MTM5M0QzNkY3OEQ2OUY3OTUwNkQ3RjBCOEJGOEJDMjAwMTQ0RDUwRkFCMDNEQzJFMDI2OEI5OTk5OUJBNEFERUYwOEQ1MjUwQTE0QTI3RDU1MEQwM0U0O3U9MTczNDIwNDYzODUyNDYyNzg1NDtoPTIxNTc0ZTc2MDQ1ZjcwMDBkYmY0NTVkM2Q2ZWMyM2Y1',
yandexuid: '1197179041732383499',
yashr: '4682342911732383504',
yuidss: '1197179041732383499',
user_display: 824,
user_display: 824
}
const headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0',
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 OPR/114.0.0.0'
}
const caches = {}
@ -50,7 +50,9 @@ module.exports = {
}
caches[cacheid].forEach(schedule => {
schedule.events
.filter(event => event.channelFamilyId == channel.site_id && date.isSame(event.start, 'day'))
.filter(
event => event.channelFamilyId == channel.site_id && date.isSame(event.start, 'day')
)
.forEach(event => {
if (events.indexOf(event.id) < 0) {
events.push(event.id)
@ -171,7 +173,10 @@ function parseContent(content, date, checkOnly = false) {
content = content.toString()
}
// got captcha, its look like our cookies has expired
if (content?.type === 'captcha' || (typeof content === 'string' && content.match(/SmartCaptcha/))) {
if (
content?.type === 'captcha' ||
(typeof content === 'string' && content.match(/SmartCaptcha/))
) {
throw new Error('Got captcha, please goto https://tv.yandex.ru and update cookies!')
}
if (typeof content === 'object') {
@ -210,35 +215,41 @@ function parseContent(content, date, checkOnly = false) {
headers['X-User-Session-Id'] = sessionId
}
if (checkOnly && region && tvSk.key && sessionId) {
valid = true;
valid = true
}
}
}
return checkOnly ? valid : [queues, schedules]
return checkOnly ? valid : [queues, schedules]
}
function parseCookies(headers) {
if (Array.isArray(headers['set-cookie'])) {
headers['set-cookie']
.forEach(cookie => {
const [key, value] = cookie.split('; ')[0].split('=')
if (cookies[key] !== value) {
cookies[key] = value
debug(`Update cookie ${key}=${value}`)
}
})
headers['set-cookie'].forEach(cookie => {
const [key, value] = cookie.split('; ')[0].split('=')
if (cookies[key] !== value) {
cookies[key] = value
debug(`Update cookie ${key}=${value}`)
}
})
}
}
function getSchedules(schedules) {
return schedules.filter(schedule => schedule.events.length);
return schedules.filter(schedule => schedule.events.length)
}
function getHeaders(data = {}) {
return Object.assign({}, headers, {
Cookie: Object.keys(cookies).map(cookie => `${cookie}=${cookies[cookie]}`).join('; ')
}, data)
return Object.assign(
{},
headers,
{
Cookie: Object.keys(cookies)
.map(cookie => `${cookie}=${cookies[cookie]}`)
.join('; ')
},
data
)
}
function getUrl(date, region = null, page = null, event = null) {
@ -253,7 +264,9 @@ function getUrl(date, region = null, page = null, event = null) {
url += `${url.endsWith('/') ? '' : '/'}event?eventId=${event.id}&programCoId=`
}
if (date) {
url += `${url.indexOf('?') < 0 ? '?' : '&'}date=${date.format('YYYY-MM-DD')}${!page ? '&grid=all' : ''}&period=all-day`
url += `${url.indexOf('?') < 0 ? '?' : '&'}date=${date.format('YYYY-MM-DD')}${
!page ? '&grid=all' : ''
}&period=all-day`
}
if (page && page.id !== undefined && page.offset !== undefined) {
url += `${url.indexOf('?') < 0 ? '?' : '&'}offset=${page.offset}`
@ -266,7 +279,7 @@ function getUrl(date, region = null, page = null, event = null) {
function getQueue(url, referer) {
const data = {
'Origin': 'https://tv.yandex.ru',
Origin: 'https://tv.yandex.ru'
}
if (referer) {
data['Referer'] = referer
@ -279,4 +292,4 @@ function getQueue(url, referer) {
url,
params: { headers }
}
}
}

View file

@ -16,7 +16,7 @@ const channel = {
site_id: '16',
xmltv_id: 'ChannelOne.ru'
}
axios.get.mockImplementation((url, opts) => {
axios.get.mockImplementation(url => {
if (url === 'https://tv.yandex.ru/?date=2023-11-26&grid=all&period=all-day') {
return Promise.resolve({
headers: {},
@ -29,7 +29,10 @@ axios.get.mockImplementation((url, opts) => {
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/schedule.json')))
})
}
if (url === 'https://tv.yandex.ru/api/120809/main/chunk?page=0&date=2023-11-26&period=all-day&offset=0&limit=11') {
if (
url ===
'https://tv.yandex.ru/api/120809/main/chunk?page=0&date=2023-11-26&period=all-day&offset=0&limit=11'
) {
return Promise.resolve({
headers: {},
data: JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/schedule0.json')))
@ -44,9 +47,7 @@ axios.get.mockImplementation((url, opts) => {
})
it('can generate valid url', () => {
expect(url({ date })).toBe(
'https://tv.yandex.ru/?date=2023-11-26&grid=all&period=all-day'
)
expect(url({ date })).toBe('https://tv.yandex.ru/?date=2023-11-26&grid=all&period=all-day')
})
it('can generate valid request headers', () => {
@ -63,9 +64,7 @@ it('can generate valid request headers', () => {
it('can parse response', async () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const result = (
await parser({ content, date, channel })
).map(p => {
const result = (await parser({ content, date, channel })).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
@ -77,7 +76,8 @@ it('can parse response', async () => {
stop: '2023-11-26T02:10:00.000Z',
title: 'ПОДКАСТ.ЛАБ. Мелодии моей жизни',
category: 'досуг',
description: 'Впереди вся ночь и есть о чем поговорить. Фильмы, музыка, любовь, звезды, еда, мода, анекдоты, спорт, деньги, настоящее, будущее - все это в творческом эксперименте.\nЛариса Гузеева читает любовные письма. Леонид Якубович рассказывает, кого не берут в пилоты. Арина Холина - какой секс способен довести до мужа или до развода. Валерий Сюткин на ходу сочиняет песню для Карины Кросс и Вали Карнавал. Дмитрий Дибров дарит новую жизнь любимой \"Антропологии\". Денис Казанский - все о футболе, хоккее и не только.\n\"ПОДКАСТЫ. ЛАБ\" - серия подкастов разной тематики, которые невозможно проспать. Интеллектуальные дискуссии после полуночи с самыми компетентными экспертами и актуальными спикерами.'
description:
'Впереди вся ночь и есть о чем поговорить. Фильмы, музыка, любовь, звезды, еда, мода, анекдоты, спорт, деньги, настоящее, будущее - все это в творческом эксперименте.\nЛариса Гузеева читает любовные письма. Леонид Якубович рассказывает, кого не берут в пилоты. Арина Холина - какой секс способен довести до мужа или до развода. Валерий Сюткин на ходу сочиняет песню для Карины Кросс и Вали Карнавал. Дмитрий Дибров дарит новую жизнь любимой "Антропологии". Денис Казанский - все о футболе, хоккее и не только.\n"ПОДКАСТЫ. ЛАБ" - серия подкастов разной тематики, которые невозможно проспать. Интеллектуальные дискуссии после полуночи с самыми компетентными экспертами и актуальными спикерами.'
}
])
})