diff --git a/sites/tv.trueid.net/tv.trueid.net.config.js b/sites/tv.trueid.net/tv.trueid.net.config.js index 9a626725..6f1c3de3 100644 --- a/sites/tv.trueid.net/tv.trueid.net.config.js +++ b/sites/tv.trueid.net/tv.trueid.net.config.js @@ -1,4 +1,4 @@ -const jsdom = require('jsdom') +const cheerio = require('cheerio') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') @@ -20,17 +20,13 @@ module.exports = { }, parser: function ({ content, channel }) { let programs = [] - const data = parseContent(content, channel) - const items = parseItems(data) + const items = parseItems(content, channel) items.forEach(item => { - const start = parseStart(item) - const stop = parseStop(item) - programs.push({ title: item.title, icon: parseIcon(item), - start, - stop + start: parseStart(item), + stop: parseStop(item) }) }) @@ -51,19 +47,24 @@ function parseStop(item) { } function parseContent(content, channel) { - const virtualConsole = new jsdom.VirtualConsole() - virtualConsole.sendTo(console, { omitJSDOMErrors: true }) - const dom = new jsdom.JSDOM(content, { virtualConsole }) - const elem = dom.window.document.getElementById('__NEXT_DATA__') || { textContent: '' } - if (!elem.textContent) return null - const data = JSON.parse(elem.textContent) - const channels = data.props?.pageProps?.listEPG?.data || [] + const $ = cheerio.load(content) + const nextData = $('#__NEXT_DATA__').html() + const data = JSON.parse(nextData) + if ( + !data || + !data.props || + !data.props.pageProps || + !data.props.pageProps.listEPG || + !Array.isArray(data.props.pageProps.listEPG.data) + ) + return null - return channels.find(ch => ch.slug === channel.site_id) + return data.props.pageProps.listEPG.data.find(ch => ch.slug === channel.site_id) } -function parseItems(data) { - if (!data) return [] +function parseItems(content, channel) { + const data = parseContent(content, channel) + if (!data || !Array.isArray(data.programList)) return [] - return data.programList || [] + return data.programList } diff --git a/sites/tv.trueid.net/tv.trueid.net.test.js b/sites/tv.trueid.net/tv.trueid.net.test.js index b99a270f..a69285e4 100644 --- a/sites/tv.trueid.net/tv.trueid.net.test.js +++ b/sites/tv.trueid.net/tv.trueid.net.test.js @@ -1,4 +1,4 @@ -// npx epg-grabber --config=sites/tv.trueid.net/tv.trueid.net.config.js --channels=sites/tv.trueid.net/tv.trueid.net_th.channels.xml --days=1 --output=guide.xml +// NODE_OPTIONS=--insecure-http-parser npx epg-grabber --config=sites/tv.trueid.net/tv.trueid.net.config.js --channels=sites/tv.trueid.net/tv.trueid.net_th.channels.xml --output=guide.xml --timeout=30000 --days=2 const { parser, url, logo } = require('./tv.trueid.net.config.js') const dayjs = require('dayjs') @@ -13,7 +13,7 @@ const channel = { xmltv_id: 'NFLNBATV.us', name: 'NFL & NBA TV' } -const content = `` +const content = `` it('can generate valid url', () => { const result = url({ channel, date }) @@ -28,11 +28,15 @@ it('can get logo url', () => { }) it('can parse response', () => { - const result = parser({ date, channel, content }) + const result = parser({ date, channel, content }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) expect(result).toMatchObject([ { - start: dayjs.utc('Thu, 28 Oct 2021 19:00:00 GMT'), - stop: dayjs.utc('Thu, 28 Oct 2021 21:00:00 GMT'), + start: '2021-10-28T19:00:00.000Z', + stop: '2021-10-28T21:00:00.000Z', title: 'NBA 2021/22', icon: 'https://epgthumb.dmpcdn.com/thumbnail_large/t513/20211029/20211029_020000.jpg' }