From ac914c7081875d6c9f9056546eea692a98db06af Mon Sep 17 00:00:00 2001 From: Toha Date: Sun, 15 Dec 2024 18:50:41 +0700 Subject: [PATCH] Update musor.tv guide. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test: ```sh npm test -- musor.tv > test > run-script-os musor.tv > test:win32 > SET "TZ=Pacific/Nauru" && npx jest --runInBand musor.tv PASS sites/musor.tv/musor.tv.test.js (7.206 s) √ can generate valid url (14 ms) √ can generate valid url for today √ can parse response (372 ms) √ can handle empty guide (2 ms) Test Suites: 1 passed, 1 total Tests: 4 passed, 4 total Snapshots: 0 total Time: 7.437 s Ran all test suites matching /musor.tv/i. ``` Grab: ```sh npm run grab -- --site=musor.tv > grab > npx tsx scripts/commands/epg/grab.ts --site=musor.tv starting... config: output: guide.xml maxConnections: 1 gzip: false site: musor.tv loading channels... found 18 channel(s) run #1: [1/36] musor.tv (en) - ClubMTVEurope.uk - Dec 15, 2024 (11 programs) [2/36] musor.tv (en) - ClubMTVEurope.uk - Dec 16, 2024 (10 programs) [3/36] musor.tv (en) - Travelxp.in - Dec 16, 2024 (49 programs) [4/36] musor.tv (en) - Travelxp.in - Dec 15, 2024 (61 programs) [5/36] musor.tv (en) - TraceUrban.fr - Dec 16, 2024 (10 programs) [6/36] musor.tv (en) - TraceUrban.fr - Dec 15, 2024 (11 programs) [7/36] musor.tv (en) - TraceSportStars.fr - Dec 16, 2024 (48 programs) [8/36] musor.tv (en) - TraceSportStars.fr - Dec 15, 2024 (60 programs) [9/36] musor.tv (en) - TotalDanceTV.hu - Dec 16, 2024 (0 programs) ERR: socket hang up [10/36] musor.tv (en) - TotalDanceTV.hu - Dec 15, 2024 (30 programs) [11/36] musor.tv (en) - StingrayCMusic.ca - Dec 16, 2024 (11 programs) [12/36] musor.tv (en) - StingrayCMusic.ca - Dec 15, 2024 (12 programs) [13/36] musor.tv (en) - StingrayClassica.ca - Dec 16, 2024 (31 programs) [14/36] musor.tv (en) - StingrayClassica.ca - Dec 15, 2024 (34 programs) [15/36] musor.tv (en) - SkyNewsInternational.uk - Dec 16, 2024 (42 programs) [16/36] musor.tv (en) - SkyNewsInternational.uk - Dec 15, 2024 (47 programs) [17/36] musor.tv (en) - MTVLive.uk - Dec 16, 2024 (26 programs) [18/36] musor.tv (en) - MTVLive.uk - Dec 15, 2024 (31 programs) [19/36] musor.tv (en) - MTVHitsEurope.uk - Dec 16, 2024 (13 programs) [20/36] musor.tv (en) - MTVHitsEurope.uk - Dec 15, 2024 (13 programs) [21/36] musor.tv (en) - MTVGlobal.uk - Dec 16, 2024 (34 programs) [22/36] musor.tv (en) - MTVGlobal.uk - Dec 15, 2024 (38 programs) [23/36] musor.tv (en) - MTV90s.uk - Dec 16, 2024 (10 programs) [24/36] musor.tv (en) - MTV90s.uk - Dec 15, 2024 (10 programs) [25/36] musor.tv (en) - MTV00s.uk - Dec 16, 2024 (8 programs) [26/36] musor.tv (en) - MTV00s.uk - Dec 15, 2024 (11 programs) [27/36] musor.tv (en) - FilmBoxArthouse.nl - Dec 16, 2024 (21 programs) [28/36] musor.tv (en) - FilmBoxArthouse.nl - Dec 15, 2024 (27 programs) [29/36] musor.tv (en) - FightBox.nl - Dec 16, 2024 (24 programs) [30/36] musor.tv (en) - FightBox.nl - Dec 15, 2024 (33 programs) [31/36] musor.tv (en) - ExtremeSportsChannel.nl - Dec 16, 2024 (20 programs) [32/36] musor.tv (en) - ExtremeSportsChannel.nl - Dec 15, 2024 (25 programs) [33/36] musor.tv (en) - EnglishClubTV.uk - Dec 16, 2024 (134 programs) [34/36] musor.tv (en) - EnglishClubTV.uk - Dec 15, 2024 (129 programs) [35/36] musor.tv (en) - EEurope.nl - Dec 16, 2024 (26 programs) [36/36] musor.tv (en) - EEurope.nl - Dec 15, 2024 (32 programs) saving to "guide.xml"... done in 00h 02m 35s ``` Signed-off-by: Toha --- sites/musor.tv/musor.tv.channels.xml | 34 ++++++++++++++++++---------- sites/musor.tv/musor.tv.config.js | 32 +++++++++++++++----------- sites/musor.tv/musor.tv.test.js | 13 ++++++----- 3 files changed, 48 insertions(+), 31 deletions(-) diff --git a/sites/musor.tv/musor.tv.channels.xml b/sites/musor.tv/musor.tv.channels.xml index 42800ba4..9f2de59c 100644 --- a/sites/musor.tv/musor.tv.channels.xml +++ b/sites/musor.tv/musor.tv.channels.xml @@ -22,25 +22,38 @@ Cartoonito Dankó Rádió Debrecen TV - Discovery Turbo Xtra (DTX) (HD) Duck TV HD Duna World Rádió + Első Kerület TV HD Fashion TV - Filmbox + Filmbox (HD) + Gyöngyös TV HD HBO (HD) History (HD) Jazz TV (HD) + Kölyök Klub + M3 (online) Magyar Katolikus Rádió + Mozi Klub Kossuth Rádió Petőfi Rádió Bartók Rádió Nemzetiségi Adások + Nemzeti Sport Rádió MTV Hungary Nickelodeon HD + PestBuda TV HD RTL HÁROM (HD) + RTL Otthon TV1000 Russian Kino + Sorozat Klub + Szakcsi Rádió Travel XP 4K - Viasat Film + Travel XP 4K + TV2 Klub + Vásárhelyi Televízió + Veszprém TV HD + Viasat Film (HD) 7.TV AMC (HD) Animal Planet (HD) @@ -55,22 +68,19 @@ BBC Earth (HD) BBC World News Cartoon Network - CBS Reality Cinemax 2 (HD) Cinemax (HD) CNBC CNN Comedy Central (HD) - Comedy Central Family Cool (HD) D1 Televízió Da Vinci (HD) Dikh TV (HD) Direct One TV (HD) Discovery Channel (HD) - Discovery Science (HD) Disney Channel - Docubox HD + Docubox (HD) Duck TV Duna TV (HD) Duna World (HD) @@ -80,10 +90,10 @@ Eurosport 1 (HD) Eurosport 2 (HD) Eurosport 4K + Eurosport 4K EWTN / Bonum TV (HD) Fashion TV HD Fehérvár TV - FEM3 Film 4 (HD) Filmbox Extra HD Filmbox Family @@ -95,8 +105,9 @@ Fit HD Food Network (HD) Funbox UltraHD 4K + Funbox UltraHD 4K Galaxy 4 (HD) - Gametoon HD + Gametoon (HD) Hatoscsatorna HBO 2 (HD) HBO 3 (HD) @@ -112,19 +123,19 @@ Kölcsey TV Life TV (HD) Love Nature (HD / 4K) + Love Nature (HD / 4K) M1 (HD) M2 / Petőfi (HD) M4 Sport (HD) M4 Sport+ (HD) M5 (HD) - Magyar Mozi TV + Magyar Mozi TV (HD) Match4 (HD) Max 4 Mezzo Mezzo Live HD Minimax Mozi+ (HD) - Mozi Klub Moziverzum (HD) MTV 80s Muzsika TV @@ -144,7 +155,6 @@ RTL KETTŐ (HD) Sláger TV (HD) Sorozat+ - Sorozat Klub Spektrum (HD) Spektrum Home (HD) Spíler1 TV (HD) diff --git a/sites/musor.tv/musor.tv.config.js b/sites/musor.tv/musor.tv.config.js index d8e75543..5900d6f6 100644 --- a/sites/musor.tv/musor.tv.config.js +++ b/sites/musor.tv/musor.tv.config.js @@ -1,15 +1,21 @@ const cheerio = require('cheerio') -const dayjs = require('dayjs') const axios = require('axios') +const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(utc) dayjs.extend(customParseFormat) +const headers = { + 'User-Agent': + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0', +} + module.exports = { site: 'musor.tv', days: 2, + request: { headers }, url({ channel, date }) { return dayjs.utc().isSame(date, 'd') ? `https://musor.tv/mai/tvmusor/${channel.site_id}` @@ -17,10 +23,10 @@ module.exports = { }, parser({ content }) { const programs = [] - const items = parseItems(content) + const [$, items] = parseItems(content) items.forEach(item => { const prev = programs[programs.length - 1] - const $item = cheerio.load(item) + const $item = $(item) let start = parseStart($item) if (prev) prev.stop = start const stop = start.add(30, 'm') @@ -37,22 +43,22 @@ module.exports = { }, async channels() { const html = await axios - .get('https://musor.tv/') + .get('https://musor.tv/', { headers }) .then(r => r.data) - .catch(console.log) + .catch(console.error) const $ = cheerio.load(html) const channels = $('body > div.big_content > div > nav > table > tbody > tr > td > a').toArray() return channels .map(item => { - const $item = cheerio.load(item) - const url = $item('*').attr('href') + const $item = $(item) + const url = $item.attr('href') if (!url.startsWith('//musor.tv/mai/tvmusor/')) return null const site_id = url.replace('//musor.tv/mai/tvmusor/', '') return { lang: 'hu', site_id, - name: $item('*').text() + name: $item.text() } }) .filter(i => i) @@ -60,21 +66,21 @@ module.exports = { } function parseImage($item) { - const imgSrc = $item('div.smartpe_screenshot > img').attr('src') + const imgSrc = $item.find('div.smartpe_screenshot > img').attr('src') return imgSrc ? `https:${imgSrc}` : null } function parseTitle($item) { - return $item('div:nth-child(2) > div > h3 > a').text().trim() + return $item.find('div:nth-child(2) > div > h3 > a').text().trim() } function parseDescription($item) { - return $item('div:nth-child(5) > div > div').text().trim() + return $item.find('div:nth-child(5) > div > div').text().trim() } function parseStart($item) { - let datetime = $item('div:nth-child(1) > div > div > div > div > time').attr('content') + let datetime = $item.find('div:nth-child(1) > div > div > div > div > time').attr('content') if (!datetime) return null return dayjs.utc(datetime.replace('GMT', 'T'), 'YYYY-MM-DDTHH:mm:ss') @@ -83,5 +89,5 @@ function parseStart($item) { function parseItems(content) { const $ = cheerio.load(content) - return $('div.multicolumndayprogarea > div.smartpe_progentry').toArray() + return [$, $('div.multicolumndayprogarea > div.smartpe_progentry').toArray()] } diff --git a/sites/musor.tv/musor.tv.test.js b/sites/musor.tv/musor.tv.test.js index 305f17fe..42ed2d4b 100644 --- a/sites/musor.tv/musor.tv.test.js +++ b/sites/musor.tv/musor.tv.test.js @@ -4,6 +4,7 @@ const path = require('path') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') + dayjs.extend(customParseFormat) dayjs.extend(utc) @@ -25,12 +26,12 @@ it('can generate valid url for today', () => { it('can parse response', () => { const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html')) - let results = parser({ content, date }) - results = results.map(p => { - p.start = p.start.toJSON() - p.stop = p.stop.toJSON() - return p - }) + const results = parser({ content, date }) + .map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) expect(results[0]).toMatchObject({ start: '2022-11-19T23:00:00.000Z',