Replace LF endings with CRLF

This commit is contained in:
freearhey
2025-07-31 22:29:01 +03:00
parent 17e3b4ddda
commit 29aa427923
379 changed files with 29332 additions and 29332 deletions

View File

@@ -1,73 +1,73 @@
const cheerio = require('cheerio')
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)
const timezones = {
usa: 'America/New_York',
aus: 'Australia/Sydney',
euro: 'UTC'
}
module.exports = {
site: 'thesportplus.com',
days: 2,
url({ channel, date }) {
return `https://www.thesportplus.com/schedule_${channel.site_id}.php?d=${date.format(
'YYYY-MM-DD'
)}`
},
parser({ content, date, channel }) {
const programs = []
const items = parseItems(content)
items.forEach(item => {
const $item = cheerio.load(item)
const prev = programs[programs.length - 1]
let start = parseStart($item, date, channel)
if (!start) return
if (prev) {
if (start.isBefore(prev.start) && start.hour() < 12) {
start = start.add(1, 'd')
date = date.add(1, 'd')
}
prev.stop = start
}
const stop = start.add(1, 'h')
programs.push({
title: parseTitle($item),
description: parseDescription($item),
start,
stop
})
})
return programs
}
}
function parseTitle($item) {
return $item('h5:last').text().trim()
}
function parseDescription($item) {
return $item('p').text().trim()
}
function parseStart($item, date, channel) {
const timezone = timezones[channel.site_id]
const time = $item('h4').text().trim()
const dateString = `${date.format('YYYY-MM-DD')} ${time}`
return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', timezone)
}
function parseItems(content) {
const $ = cheerio.load(content)
return $('.resume-item').toArray()
}
const cheerio = require('cheerio')
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)
const timezones = {
usa: 'America/New_York',
aus: 'Australia/Sydney',
euro: 'UTC'
}
module.exports = {
site: 'thesportplus.com',
days: 2,
url({ channel, date }) {
return `https://www.thesportplus.com/schedule_${channel.site_id}.php?d=${date.format(
'YYYY-MM-DD'
)}`
},
parser({ content, date, channel }) {
const programs = []
const items = parseItems(content)
items.forEach(item => {
const $item = cheerio.load(item)
const prev = programs[programs.length - 1]
let start = parseStart($item, date, channel)
if (!start) return
if (prev) {
if (start.isBefore(prev.start) && start.hour() < 12) {
start = start.add(1, 'd')
date = date.add(1, 'd')
}
prev.stop = start
}
const stop = start.add(1, 'h')
programs.push({
title: parseTitle($item),
description: parseDescription($item),
start,
stop
})
})
return programs
}
}
function parseTitle($item) {
return $item('h5:last').text().trim()
}
function parseDescription($item) {
return $item('p').text().trim()
}
function parseStart($item, date, channel) {
const timezone = timezones[channel.site_id]
const time = $item('h4').text().trim()
const dateString = `${date.format('YYYY-MM-DD')} ${time}`
return dayjs.tz(dateString, 'YYYY-MM-DD HH:mm', timezone)
}
function parseItems(content) {
const $ = cheerio.load(content)
return $('.resume-item').toArray()
}

View File

@@ -1,50 +1,50 @@
const { parser, url } = require('./thesportplus.com.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2025-01-19', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'usa',
xmltv_id: 'SportPlusUSA.us'
}
it('can generate valid url', () => {
expect(url({ channel, date })).toBe('https://www.thesportplus.com/schedule_usa.php?d=2025-01-19')
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const results = parser({ content, date, channel }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results.length).toBe(13)
expect(results[0]).toMatchObject({
start: '2025-01-19T06:00:00.000Z',
stop: '2025-01-19T08:00:00.000Z',
title: 'ASTERAS vs ATROMITOS',
description: 'Super League Season 24-25 MD 4'
})
expect(results[12]).toMatchObject({
start: '2025-01-20T04:00:00.000Z',
stop: '2025-01-20T05:00:00.000Z',
title: 'SPORTSHOW',
description: 'Super League'
})
})
it('can handle empty guide', () => {
const results = parser({
date,
channel,
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
})
expect(results).toMatchObject([])
})
const { parser, url } = require('./thesportplus.com.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2025-01-19', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'usa',
xmltv_id: 'SportPlusUSA.us'
}
it('can generate valid url', () => {
expect(url({ channel, date })).toBe('https://www.thesportplus.com/schedule_usa.php?d=2025-01-19')
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
const results = parser({ content, date, channel }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results.length).toBe(13)
expect(results[0]).toMatchObject({
start: '2025-01-19T06:00:00.000Z',
stop: '2025-01-19T08:00:00.000Z',
title: 'ASTERAS vs ATROMITOS',
description: 'Super League Season 24-25 MD 4'
})
expect(results[12]).toMatchObject({
start: '2025-01-20T04:00:00.000Z',
stop: '2025-01-20T05:00:00.000Z',
title: 'SPORTSHOW',
description: 'Super League'
})
})
it('can handle empty guide', () => {
const results = parser({
date,
channel,
content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html'))
})
expect(results).toMatchObject([])
})