Add Freeview description

This commit is contained in:
CasperMcFadden95
2025-10-31 11:00:28 +00:00
committed by GitHub
parent 2f44e5013e
commit aef7f8ea7a
2 changed files with 33 additions and 8 deletions

View File

@@ -14,21 +14,24 @@ module.exports = {
return `https://www.freeview.co.uk/api/tv-guide?nid=${networkId}&start=${startTimestamp}`
},
parser({ content, channel }) {
async parser({ content, channel }) {
let programs = []
let items = parseItems(content, channel)
items.forEach(item => {
for (const item of items) {
const start = parseStart(item)
const duration = parseDuration(item.duration)
const stop = start.add(duration, 'ms')
const details = await loadProgramDetails(item)
const synopsis = details?.synopsis
programs.push({
title: item.main_title,
subtitle: item.secondary_title,
description: synopsis?.long || synopsis?.medium || synopsis?.short || null,
image: parseImage(item),
start,
stop
})
})
}
return programs
},
@@ -71,3 +74,15 @@ function parseItems(content, channel) {
return []
}
}
async function loadProgramDetails(item) {
const url = `https://www.freeview.co.uk/api/program?pid=${item.program_id}&start_time=${item.start_time}&duration=${item.duration}`
const data = await axios
.get(url)
.then(r => {
const programs = r?.data?.data?.programs
return Array.isArray(programs) && programs.length > 0 ? programs[0] : {}
})
.catch(console.log)
return data || {}
}

View File

@@ -4,8 +4,10 @@ const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
const axios = require('axios')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
jest.mock('axios')
const date = dayjs.utc('2025-01-16', 'YYYY-MM-DD').startOf('d')
const channel = {
@@ -19,9 +21,17 @@ it('can generate valid url', () => {
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
let results = parser({ content, channel })
it('can parse response', async () => {
axios.get.mockImplementation(requestUrl => {
if (requestUrl.includes('https://www.freeview.co.uk/api/program?pid=')) {
return Promise.resolve({data: {data: {programs: [{}]}}})
} else {
return Promise.resolve({data: {}})
}
})
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8')
let results = await parser({ content, channel })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
@@ -45,8 +55,8 @@ it('can parse response', () => {
})
})
it('can handle empty guide', () => {
const results = parser({
it('can handle empty guide', async () => {
const results = await parser({
content: '[]',
channel
})