diff --git a/sites/ntv.co.jp/ntv.co.jp.config.js b/sites/ntv.co.jp/ntv.co.jp.config.js new file mode 100644 index 000000000..9a2a42540 --- /dev/null +++ b/sites/ntv.co.jp/ntv.co.jp.config.js @@ -0,0 +1,67 @@ +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) + +module.exports = { + site: 'ntv.co.jp', + days: 7, + url: 'https://www.ntv.co.jp/program/json/program_list.json', + request: { + cache: { + ttl: 60 * 60 * 1000 + } + }, + parser({ buffer, date }) { + const items = parseItems(buffer, date) + + return items.map(item => { + return { + title: item.program_title, + description: item.program_detail, + actors: Array.isArray(item.performers) ? item.performers.map(p => p.performer) : [], + start: dayjs.tz( + item.actual_datetime.broadcast_date + item.actual_datetime.start_time, + 'YYYYMMDDHHmm', + 'Asia/Tokyo' + ), + stop: dayjs.tz( + item.actual_datetime.broadcast_date + item.actual_datetime.end_time, + 'YYYYMMDDHHmm', + 'Asia/Tokyo' + ) + } + }) + }, + channels() { + return [ + { + name: 'Nippon TV', + xmltv_id: 'JOAXDTV.jp', + site_id: '#', + lang: 'ja' + } + ] + } +} + +function parseItems(buffer, date) { + try { + const cleanJsonText = String(buffer) + .replace(/^\uFEFF/, '') + .trim() + const data = JSON.parse(cleanJsonText) + if (!data) return [] + + const requestedDate = date.format('YYYYMMDD') + const items = data.filter(item => item.actual_datetime.broadcast_date === requestedDate) + + return items + } catch { + return [] + } +}