From ced3977bcc798af4f10079658eb7dae6837c17cf Mon Sep 17 00:00:00 2001 From: Andika Edo Date: Fri, 10 Nov 2023 18:32:33 +0700 Subject: [PATCH] Add dens.tv --- sites/dens.tv/__data__/content.json | 1 + sites/dens.tv/__data__/no_content.json | 1 + sites/dens.tv/dens.tv.channels.xml | 58 ++++++++++++++++++++++++++ sites/dens.tv/dens.tv.config.js | 33 +++++++++++++++ sites/dens.tv/dens.tv.test.js | 44 +++++++++++++++++++ 5 files changed, 137 insertions(+) create mode 100644 sites/dens.tv/__data__/content.json create mode 100644 sites/dens.tv/__data__/no_content.json create mode 100644 sites/dens.tv/dens.tv.channels.xml create mode 100644 sites/dens.tv/dens.tv.config.js create mode 100644 sites/dens.tv/dens.tv.test.js diff --git a/sites/dens.tv/__data__/content.json b/sites/dens.tv/__data__/content.json new file mode 100644 index 00000000..ffb9eb6e --- /dev/null +++ b/sites/dens.tv/__data__/content.json @@ -0,0 +1 @@ +{"response":0,"data":[{"seq":"6961985","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Follow Up","time":"00:00","starttime":"2023-11-10 00:00:00","endtime":"2023-11-10 00:05:00","play":"","status":0},{"seq":"6961986","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Editorial Malam","time":"00:05","starttime":"2023-11-10 00:05:00","endtime":"2023-11-10 00:30:00","play":"","status":0},{"seq":"6961987","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Primetime News","time":"00:30","starttime":"2023-11-10 00:30:00","endtime":"2023-11-10 03:05:00","play":"","status":0},{"seq":"6961988","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Top News","time":"03:05","starttime":"2023-11-10 03:05:00","endtime":"2023-11-10 04:05:00","play":"","status":0},{"seq":"6961989","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Metro Pagi Primetime","time":"04:05","starttime":"2023-11-10 04:05:00","endtime":"2023-11-10 06:05:00","play":"","status":0},{"seq":"6961990","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Metro Sport","time":"06:05","starttime":"2023-11-10 06:05:00","endtime":"2023-11-10 06:30:00","play":"","status":0},{"seq":"6961991","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Go Healthy","time":"06:30","starttime":"2023-11-10 06:30:00","endtime":"2023-11-10 07:05:00","play":"","status":0},{"seq":"6961992","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Editorial Media Indonesia","time":"07:05","starttime":"2023-11-10 07:05:00","endtime":"2023-11-10 08:05:00","play":"","status":0},{"seq":"6961993","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Metro Xin Wen","time":"08:05","starttime":"2023-11-10 08:05:00","endtime":"2023-11-10 08:30:00","play":"","status":0},{"seq":"6961994","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Selamat Pagi Indonesia","time":"08:30","starttime":"2023-11-10 08:30:00","endtime":"2023-11-10 10:05:00","play":"","status":0},{"seq":"6961995","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Zona Bisnis","time":"10:05","starttime":"2023-11-10 10:05:00","endtime":"2023-11-10 10:30:00","play":"","status":0},{"seq":"6961996","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Go Healthy","time":"10:30","starttime":"2023-11-10 10:30:00","endtime":"2023-11-10 11:05:00","play":"","status":0},{"seq":"6961997","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Metro Siang","time":"11:05","starttime":"2023-11-10 11:05:00","endtime":"2023-11-10 13:05:00","play":"","status":0},{"seq":"6961998","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Kontroversi","time":"13:05","starttime":"2023-11-10 13:05:00","endtime":"2023-11-10 14:05:00","play":"","status":0},{"seq":"6961999","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Untuk Indonesia","time":"14:05","starttime":"2023-11-10 14:05:00","endtime":"2023-11-10 14:30:00","play":"","status":0},{"seq":"6962000","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Presisi Mengayomi","time":"14:30","starttime":"2023-11-10 14:30:00","endtime":"2023-11-10 15:05:00","play":"","status":0},{"seq":"6962001","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Follow Up","time":"15:05","starttime":"2023-11-10 15:05:00","endtime":"2023-11-10 15:30:00","play":"","status":0},{"seq":"6962002","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Berita Pemilu","time":"15:30","starttime":"2023-11-10 15:30:00","endtime":"2023-11-10 16:05:00","play":"","status":0},{"seq":"6962003","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Metro Hari Ini","time":"16:05","starttime":"2023-11-10 16:05:00","endtime":"2023-11-10 17:30:00","play":"","status":0},{"seq":"6962004","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Primetime News","time":"17:30","starttime":"2023-11-10 17:30:00","endtime":"2023-11-10 20:05:00","play":"","status":0},{"seq":"6962005","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Top News","time":"20:05","starttime":"2023-11-10 20:05:00","endtime":"2023-11-10 21:05:00","play":"","status":0},{"seq":"6962006","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Editorial Malam","time":"21:05","starttime":"2023-11-10 21:05:00","endtime":"2023-11-10 21:30:00","play":"","status":0},{"seq":"6962007","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Visi Negarawan","time":"21:30","starttime":"2023-11-10 21:30:00","endtime":"2023-11-10 22:30:00","play":"","status":0},{"seq":"6962008","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Top News","time":"22:30","starttime":"2023-11-10 22:30:00","endtime":"2023-11-10 23:30:00","play":"","status":0},{"seq":"6962009","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Go Healthy","time":"23:30","starttime":"2023-11-10 23:30:00","endtime":"2023-11-10 23:59:50","play":"","status":0},{"seq":"6962010","dateNow":"2023-11-10 16:57:47","id":"6","name":"Metro TV","title":"Go Healthy","time":"23:59","starttime":"2023-11-10 23:59:50","endtime":"2023-11-10 23:59:59","play":"","status":0}],"sum_list":26} diff --git a/sites/dens.tv/__data__/no_content.json b/sites/dens.tv/__data__/no_content.json new file mode 100644 index 00000000..0184ed4f --- /dev/null +++ b/sites/dens.tv/__data__/no_content.json @@ -0,0 +1 @@ +{"response":201,"data":[],"sum_list":1} diff --git a/sites/dens.tv/dens.tv.channels.xml b/sites/dens.tv/dens.tv.channels.xml new file mode 100644 index 00000000..d3827a67 --- /dev/null +++ b/sites/dens.tv/dens.tv.channels.xml @@ -0,0 +1,58 @@ + + + Al Jazeera English + Quran TV + Sunna TV + Aniplus HD + ANTV + BTV + CCM (Celestial Classic MV) + CCTV-4 + Celestial Movies HD + Cinema World + CNA + CGTN Documentary + DAAI TV + DensFood Channel + DensLife & Style + DensLearning & Knowledge + DensPlay + DensShowBiz + DW-TV + Elshinta TV + FIGHT SPORTS HD + France 24 + HITS HD + HITS MOVIES + HorizonSports + JAK TV + Kompas TV + KIX HD + K-PLUS HD + Magna Channel + Metro TV + Motorvision+ + My Cinema + My Cinema Asia + My Cinema Europe + My Family Channel + My Kidz HD + NaDoo Commerce + NaDooKorean + NET. + NHK WORLD-JAPAN + RTV + ROCK Action + ROCK Entertainment HD + RodjaTV + Thrill + TRT World + TV5MONDE ASIE + TV5MONDE Style HD + tvN HD + tvN Movies HD + tvOne + TVRI + TVRI Sport + WION + diff --git a/sites/dens.tv/dens.tv.config.js b/sites/dens.tv/dens.tv.config.js new file mode 100644 index 00000000..7c12880d --- /dev/null +++ b/sites/dens.tv/dens.tv.config.js @@ -0,0 +1,33 @@ +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: 'dens.tv', + days: 2, + url: function ({ channel, date }) { + return `https://www.dens.tv/tvpage_octo/epgchannel2/${date.format('YYYY-MM-DD')}/${channel.site_id}` + }, + parser: function ({ content }) { + // parsing + const response = JSON.parse(content) + const programs = [] + + if(response.response !== undefined && response.response === 0 && response.data !== undefined && Array.isArray(response.data)){ + response.data.forEach(item => { + programs.push({ + title: item.title, + start: dayjs.tz(item.starttime, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta'), + stop: dayjs.tz(item.endtime, 'YYYY-MM-DD HH:mm:ss', 'Asia/Jakarta'), + }) + }) + } + + return programs + } +} diff --git a/sites/dens.tv/dens.tv.test.js b/sites/dens.tv/dens.tv.test.js new file mode 100644 index 00000000..8e80c392 --- /dev/null +++ b/sites/dens.tv/dens.tv.test.js @@ -0,0 +1,44 @@ +const { url, parser } = require('./dens.tv.config.js') +const fs = require('fs') +const path = require('path') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +dayjs.extend(utc) + +const date = dayjs.utc('2023-11-10', 'YYYY-MM-DD').startOf('d') +const channel = { site_id: '6', xmltv_id: 'MetroTV.id', lang: 'id' } + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe('https://www.dens.tv/tvpage_octo/epgchannel2/2023-11-10/6') +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json')) + let results = parser({ content }) + results = results.map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results.length).toBe(26) + + expect(results[0]).toMatchObject({ + start: '2023-11-09T17:00:00.000Z', + stop : '2023-11-09T17:05:00.000Z', + title: 'Follow Up' + }) + + expect(results[12]).toMatchObject({ + start: '2023-11-10T04:05:00.000Z', + stop : '2023-11-10T06:05:00.000Z', + title: 'Metro Siang' + }) +}) + +it('can handle empty guide', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/no_content.json')) + const results = parser({ content }) + + expect(results).toMatchObject([]) +})