From 930d17ef991fbbd35e11d55eb42c6e0f8e0da613 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 14 Jan 2022 02:44:04 +0300 Subject: [PATCH 1/5] Update .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a6693eac..34d14dc9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules/ -logs/ \ No newline at end of file +logs/ +guide.xml \ No newline at end of file From f4a4d1f271ff3164010cb90d7dc1841564cbcfaf Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 14 Jan 2022 02:44:12 +0300 Subject: [PATCH 2/5] Create tvguide.myjcom.jp.test.js --- .../tvguide.myjcom.jp.test.js | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 sites/tvguide.myjcom.jp/tvguide.myjcom.jp.test.js diff --git a/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.test.js b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.test.js new file mode 100644 index 00000000..00b4562c --- /dev/null +++ b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.test.js @@ -0,0 +1,56 @@ +// node ./scripts/channels.js --config=./sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js --output=./sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml +// npx epg-grabber --config=sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js --channels=sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml --output=guide.xml --days=2 + +const { parser, url, logo } = require('./tvguide.myjcom.jp.config.js') +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('2022-01-14', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: '120_200_4', + name: 'Star Channel 1', + xmltv_id: 'StarChannel1.jp', + logo: 'https://tvguide.myjcom.jp/monomedia/ch_logo/jcom/logo-0004-200-400x400.png' +} +const content = `{"120_200_4_20220114":[{"@search.score":1,"cid":"120_7305523","serviceCode":"200_4","channelName":"スターチャンネル1","digitalNo":195,"eventId":"181","title":"[5.1]フードロア:タマリンド","commentary":"HBO(R)アジア製作。日本の齊藤工などアジアの監督が、各国の食をテーマに描いたアンソロジーシリーズ。(全8話)(19年 シンガポール 56分)","attr":["5.1","hd","cp1"],"sortGenre":"31","hasImage":1,"imgPath":"\/monomedia\/si\/2022\/20220114\/7305523\/image\/7743d17b655b8d2274ca58b74f2f095c.jpg","isRecommended":null,"programStart":20220114050000,"programEnd":20220114060000,"programDate":20220114,"programId":568519,"start_time":"00","duration":60,"top":300,"end_time":"20220114060000","channel_type":"120","is_end":false,"show_remoterec":true}]}` + +it('can generate valid url', () => { + const result = url({ date, channel }) + expect(result).toBe('https://tvguide.myjcom.jp/api/getEpgInfo/?channels=120_200_4_20220114') +}) + +it('can get logo url', () => { + const result = logo({ channel }) + expect(result).toBe('https://tvguide.myjcom.jp/monomedia/ch_logo/jcom/logo-0004-200-400x400.png') +}) + +it('can parse response', () => { + const result = parser({ date, channel, content }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(result).toMatchObject([ + { + start: '2022-01-13T20:00:00.000Z', + stop: '2022-01-13T21:00:00.000Z', + title: '[5.1]フードロア:タマリンド', + description: `HBO(R)アジア製作。日本の齊藤工などアジアの監督が、各国の食をテーマに描いたアンソロジーシリーズ。(全8話)(19年 シンガポール 56分)`, + icon: 'https://tvguide.myjcom.jp/monomedia/si/2022/20220114/7305523/image/7743d17b655b8d2274ca58b74f2f095c.jpg', + category: 'ドラマ' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + date, + channel, + content: `{"120_200_3_20220114":[]}` + }) + expect(result).toMatchObject([]) +}) From c79e2ead6599482544c05bf4b748f56fd4e48284 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 14 Jan 2022 02:44:19 +0300 Subject: [PATCH 3/5] Create tvguide.myjcom.jp.config.js --- .../tvguide.myjcom.jp.config.js | 116 ++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js diff --git a/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js new file mode 100644 index 00000000..fd40ab4e --- /dev/null +++ b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp.config.js @@ -0,0 +1,116 @@ +const axios = require('axios') +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: 'tvguide.myjcom.jp', + url: function ({ date, channel }) { + const id = `${channel.site_id}_${date.format('YYYYMMDD')}` + + return `https://tvguide.myjcom.jp/api/getEpgInfo/?channels=${id}` + }, + logo({ channel }) { + return channel.logo || null + }, + parser: function ({ content, channel, date }) { + let programs = [] + const items = parseItems(content, channel, date) + items.forEach(item => { + programs.push({ + title: item.title, + description: item.commentary, + category: parseCategory(item), + icon: parseIcon(item), + start: parseStart(item), + stop: parseStop(item) + }) + }) + + return programs + }, + async channels() { + const requests = [ + axios.get( + `https://tvguide.myjcom.jp/api/mypage/getEpgChannelList/?channelType=2&area=108&channelGenre&course&chart&is_adult=true` + ), + axios.get( + `https://tvguide.myjcom.jp/api/mypage/getEpgChannelList/?channelType=3&area=108&channelGenre&course&chart&is_adult=true` + ), + axios.get( + `https://tvguide.myjcom.jp/api/mypage/getEpgChannelList/?channelType=5&area=108&channelGenre&course&chart&is_adult=true` + ), + axios.get( + `https://tvguide.myjcom.jp/api/mypage/getEpgChannelList/?channelType=120&area=108&channelGenre&course&chart&is_adult=true` + ), + axios.get( + `https://tvguide.myjcom.jp/api/mypage/getEpgChannelList/?channelType=200&area=108&channelGenre&course&chart&is_adult=true` + ) + ] + + let items = [] + await Promise.all(requests) + .then(responses => { + for (const r of responses) { + items = items.concat(r.data.header) + } + }) + .catch(console.log) + + return items.map(item => { + return { + lang: 'jp', + site_id: `${item.channel_type}_${item.channel_id}_${item.network_id}`, + name: item.channel_name, + logo: item.logo_url + } + }) + } +} + +function parseIcon(item) { + return item.imgPath ? `https://tvguide.myjcom.jp${item.imgPath}` : null +} + +function parseCategory(item) { + if (!item.sortGenre) return null + + const id = item.sortGenre[0] + const genres = { + 0: 'ニュース/報道', + 1: 'スポーツ', + 2: '情報/ワイドショー', + 3: 'ドラマ', + 4: '音楽', + 5: 'バラエティ', + 6: '映画', + 7: 'アニメ/特撮', + 8: 'ドキュメンタリー/教養', + 9: '劇場/公演', + 10: '趣味/教育', + 11: '福祉', + 12: 'その他' + } + + return genres[id] +} + +function parseStart(item) { + return dayjs.tz(item.programStart.toString(), 'YYYYMMDDHHmmss', 'Asia/Tokyo') +} + +function parseStop(item) { + return dayjs.tz(item.programEnd.toString(), 'YYYYMMDDHHmmss', 'Asia/Tokyo') +} + +function parseItems(content, channel, date) { + const id = `${channel.site_id}_${date.format('YYYYMMDD')}` + const parsed = JSON.parse(content) + + return parsed[id] || [] +} From 81cc71b6985743c98e9c5243d59f16175f0996e1 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 14 Jan 2022 02:44:37 +0300 Subject: [PATCH 4/5] Create tvguide.myjcom.jp_jp.channels.xml --- .../tvguide.myjcom.jp_jp.channels.xml | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml diff --git a/sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml new file mode 100644 index 00000000..d7a2b4a0 --- /dev/null +++ b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml @@ -0,0 +1,142 @@ + + + + NHK東京 総合 + NHK東京 教育 + テレビ神奈川 + テレビ埼玉 + 日本テレビ + テレビ朝日 + TBS + テレビ東京 + フジテレビ + TOKYO MX + J:COMテレビ + J:COMチャンネル東京 + NHKBS1 + NHKBSプレミアム + BS日テレ + BS朝日1 + BS-TBS + BSテレ東 + BSフジ・181 + WOWOWプライム + WOWOWライブ + WOWOWシネマ + BS11 イレブン + NHK BS4K + BS日テレ 4K + BS朝日 4K + BS-TBS 4K + BSテレ東 4K + BSフジ 4K + WOWOW 4K + スターチャンネル1 + スターチャンネル2 + スターチャンネル3 + スターチャンネルD + ショップチャンネル + QVC + ジュエリー☆GSTV + ショップチャンネル プラス + BS12トゥエルビ + ご案内チャンネル + オンデマンドチャンネル290 + J:COMプレミアチャンネル + TBS NEWS + 中国テレビ★CCTV大富 + CNNj + 日経CNBC + CNN U.S. + 日テレNEWS24 HD + BBCワールドニュース + NHKワールド JAPAN + 音楽・ライブ! スペースシャワーTV HD + MUSIC ON! TV(エムオン!)HD + MTV HD + 歌謡ポップスチャンネル + ミュージック・エア + 100%ヒッツ!スペースシャワーTVプラス + スカイA + FIGHTING TV サムライ + GAORA SPORTS HD + ゴルフネットワーク + 日テレジータス HD + J SPORTS 1 HD + J SPORTS 2 HD + J SPORTS 3 HD + J SPORTS 4 HD + スポーツライブ+ + ケーブル4K + JSPORTS1 (4K) + JSPORTS2 (4K) + JSPORTS3 (4K) + JSPORTS4 (4K) + ショップチャンネル 4K + 4K QVC + ザ・シネマ4K + 日本映画+時代劇 4K + オンデマンドチャンネル440 + ムービープラス + WOWOWプラス 映画・ドラマ・スポーツ・音楽 + ザ・シネマ HD + 映画・チャンネルNECO-HD + 日本映画専門チャンネル HD + 時代劇専門チャンネル HD + 東映チャンネルHD + 衛星劇場HD + V☆パラダイス + スーパー!ドラマTV #海外ドラマ☆エンタメ + FOX HD + アジアドラマチックTV(アジドラ) + チャンネル銀河 歴史ドラマ・サスペンス・日本のうた + TBSチャンネル1 最新ドラマ・音楽・映画 + ホームドラマチャンネルHD 韓流・時代劇・国内ドラマ + TBSチャンネル2 名作ドラマ・スポーツ・アニメ + 女性チャンネル♪LaLa TV + ファミリー劇場HD + AXN HD 海外ドラマ + AXNミステリー HD + アニマックスHD + キッズステーション HD + 海外アニメ!カートゥーン ネットワーク + ディズニー・チャンネルHD + アニメシアターX(AT-X) + ディズニージュニア + ヒストリーチャンネル 日本・世界の歴史&エンタメ + ナショナル ジオグラフィック + ディスカバリーチャンネル + アニマルプラネット + 囲碁・将棋チャンネル + 釣りビジョンHD + MONDOTV HD + フジテレビNEXT ライブ・プレミアム + フジテレビONE スポーツ・バラエティ + フジテレビTWO ドラマ・アニメ + テレ朝チャンネル1 + KBS WORLD HD + 日テレプラス ドラマ・アニメ・音楽ライブ + テレ朝チャンネル2 + Mnet HD + タカラヅカ・スカイ・ステージ + KNTV + パチンコ★パチスロTV! + 旅チャンネル HD + エンタメ~テレHD☆ + TV5MONDE + ダンスチャンネル by エンタメ~テレ + 寄席チャンネル + グリーンチャンネルHD + グリーンチャンネル2HD + レジャーチャンネル + SPEEDチャンネル + PPVチョイス940(アダルト、エロスシネマ) + PPVチョイス941(アダルト、エロスシネマ) + プレイボーイ チャンネル + レッドチェリー + ミッドナイト・ブルー + パラダイステレビ + J:COMテレビ + J:COMチャンネル東京 + + From 6cff949fe1bcd0fdfd5998313e324a454358c131 Mon Sep 17 00:00:00 2001 From: Aleksandr Statciuk Date: Fri, 14 Jan 2022 16:28:19 +0300 Subject: [PATCH 5/5] Update tvguide.myjcom.jp_jp.channels.xml --- .../tvguide.myjcom.jp_jp.channels.xml | 267 +++++++++--------- 1 file changed, 129 insertions(+), 138 deletions(-) diff --git a/sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml index d7a2b4a0..7e95f134 100644 --- a/sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml +++ b/sites/tvguide.myjcom.jp/tvguide.myjcom.jp_jp.channels.xml @@ -1,142 +1,133 @@ - NHK東京 総合 - NHK東京 教育 - テレビ神奈川 - テレビ埼玉 - 日本テレビ - テレビ朝日 - TBS - テレビ東京 - フジテレビ - TOKYO MX - J:COMテレビ - J:COMチャンネル東京 - NHKBS1 - NHKBSプレミアム - BS日テレ - BS朝日1 - BS-TBS - BSテレ東 - BSフジ・181 - WOWOWプライム - WOWOWライブ - WOWOWシネマ - BS11 イレブン - NHK BS4K - BS日テレ 4K - BS朝日 4K - BS-TBS 4K - BSテレ東 4K - BSフジ 4K - WOWOW 4K - スターチャンネル1 - スターチャンネル2 - スターチャンネル3 - スターチャンネルD - ショップチャンネル - QVC - ジュエリー☆GSTV - ショップチャンネル プラス - BS12トゥエルビ - ご案内チャンネル - オンデマンドチャンネル290 - J:COMプレミアチャンネル - TBS NEWS - 中国テレビ★CCTV大富 - CNNj - 日経CNBC - CNN U.S. - 日テレNEWS24 HD - BBCワールドニュース - NHKワールド JAPAN - 音楽・ライブ! スペースシャワーTV HD - MUSIC ON! TV(エムオン!)HD - MTV HD - 歌謡ポップスチャンネル - ミュージック・エア - 100%ヒッツ!スペースシャワーTVプラス - スカイA - FIGHTING TV サムライ - GAORA SPORTS HD - ゴルフネットワーク - 日テレジータス HD - J SPORTS 1 HD - J SPORTS 2 HD - J SPORTS 3 HD - J SPORTS 4 HD - スポーツライブ+ - ケーブル4K - JSPORTS1 (4K) - JSPORTS2 (4K) - JSPORTS3 (4K) - JSPORTS4 (4K) - ショップチャンネル 4K - 4K QVC - ザ・シネマ4K - 日本映画+時代劇 4K - オンデマンドチャンネル440 - ムービープラス - WOWOWプラス 映画・ドラマ・スポーツ・音楽 - ザ・シネマ HD - 映画・チャンネルNECO-HD - 日本映画専門チャンネル HD - 時代劇専門チャンネル HD - 東映チャンネルHD - 衛星劇場HD - V☆パラダイス - スーパー!ドラマTV #海外ドラマ☆エンタメ - FOX HD - アジアドラマチックTV(アジドラ) - チャンネル銀河 歴史ドラマ・サスペンス・日本のうた - TBSチャンネル1 最新ドラマ・音楽・映画 - ホームドラマチャンネルHD 韓流・時代劇・国内ドラマ - TBSチャンネル2 名作ドラマ・スポーツ・アニメ - 女性チャンネル♪LaLa TV - ファミリー劇場HD - AXN HD 海外ドラマ - AXNミステリー HD - アニマックスHD - キッズステーション HD - 海外アニメ!カートゥーン ネットワーク - ディズニー・チャンネルHD - アニメシアターX(AT-X) - ディズニージュニア - ヒストリーチャンネル 日本・世界の歴史&エンタメ - ナショナル ジオグラフィック - ディスカバリーチャンネル - アニマルプラネット - 囲碁・将棋チャンネル - 釣りビジョンHD - MONDOTV HD - フジテレビNEXT ライブ・プレミアム - フジテレビONE スポーツ・バラエティ - フジテレビTWO ドラマ・アニメ - テレ朝チャンネル1 - KBS WORLD HD - 日テレプラス ドラマ・アニメ・音楽ライブ - テレ朝チャンネル2 - Mnet HD - タカラヅカ・スカイ・ステージ - KNTV - パチンコ★パチスロTV! - 旅チャンネル HD - エンタメ~テレHD☆ - TV5MONDE - ダンスチャンネル by エンタメ~テレ - 寄席チャンネル - グリーンチャンネルHD - グリーンチャンネル2HD - レジャーチャンネル - SPEEDチャンネル - PPVチョイス940(アダルト、エロスシネマ) - PPVチョイス941(アダルト、エロスシネマ) - プレイボーイ チャンネル - レッドチェリー - ミッドナイト・ブルー - パラダイステレビ - J:COMテレビ - J:COMチャンネル東京 + Animal Planet Japan + Animax Japan + Asia Dramatic TV + AT-X + AXN Japan + AXN Mystery + BBC World News Asia Pacific + BS 11 + BS 12 + BS Asahi + BS Asahi 4K + BS Fuji + BS Fuji 4K + BS Nippon TV + BS Nippon TV 4K + BS-TBS + BS-TBS 4K + BS TV Tokyo + BS TV Tokyo 4K + Cable 4K + Cartoon Network Japan + CCTV Daifu + Channel Ginga + Channel Neco + CNN J + CNN USA + Dance Channel + Discovery Channel Japan + Disney Channel Japan + Disney Junior Japan + Eisei Gekijo + Entermei Tele + Family Gekijyo + Fighting TV Samurai! + Fishing Vision + Fox Japan + Fuji TV Next + Fuji TV One + Fuji TV Two + Gaora Sports + Golf Network + Green Channel + Green Channel 2 + GSTV + Home Drama Channel + Igo Shogi Channel + Japan Leisure Channel + J:COM Higashi Kanto + J:COM Premier Channel + J:COM TV + Jidaigeki Senmon Channel + Fuji TV (JOCX-DTV) + Tokyo MX (JOMX-DTV) + TBS (JORX-DTV) + TV Tokyo (JOTX-DTV) + J Sports 1 + J Sports 2 + J Sports 3 + J Sports 4 + Kayo Pops + KBS World Japan + Kids Station + KNTV + LaLa TV + Midnight Blue + Mnet Japan + Mondo TV + Movie Plus + MTV Japan + Music Air + Music On! TV + National Geographic Japan + NHK BS 1 + NHK BS 4K + NHK BS Premium + NHK Educational TV + NHK General TV + NHK World Japan + Nihon Eiga Senmon Channel + Nihon Jidai 4K + Nikkei CNBC + Nippon TV + Nittele G+ + Nittele Plus + NTV News 24 + Pachinko Pachislo TV + Paradise TV + Playboy Channel Japan + PPV Choice 940 + PPV Choice 941 + QVC Japan + QVC Japan 4K + Red Cherry + Shop Channel + Shop Channel 4K + Shop Channel Plus + Sky A + Space Shower TV + Space Shower TV Plus + Speed Channel 1 + Sports Live + + Star 1 + Star 2 + Star 3 + Star BS10 + Super! Drama TV + Tabi Channel + Takarazuka Sky Stage + TBS Channel 1 + TBS Channel 2 + TBS News + The Cinema + The Cinema 4K + The History Channel Japan + Toei Channel + TV5Monde Pacifique + TV Asahi + TV Asahi Channel 1 + TV Asahi Channel 2 + TV Kanagawa + TV Saitama + V Paradise + Wowow 4K + Wowow Cinema + Wowow Live + Wowow Plus + Wowow Prime + Yose Channel - + \ No newline at end of file