Fixes linter errors

This commit is contained in:
freearhey
2023-10-15 14:08:23 +03:00
parent 57e508fc3b
commit 63c86a2b30
393 changed files with 28447 additions and 28443 deletions

View File

@@ -1,104 +1,104 @@
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(utc)
dayjs.extend(customParseFormat)
const API_ENDPOINT = 'https://www.dsmart.com.tr/api/v1/public/epg/schedules'
module.exports = {
site: 'dsmart.com.tr',
days: 2,
url({ date, channel }) {
const [page] = channel.site_id.split('#')
return `${API_ENDPOINT}?page=${page}&limit=1&day=${date.format('YYYY-MM-DD')}`
},
parser: function ({ content, channel }) {
let programs = []
const items = parseItems(content, channel)
items.forEach(item => {
const prev = programs[programs.length - 1]
let start
if (prev) {
start = parseStart(item, prev.stop)
} else {
start = parseStart(item, dayjs.utc(item.day))
}
let duration = parseDuration(item)
let stop = start.add(duration, 's')
programs.push({
title: item.program_name,
category: parseCategory(item),
description: item.description.trim(),
start,
stop
})
})
return programs
},
async channels() {
const perPage = 1
const totalChannels = 210
const pages = Math.ceil(totalChannels / perPage)
const channels = []
for (let i in Array(pages).fill(0)) {
const page = parseInt(i) + 1
const url = `${API_ENDPOINT}?page=${page}&limit=${perPage}&day=${dayjs().format(
'YYYY-MM-DD'
)}`
let offset = i * perPage
await axios
.get(url)
.then(r => r.data)
.then(data => {
offset++
if (data && data.data && Array.isArray(data.data.channels)) {
data.data.channels.forEach((item, j) => {
const index = offset + j
channels.push({
lang: 'tr',
name: item.channel_name,
site_id: index + '#' + item._id
})
})
}
})
.catch(err => {
console.log(err.message)
})
}
return channels
}
}
function parseCategory(item) {
return item.genre !== '0' ? item.genre : null
}
function parseStart(item, date) {
const time = dayjs.utc(item.start_date)
return dayjs.utc(`${date.format('YYYY-MM-DD')} ${time.format('HH:mm:ss')}`, 'YYYY-MM-DD HH:mm:ss')
}
function parseDuration(item) {
const [, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/)
return parseInt(H) * 3600 + parseInt(mm) * 60 + parseInt(ss)
}
function parseItems(content, channel) {
const [, channelId] = channel.site_id.split('#')
const data = JSON.parse(content)
if (!data || !data.data || !Array.isArray(data.data.channels)) return null
const channelData = data.data.channels.find(i => i._id == channelId)
return channelData && Array.isArray(channelData.schedule) ? channelData.schedule : []
}
const axios = require('axios')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(utc)
dayjs.extend(customParseFormat)
const API_ENDPOINT = 'https://www.dsmart.com.tr/api/v1/public/epg/schedules'
module.exports = {
site: 'dsmart.com.tr',
days: 2,
url({ date, channel }) {
const [page] = channel.site_id.split('#')
return `${API_ENDPOINT}?page=${page}&limit=1&day=${date.format('YYYY-MM-DD')}`
},
parser: function ({ content, channel }) {
let programs = []
const items = parseItems(content, channel)
items.forEach(item => {
const prev = programs[programs.length - 1]
let start
if (prev) {
start = parseStart(item, prev.stop)
} else {
start = parseStart(item, dayjs.utc(item.day))
}
let duration = parseDuration(item)
let stop = start.add(duration, 's')
programs.push({
title: item.program_name,
category: parseCategory(item),
description: item.description.trim(),
start,
stop
})
})
return programs
},
async channels() {
const perPage = 1
const totalChannels = 210
const pages = Math.ceil(totalChannels / perPage)
const channels = []
for (let i in Array(pages).fill(0)) {
const page = parseInt(i) + 1
const url = `${API_ENDPOINT}?page=${page}&limit=${perPage}&day=${dayjs().format(
'YYYY-MM-DD'
)}`
let offset = i * perPage
await axios
.get(url)
.then(r => r.data)
.then(data => {
offset++
if (data && data.data && Array.isArray(data.data.channels)) {
data.data.channels.forEach((item, j) => {
const index = offset + j
channels.push({
lang: 'tr',
name: item.channel_name,
site_id: index + '#' + item._id
})
})
}
})
.catch(err => {
console.log(err.message)
})
}
return channels
}
}
function parseCategory(item) {
return item.genre !== '0' ? item.genre : null
}
function parseStart(item, date) {
const time = dayjs.utc(item.start_date)
return dayjs.utc(`${date.format('YYYY-MM-DD')} ${time.format('HH:mm:ss')}`, 'YYYY-MM-DD HH:mm:ss')
}
function parseDuration(item) {
const [, H, mm, ss] = item.duration.match(/(\d+):(\d+):(\d+)$/)
return parseInt(H) * 3600 + parseInt(mm) * 60 + parseInt(ss)
}
function parseItems(content, channel) {
const [, channelId] = channel.site_id.split('#')
const data = JSON.parse(content)
if (!data || !data.data || !Array.isArray(data.data.channels)) return null
const channelData = data.data.channels.find(i => i._id == channelId)
return channelData && Array.isArray(channelData.schedule) ? channelData.schedule : []
}

View File

@@ -1,68 +1,68 @@
// npm run channels:parse -- --config=./sites/dsmart.com.tr/dsmart.com.tr.config.js --output=./sites/dsmart.com.tr/dsmart.com.tr.channels.xml
// npm run grab -- --site=dsmart.com.tr
const { parser, url } = require('./dsmart.com.tr.config.js')
const dayjs = require('dayjs')
const fs = require('fs')
const path = require('path')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2023-01-16', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '3#5fe07d7acfef0b1593275751',
xmltv_id: 'SinemaTV.tr'
}
it('can generate valid url', () => {
expect(url({ date, channel })).toBe(
'https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=3&limit=1&day=2023-01-16'
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
const results = parser({ channel, content }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2023-01-15T22:00:00.000Z',
stop: '2023-01-15T23:45:00.000Z',
title: 'Bizi Ayıran Her Şey',
category: 'sinema/genel',
description:
'Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.'
})
expect(results[1]).toMatchObject({
start: '2023-01-15T23:45:00.000Z',
stop: '2023-01-16T01:30:00.000Z',
title: 'Pixie',
category: 'sinema/genel',
description:
'Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlandanın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.'
})
expect(results[12]).toMatchObject({
start: '2023-01-16T20:30:00.000Z',
stop: '2023-01-16T22:30:00.000Z',
title: 'Seberg',
category: 'sinema/genel',
description:
'Başrolünde ünlü yıldız Kristen Stewartın yer aldığı politik gerilim, 1960ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgasının sevilen yüzü ve Serseri Aşıkların yıldızı Jean Sebergün çarpıcı hikayesini anlatıyor.'
})
})
it('can handle empty guide', () => {
const results = parser({
channel,
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
})
expect(results).toMatchObject([])
})
// npm run channels:parse -- --config=./sites/dsmart.com.tr/dsmart.com.tr.config.js --output=./sites/dsmart.com.tr/dsmart.com.tr.channels.xml
// npm run grab -- --site=dsmart.com.tr
const { parser, url } = require('./dsmart.com.tr.config.js')
const dayjs = require('dayjs')
const fs = require('fs')
const path = require('path')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2023-01-16', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: '3#5fe07d7acfef0b1593275751',
xmltv_id: 'SinemaTV.tr'
}
it('can generate valid url', () => {
expect(url({ date, channel })).toBe(
'https://www.dsmart.com.tr/api/v1/public/epg/schedules?page=3&limit=1&day=2023-01-16'
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
const results = parser({ channel, content }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2023-01-15T22:00:00.000Z',
stop: '2023-01-15T23:45:00.000Z',
title: 'Bizi Ayıran Her Şey',
category: 'sinema/genel',
description:
'Issızlığın ortasında yer alan orta sınıf bir evde bir anne kız yaşamaktadır. Çevrelerindeki taşları insanlarla yaşadıkları çatışmalar, anne-kızın hayatını olumsuz yönde etkilemektedir. Kızının ansızın ortadan kaybolması, bu çatışmaların seviyesini artıracak ve anne, kızını bulmak için her türlü yola başvuracaktır.'
})
expect(results[1]).toMatchObject({
start: '2023-01-15T23:45:00.000Z',
stop: '2023-01-16T01:30:00.000Z',
title: 'Pixie',
category: 'sinema/genel',
description:
'Annesinin intikamını almak isteyen Pixie, dahiyane bir soygun planlar. Fakat işler planladığı gibi gitmeyince kendini İrlandanın vahşi gangsterleri tarafından kovalanan iki adamla birlikte kaçarken bulur.'
})
expect(results[12]).toMatchObject({
start: '2023-01-16T20:30:00.000Z',
stop: '2023-01-16T22:30:00.000Z',
title: 'Seberg',
category: 'sinema/genel',
description:
'Başrolünde ünlü yıldız Kristen Stewartın yer aldığı politik gerilim, 1960ların sonunda insan hakları aktivisti Hakim Jamal ile yaşadığı politik ve romantik ilişki sebebiyle FBI tarafından hedef alınan, Fransız Yeni Dalgasının sevilen yüzü ve Serseri Aşıkların yıldızı Jean Sebergün çarpıcı hikayesini anlatıyor.'
})
})
it('can handle empty guide', () => {
const results = parser({
channel,
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json'))
})
expect(results).toMatchObject([])
})