Fix linter issues in sites/

This commit is contained in:
freearhey committed 2025-01-01 12:27:22 +03:00
1 parent d6d20b6413
commit 5df982bb7c
129 files changed
+3316 -3226

No files matched your search

@@ -0,0 +1 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width"><meta name="format-detection" content="telephone=no"><title>番組表(アニメシアターX(AT-X))|スカパー!</title><!-- Google Tag Manager 2021/03--><script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-K73Z39');</script><!-- End Google Tag Manager 2021/03 --><meta property="og:title" content="番組表(アニメシアターX(AT-X))|スカパー!"><meta property="og:type" content="article"><meta property="og:description" content="「アニメシアターX(AT-X)」を見るならスカパー!で。直近30日間の放送予定を番組表形式でご確認いただけます。"><meta property="og:url" content="https://www.skyperfectv.co.jp/program/schedule/basic/channel:CS333/date:240801"><meta property="og:image" content="https://www.skyperfectv.co.jp/global/assets/images/fb_logo.jpg"><meta property="og:site_name" content="【公式】スカパー!スポーツ、音楽、アニメ、 映画をTVでもスマホでも視聴可"><meta property="og:locale" content="ja_JP"><meta property="fb:app_id" content="357325544353129"><meta name="description" content="「アニメシアターX(AT-X)」を見るならスカパー!で。直近30日間の放送予定を番組表形式でご確認いただけます。"><meta name="Keywords" content="番組,スカパー,テレビ,放送,予定表"><!-- ICON --><link rel="shortcut icon" href="/global/assets/images/fav/favicon.ico" type="image/vnd.microsoft.icon"><link rel="apple-touch-icon" href="/global/assets/images/fav/apple-touch-icon.png"><link href="/global/assets/css/global.css" rel="stylesheet"><link href="/assets/css/style.css" rel="stylesheet"><link href="/program/schedule/css/style.css?m=10" rel="stylesheet"><link rel="canonical" href="https://www.skyperfectv.co.jp/program/schedule/basic/channel:CS333/"></head><body class="fw"><!-- Google Tag Manager (noscript) 2021/3 --><noscript><iframesrc="https: //www.googletagmanager.com/ns.html?id=GTM-K73Z39" height="0" width="0"style="display:none;visibility:hidden"></iframe></noscript><input type="hidden" id="basic_plan_flg"value="0" /><!-- End Google Tag Manager (noscript) 2021/3 --><!-- .l-header include --><div id="header"></div><!-- /.l-header include --><div class="l-container" id="j-container"><!-- .l-side include --><div id="side"></div><!-- /.l-side include --><div class="l-container__main" id="j-container-main"><main><div id="mainContents"><div id="js-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストを更新中です。</p></div></div><div id="js-regist-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストに登録中です。</p></div></div><div id="js-delete-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストから削除中です。</p></div></div><!-- コンテンツをいれてください --><!-- 選択されたサービス--><input type="hidden" id="selectedService"value="basic"><!-- 選択されたチャンネル--><input type="hidden" id="selectedChannel"value="CS333"><!-- 選択された日付--><input type="hidden" id="selectedDate"value="240801"><!-- チャンネルアイコン--><input type="hidden" id="channelIcon" value=""><div id="js-schedule-wrapper" class="p-schedule-wrapper"><div id="js-hdr-normal" class="p-hdr p-hdr--normal"><div class="p-hdr__wrap"><div class="p-hdr__inner"><h1 class="p-hdr__ttl">番組放送予定表</h1><div class="p-hdr__box js-p-hdr-box"><div class="p-status"><div class="p-status__box"><div class="p-status__id"></div><div class="p-status__name"><spanclass="p-status__name__ttl"></span><spanclass="p-status__name__ico"style="display:none"><img src="/global/assets/images/icon/icon_plan_basic.svg"alt="基本プラン"></span></div></div></div><div class="p-switch p-hdr__switch"><button type="button"class="p-switch__btn js-switch-btn"><spanclass="p-switch__label">チャンネル選択</span><iclass="p-switch__icon"><svg><use href="#menu"></use></svg></i></button></div></div><div class="p-hdr__cal p-calendar js-cal"><buttonclass="p-calendar__btnjs-cal-toggle"><svg id="編集モード" xmlns="http://www.w3.org/2000/svg"viewBox="0 0 236 262"><defs><style>.cls-1 {fill: #fff;}.clLine truncated
@@ -0,0 +1 @@
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width"><meta name="format-detection" content="telephone=no"><title>番組表(アニメシアターX(AT-X))|スカパー!</title><!-- Google Tag Manager 2021/03--><script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-K73Z39');</script><!-- End Google Tag Manager 2021/03 --><meta property="og:title" content="番組表(アニメシアターX(AT-X))|スカパー!"><meta property="og:type" content="article"><meta property="og:description" content="「アニメシアターX(AT-X)」を見るならスカパー!で。直近30日間の放送予定を番組表形式でご確認いただけます。"><meta property="og:url" content="https://www.skyperfectv.co.jp/program/schedule/basic/channel:CS333/date:240801"><meta property="og:image" content="https://www.skyperfectv.co.jp/global/assets/images/fb_logo.jpg"><meta property="og:site_name" content="【公式】スカパー!スポーツ、音楽、アニメ、 映画をTVでもスマホでも視聴可"><meta property="og:locale" content="ja_JP"><meta property="fb:app_id" content="357325544353129"><meta name="description" content="「アニメシアターX(AT-X)」を見るならスカパー!で。直近30日間の放送予定を番組表形式でご確認いただけます。"><meta name="Keywords" content="番組,スカパー,テレビ,放送,予定表"><!-- ICON --><link rel="shortcut icon" href="/global/assets/images/fav/favicon.ico" type="image/vnd.microsoft.icon"><link rel="apple-touch-icon" href="/global/assets/images/fav/apple-touch-icon.png"><link href="/global/assets/css/global.css" rel="stylesheet"><link href="/assets/css/style.css" rel="stylesheet"><link href="/program/schedule/css/style.css?m=10" rel="stylesheet"><link rel="canonical" href="https://www.skyperfectv.co.jp/program/schedule/basic/channel:CS333/"></head><body class="fw"><!-- Google Tag Manager (noscript) 2021/3 --><noscript><iframesrc="https: //www.googletagmanager.com/ns.html?id=GTM-K73Z39" height="0" width="0"style="display:none;visibility:hidden"></iframe></noscript><input type="hidden" id="basic_plan_flg"value="0" /><!-- End Google Tag Manager (noscript) 2021/3 --><!-- .l-header include --><div id="header"></div><!-- /.l-header include --><div class="l-container" id="j-container"><!-- .l-side include --><div id="side"></div><!-- /.l-side include --><div class="l-container__main" id="j-container-main"><main><div id="mainContents"><div id="js-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストを更新中です。</p></div></div><div id="js-regist-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストに登録中です。</p></div></div><div id="js-delete-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストから削除中です。</p></div></div><!-- コンテンツをいれてください --><!-- 選択されたサービス--><input type="hidden" id="selectedService"value="basic"><!-- 選択されたチャンネル--><input type="hidden" id="selectedChannel"value="CS333"><!-- 選択された日付--><input type="hidden" id="selectedDate"value="240801"><!-- チャンネルアイコン--><input type="hidden" id="channelIcon" value=""><div id="js-schedule-wrapper" class="p-schedule-wrapper"><div id="js-hdr-normal" class="p-hdr p-hdr--normal"><div class="p-hdr__wrap"><div class="p-hdr__inner"><h1 class="p-hdr__ttl">番組放送予定表</h1><div class="p-hdr__box js-p-hdr-box"><div class="p-status"><div class="p-status__box"><div class="p-status__id"></div><div class="p-status__name"><spanclass="p-status__name__ttl"></span><spanclass="p-status__name__ico"style="display:none"><img src="/global/assets/images/icon/icon_plan_basic.svg"alt="基本プラン"></span></div></div></div><div class="p-switch p-hdr__switch"><button type="button"class="p-switch__btn js-switch-btn"><spanclass="p-switch__label">チャンネル選択</span><iclass="p-switch__icon"><svg><use href="#menu"></use></svg></i></button></div></div><div class="p-hdr__cal p-calendar js-cal"><buttonclass="p-calendar__btnjs-cal-toggle"><svg id="編集モード" xmlns="http://www.w3.org/2000/svg"viewBox="0 0 236 262"><defs><style>.cls-1 {fill: #fff;}.clLine truncated
@@ -12,103 +12,110 @@ dayjs.extend(customParseFormat)
dayjs.extend(duration)
const exported = {
site: 'skyperfectv.co.jp',
days: 1,
lang: 'ja',
url: function ({ date, channel }) {
let [type, ...code] = channel.site_id.split('_')
code = code.join('_')
return `https://www.skyperfectv.co.jp/program/schedule/${type}/channel:${code}/date:${date.format('YYMMDD')}`
},
logo: function ({ channel }) {
return `https://www.skyperfectv.co.jp/library/common/img/channel/icon/basic/m_${channel.site_id.toLowerCase()}.gif`
},
// Specific function that permits to gather NSFW channels (needs confirmation)
async fetchSchedule({ date, channel }) {
const url = exported.url({ date, channel })
const response = await axios.get(url, {
headers: {
'Cookie': 'adult_auth=true'
}
site: 'skyperfectv.co.jp',
days: 1,
lang: 'ja',
url: function ({ date, channel }) {
let [type, ...code] = channel.site_id.split('_')
code = code.join('_')
return `https://www.skyperfectv.co.jp/program/schedule/${type}/channel:${code}/date:${date.format(
'YYMMDD'
)}`
},
logo: function ({ channel }) {
return `https://www.skyperfectv.co.jp/library/common/img/channel/icon/basic/m_${channel.site_id.toLowerCase()}.gif`
},
// Specific function that permits to gather NSFW channels (needs confirmation)
async fetchSchedule({ date, channel }) {
const url = exported.url({ date, channel })
const response = await axios.get(url, {
headers: {
Cookie: 'adult_auth=true'
}
})
return response.data
},
parser({ content, date }) {
const $ = cheerio.load(content)
const programs = []
const sections = [
{ id: 'js-am', addition: 0 },
{ id: 'js-pm', addition: 0 },
{ id: 'js-md', addition: 1 }
]
sections.forEach(({ id, addition }) => {
$(`#${id} > td`).each((index, element) => {
// `td` is a column for a day
// the next `td` will be the next day
const today = date.add(index + addition, 'd').tz('Asia/Tokyo')
const parseTime = timeString => {
// timeString is in the format "HH:mm"
// replace `today` with the time from timeString
const [hour, minute] = timeString.split(':').map(Number)
return today.hour(hour).minute(minute)
}
const $element = $(element) // Wrap element with Cheerio
$element.find('.p-program__item').each((itemIndex, itemElement) => {
const $itemElement = $(itemElement) // Wrap itemElement with Cheerio
const [start, stop] = $itemElement
.find('.p-program__range')
.first()
.text()
.split('〜')
.map(parseTime)
const title = $itemElement.find('.p-program__name').first().text()
const image = $itemElement.find('.js-program_thumbnail').first().attr('data-lazysrc')
programs.push({
title,
start,
stop,
image
})
})
return response.data
},
parser({ content, date }) {
const $ = cheerio.load(content)
const programs = []
})
})
const sections = [
{ id: 'js-am', addition: 0 },
{ id: 'js-pm', addition: 0 },
{ id: 'js-md', addition: 1 }
]
return programs
},
async channels() {
const pageParser = (content, type) => {
// type: "basic" | "premium"
// Returns an array of channel objects
sections.forEach(({ id, addition }) => {
$(`#${id} > td`).each((index, element) => {
// `td` is a column for a day
// the next `td` will be the next day
const today = date.add(index + addition, 'd').tz('Asia/Tokyo')
const $ = cheerio.load(content)
const channels = []
const parseTime = (timeString) => {
// timeString is in the format "HH:mm"
// replace `today` with the time from timeString
const [hour, minute] = timeString.split(':').map(Number)
return today.hour(hour).minute(minute)
}
$('.p-channel').each((index, element) => {
const site_id = `${type}_${$(element).find('.p-channel__id').text()}`
const name = $(element).find('.p-channel__name').text()
channels.push({ site_id, name, lang: 'ja' })
})
const $element = $(element) // Wrap element with Cheerio
$element.find('.p-program__item').each((itemIndex, itemElement) => {
const $itemElement = $(itemElement) // Wrap itemElement with Cheerio
const [start, stop] = $itemElement.find('.p-program__range').first().text().split('〜').map(parseTime)
const title = $itemElement.find('.p-program__name').first().text()
const image = $itemElement.find('.js-program_thumbnail').first().attr('data-lazysrc')
programs.push({
title,
start,
stop,
image
})
})
})
})
return programs
},
async channels() {
const pageParser = (content, type) => {
// type: "basic" | "premium"
// Returns an array of channel objects
const $ = cheerio.load(content)
const channels = []
$('.p-channel').each((index, element) => {
const site_id = `${type}_${$(element).find('.p-channel__id').text()}`
const name = $(element).find('.p-channel__name').text()
channels.push({ site_id, name, lang: 'ja' })
})
return channels
}
const getChannels = async (type) => {
const response = await axios.get(`https://www.skyperfectv.co.jp/program/schedule/${type}/`, {
headers: {
'Cookie': 'adult_auth=true;'
}
})
return pageParser(response.data, type)
}
const fetchAllChannels = async () => {
const basicChannels = await getChannels('basic')
const premiumChannels = await getChannels('premium')
const results = [...basicChannels, ...premiumChannels]
return results
}
return await fetchAllChannels()
return channels
}
const getChannels = async type => {
const response = await axios.get(`https://www.skyperfectv.co.jp/program/schedule/${type}/`, {
headers: {
Cookie: 'adult_auth=true;'
}
})
return pageParser(response.data, type)
}
const fetchAllChannels = async () => {
const basicChannels = await getChannels('basic')
const premiumChannels = await getChannels('premium')
const results = [...basicChannels, ...premiumChannels]
return results
}
return await fetchAllChannels()
}
}
module.exports = exported
module.exports = exported
@@ -1,4 +1,6 @@
const { parser, url } = require('./skyperfectv.co.jp.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')
@@ -12,13 +14,13 @@ const channel = {
xmltv_id: 'WOWOWCinema.jp'
}
const content = `
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width"><meta name="format-detection" content="telephone=no"><title>番組表(アニメシアターX(AT-X))|スカパー!</title><!-- Google Tag Manager 2021/03--><script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-K73Z39');</script><!-- End Google Tag Manager 2021/03 --><meta property="og:title" content="番組表(アニメシアターX(AT-X))|スカパー!"><meta property="og:type" content="article"><meta property="og:description" content="「アニメシアターX(AT-X)」を見るならスカパー!で。直近30日間の放送予定を番組表形式でご確認いただけます。"><meta property="og:url" content="https://www.skyperfectv.co.jp/program/schedule/basic/channel:CS333/date:240801"><meta property="og:image" content="https://www.skyperfectv.co.jp/global/assets/images/fb_logo.jpg"><meta property="og:site_name" content="【公式】スカパー!スポーツ、音楽、アニメ、 映画をTVでもスマホでも視聴可"><meta property="og:locale" content="ja_JP"><meta property="fb:app_id" content="357325544353129"><meta name="description" content="「アニメシアターX(AT-X)」を見るならスカパー!で。直近30日間の放送予定を番組表形式でご確認いただけます。"><meta name="Keywords" content="番組,スカパー,テレビ,放送,予定表"><!-- ICON --><link rel="shortcut icon" href="/global/assets/images/fav/favicon.ico" type="image/vnd.microsoft.icon"><link rel="apple-touch-icon" href="/global/assets/images/fav/apple-touch-icon.png"><link href="/global/assets/css/global.css" rel="stylesheet"><link href="/assets/css/style.css" rel="stylesheet"><link href="/program/schedule/css/style.css?m=10" rel="stylesheet"><link rel="canonical" href="https://www.skyperfectv.co.jp/program/schedule/basic/channel:CS333/"></head><body class="fw"><!-- Google Tag Manager (noscript) 2021/3 --><noscript><iframesrc="https: //www.googletagmanager.com/ns.html?id=GTM-K73Z39" height="0" width="0"style="display:none;visibility:hidden"></iframe></noscript><input type="hidden" id="basic_plan_flg"value="0" /><!-- End Google Tag Manager (noscript) 2021/3 --><!-- .l-header include --><div id="header"></div><!-- /.l-header include --><div class="l-container" id="j-container"><!-- .l-side include --><div id="side"></div><!-- /.l-side include --><div class="l-container__main" id="j-container-main"><main><div id="mainContents"><div id="js-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストを更新中です。</p></div></div><div id="js-regist-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストに登録中です。</p></div></div><div id="js-delete-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストから削除中です。</p></div></div><!-- コンテンツをいれてください --><!-- 選択されたサービス--><input type="hidden" id="selectedService"value="basic"><!-- 選択されたチャンネル--><input type="hidden" id="selectedChannel"value="CS333"><!-- 選択された日付--><input type="hidden" id="selectedDate"value="240801"><!-- チャンネルアイコン--><input type="hidden" id="channelIcon" value=""><div id="js-schedule-wrapper" class="p-schedule-wrapper"><div id="js-hdr-normal" class="p-hdr p-hdr--normal"><div class="p-hdr__wrap"><div class="p-hdr__inner"><h1 class="p-hdr__ttl">番組放送予定表</h1><div class="p-hdr__box js-p-hdr-box"><div class="p-status"><div class="p-status__box"><div class="p-status__id"></div><div class="p-status__name"><spanclass="p-status__name__ttl"></span><spanclass="p-status__name__ico"style="display:none"><img src="/global/assets/images/icon/icon_plan_basic.svg"alt="基本プラン"></span></div></div></div><div class="p-switch p-hdr__switch"><button type="button"class="p-switch__btn js-switch-btn"><spanclass="p-switch__label">チャンネル選択</span><iclass="p-switch__icon"><svg><use href="#menu"></use></svg></i></button></div></div><div class="p-hdr__cal p-calendar js-cal"><buttonclass="p-calendar__btnjs-cal-toggle"><svg id="編集モード" xmlns="http://www.w3.org/2000/svg"viewBox="0 0 236 262"><defs><style>.cls-1 {fill: #fff;}.clLine truncated
`
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
it('can generate valid url', () => {
const result = url({ date, channel })
expect(result).toBe('https://www.skyperfectv.co.jp/program/schedule/basic/channel:BS193/date:240801')
expect(result).toBe(
'https://www.skyperfectv.co.jp/program/schedule/basic/channel:BS193/date:240801'
)
})
it('can parse response', async () => {
@@ -33,15 +35,13 @@ it('can parse response', async () => {
start: '2024-07-31T19:00:00.000Z', // UTC time
stop: '2024-07-31T19:30:00.000Z', // UTC
title: 'ヴァルキリードライヴマーメイド #06',
image: 'https://pm-img-ap.skyperfectv.co.jp/uploads/thumbnail/image/11301805/S_BC929697780313_be7975d4e26a4cad9b89fc6c94807e38_20240613144158569.jpg'
image:
'https://pm-img-ap.skyperfectv.co.jp/uploads/thumbnail/image/11301805/S_BC929697780313_be7975d4e26a4cad9b89fc6c94807e38_20240613144158569.jpg'
}
])
})
const empty = `
<!DOCTYPE html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width"><meta name="format-detection" content="telephone=no"><title>番組表(アニメシアターX(AT-X))|スカパー!</title><!-- Google Tag Manager 2021/03--><script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-K73Z39');</script><!-- End Google Tag Manager 2021/03 --><meta property="og:title" content="番組表(アニメシアターX(AT-X))|スカパー!"><meta property="og:type" content="article"><meta property="og:description" content="「アニメシアターX(AT-X)」を見るならスカパー!で。直近30日間の放送予定を番組表形式でご確認いただけます。"><meta property="og:url" content="https://www.skyperfectv.co.jp/program/schedule/basic/channel:CS333/date:240801"><meta property="og:image" content="https://www.skyperfectv.co.jp/global/assets/images/fb_logo.jpg"><meta property="og:site_name" content="【公式】スカパー!スポーツ、音楽、アニメ、 映画をTVでもスマホでも視聴可"><meta property="og:locale" content="ja_JP"><meta property="fb:app_id" content="357325544353129"><meta name="description" content="「アニメシアターX(AT-X)」を見るならスカパー!で。直近30日間の放送予定を番組表形式でご確認いただけます。"><meta name="Keywords" content="番組,スカパー,テレビ,放送,予定表"><!-- ICON --><link rel="shortcut icon" href="/global/assets/images/fav/favicon.ico" type="image/vnd.microsoft.icon"><link rel="apple-touch-icon" href="/global/assets/images/fav/apple-touch-icon.png"><link href="/global/assets/css/global.css" rel="stylesheet"><link href="/assets/css/style.css" rel="stylesheet"><link href="/program/schedule/css/style.css?m=10" rel="stylesheet"><link rel="canonical" href="https://www.skyperfectv.co.jp/program/schedule/basic/channel:CS333/"></head><body class="fw"><!-- Google Tag Manager (noscript) 2021/3 --><noscript><iframesrc="https: //www.googletagmanager.com/ns.html?id=GTM-K73Z39" height="0" width="0"style="display:none;visibility:hidden"></iframe></noscript><input type="hidden" id="basic_plan_flg"value="0" /><!-- End Google Tag Manager (noscript) 2021/3 --><!-- .l-header include --><div id="header"></div><!-- /.l-header include --><div class="l-container" id="j-container"><!-- .l-side include --><div id="side"></div><!-- /.l-side include --><div class="l-container__main" id="j-container-main"><main><div id="mainContents"><div id="js-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストを更新中です。</p></div></div><div id="js-regist-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストに登録中です。</p></div></div><div id="js-delete-loading" class="p-loading"><div class="p-loading__inner"><img class="p-loading__img"src="/global/assets/images/icon/icon_loading.svg" alt=""><p class="p-loading__txt">現在マイリストから削除中です。</p></div></div><!-- コンテンツをいれてください --><!-- 選択されたサービス--><input type="hidden" id="selectedService"value="basic"><!-- 選択されたチャンネル--><input type="hidden" id="selectedChannel"value="CS333"><!-- 選択された日付--><input type="hidden" id="selectedDate"value="240801"><!-- チャンネルアイコン--><input type="hidden" id="channelIcon" value=""><div id="js-schedule-wrapper" class="p-schedule-wrapper"><div id="js-hdr-normal" class="p-hdr p-hdr--normal"><div class="p-hdr__wrap"><div class="p-hdr__inner"><h1 class="p-hdr__ttl">番組放送予定表</h1><div class="p-hdr__box js-p-hdr-box"><div class="p-status"><div class="p-status__box"><div class="p-status__id"></div><div class="p-status__name"><spanclass="p-status__name__ttl"></span><spanclass="p-status__name__ico"style="display:none"><img src="/global/assets/images/icon/icon_plan_basic.svg"alt="基本プラン"></span></div></div></div><div class="p-switch p-hdr__switch"><button type="button"class="p-switch__btn js-switch-btn"><spanclass="p-switch__label">チャンネル選択</span><iclass="p-switch__icon"><svg><use href="#menu"></use></svg></i></button></div></div><div class="p-hdr__cal p-calendar js-cal"><buttonclass="p-calendar__btnjs-cal-toggle"><svg id="編集モード" xmlns="http://www.w3.org/2000/svg"viewBox="0 0 236 262"><defs><style>.cls-1 {fill: #fff;}.clLine truncated
`
const empty = fs.readFileSync(path.resolve(__dirname, '__data__/empty.html'))
it('can handle empty guide', async () => {
const result = parser({