diff --git a/.github/workflows/novasports.gr.yml b/.github/workflows/novasports.gr.yml new file mode 100644 index 00000000..f092f86d --- /dev/null +++ b/.github/workflows/novasports.gr.yml @@ -0,0 +1,17 @@ +name: novasports.gr +on: + schedule: + - cron: '0 3 * * *' + workflow_dispatch: + workflow_run: + workflows: [_trigger] + types: + - completed +jobs: + load: + uses: ./.github/workflows/_load.yml + with: + site: ${{github.workflow}} + secrets: + APP_ID: ${{ secrets.APP_ID }} + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} diff --git a/sites/novasports.gr/__data__/content.html b/sites/novasports.gr/__data__/content.html new file mode 100644 index 00000000..ed8272ff --- /dev/null +++ b/sites/novasports.gr/__data__/content.html @@ -0,0 +1,3507 @@ +
+ +
+
+
+
+
+
+
+ + + + +
+
+ + + + +
+
+
+
+ +
+
+
+ ΑΓΓΛΙΑ - Premier League - ΠΟΔΟΣΦΑΙΡΟ +
+
+ +
+ +
+
+ 14:30
+
+
+ Λέστερ - Μάντσεστερ Σίτι (Ζ)
+
+ Novasports Premier League + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 17:00
+
+
+ Μπράιτον - Τσέλσι (Ζ)
+
+ Novasports Premier League + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 17:00
+
+
+ Μπόρνμουθ - Τότεναμ (Ζ)
+
+ Novasports2HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 17:00
+
+
+ Νιούκαστλ - Άστον Βίλα (Ζ)
+
+ Novasports4HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 17:00
+
+
+ Μπρέντφορντ - Γουλβς (Ζ)
+
+ Novasports5HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 17:00
+
+
+ Κρίσταλ Πάλας - Σαουθάμπτον (Ζ)
+
+ ΝovasportsStart + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 19:30
+
+
+ Φούλαμ - Έβερτον (Ζ)
+
+ Novasports Premier League + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 21:45
+
+
+ Λίβερπουλ - Λιντς (Ζ)
+
+ Novasports Premier League + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 23:45
+
+
+ Λέστερ - Μάντσεστερ Σίτι
+
+ Novasports Premier League + +
+
+
+ + +
+ + +
+
+
+
+ ΕΛΛΑΔΑ - Super League 1 - ΠΟΔΟΣΦΑΙΡΟ +
+
+ +
+ +
+
+ 08:15
+
+
+ Ατρόμητος - Βόλος
+
+ Novasports Prime + +
+
+
+ + +
+ + + +
+ +
+
+ 10:30
+
+
+ Λεβαδειακός - ΑΕΚ
+
+ Novasports Prime + +
+
+
+ + +
+ + + +
+ +
+
+ 12:45
+
+
+ ΠΑΟΚ - Αστέρας Τρίπολης
+
+ Novasports Prime + +
+
+
+ + +
+ + + +
+ +
+
+ 01:45
+
+
+ ΠΑΟΚ - Αστέρας Τρίπολης
+
+ Novasports Prime + +
+
+
+ + +
+ + +
+
+
+
+ ΙΣΠΑΝΙΑ - La Liga - ΠΟΔΟΣΦΑΙΡΟ +
+
+ +
+ +
+
+ 07:00
+
+
+ Εσπανιόλ - Έλτσε
+
+ Novasports1HD + +
+
+
+ + +
+ + + +
+ +
+
+ 09:00
+
+
+ Βαγιαδολίδ - Ρεάλ Σοσιεδάδ
+
+ Novasports1HD + +
+
+
+ + +
+ + + +
+ +
+
+ 11:00
+
+
+ Μπαρτσελόνα - Αθλέτικ Μπιλμπάο
+
+ Novasports1HD + +
+
+
+ + +
+ + + +
+ +
+
+ 13:00
+
+
+ Μαγιόρκα - Εσπανιόλ
+
+ Novasports1HD + +
+
+
+ + +
+ + + +
+ +
+
+ 15:00
+
+
+ Αλμερία - Θέλτα (Ζ)
+
+ Novasports1HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 17:15
+
+
+ Κάδιθ - Ατλέτικο Μαδρίτης (Ζ)
+
+ Novasports1HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 19:30
+
+
+ Σεβίλλη - Βαγιεκάνο (Ζ)
+
+ Novasports1HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 21:30
+
+
+ Ισπανικό Πρωτάθλημα Ποδοσφαίρου
+
+ Novasports1HD + +
+
+
+ + +
+ + + +
+ +
+
+ 22:00
+
+
+ Βαλένθια - Μπαρτσελόνα (Ζ)
+
+ Novasports1HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 00:00
+
+
+ Αλμερία - Θέλτα
+
+ Novasports1HD + +
+
+
+ + +
+ + + +
+ +
+
+ 02:00
+
+
+ Κάδιθ - Ατλέτικο Μαδρίτης
+
+ Novasports1HD + +
+
+
+ + +
+ + + +
+ +
+
+ 03:00
+
+
+ Ισπανικό Πρωτάθλημα Ποδοσφαίρου
+
+ Novasports1HD + +
+
+
+ + +
+ + +
+
+
+
+ ΓΕΡΜΑΝΙΑ - Bundesliga - ΠΟΔΟΣΦΑΙΡΟ +
+
+ +
+ +
+
+ 08:00
+
+
+ Βέρντερ Βρέμης - Χέρτα Βερολίνου
+
+ Novasports2HD + +
+
+
+ + +
+ + + +
+ +
+
+ 12:00
+
+
+ Φράιμπουργκ - Βέρντερ Βρέμης
+
+ Novasports3HD + +
+
+
+ + +
+ + + +
+ +
+
+ 16:30
+
+
+ Μπάγερν Μονάχου - Μάιντς (Ζ)
+
+ Novasports3HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 16:30
+
+
+ Στουτγκάρδη - Άουγκσμπουργκ (Ζ)
+
+ ΝovasportsNews + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 16:30
+
+
+ Βόλφσμπουργκ - Μπόχουμ (Ζ)
+
+ Novasports Extra2 + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 16:30
+
+
+ Λειψία - Λεβερκούζεν (Ζ)
+
+ Novasports6HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 18:30
+
+
+ Βέρντερ Βρέμης - Χέρτα Βερολίνου
+
+ Novasports3HD + +
+
+
+ + +
+ + + +
+ +
+
+ 19:00
+
+
+ Γερμανικό Πρωτάθλημα Ποδοσφαίρου
+
+ Novasports2HD + +
+
+
+ + +
+ + + +
+ +
+
+ 19:30
+
+
+ Άιντραχτ Φρανκφούρτης - Ντόρτμουντ (Ζ)
+
+ Novasports Prime + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 20:30
+
+
+ Γερμανικό Πρωτάθλημα Ποδοσφαίρου
+
+ Novasports3HD + +
+
+
+ + +
+ + + +
+ +
+
+ 21:45
+
+
+ Λειψία - Λεβερκούζεν
+
+ ΝovasportsStart + +
+
+
+ + +
+ + + +
+ +
+
+ 23:30
+
+
+ Μπάγερν Μονάχου - Μάιντς
+
+ Novasports3HD + +
+
+
+ + +
+ + + +
+ +
+
+ 23:45
+
+
+ Άιντραχτ Φρανκφούρτης - Ντόρτμουντ
+
+ Novasports Prime + +
+
+
+ + +
+ + + +
+ +
+
+ 02:00
+
+
+ Βόλφσμπουργκ - Μπόχουμ
+
+ ΝovasportsStart + +
+
+
+ + +
+ + + +
+ +
+
+ 03:00
+
+
+ Στουτγκάρδη - Άουγκσμπουργκ
+
+ Novasports2HD + +
+
+
+ + +
+ + +
+
+
+
+ ΓΑΛΛΙΑ - Ligue 1 - ΠΟΔΟΣΦΑΙΡΟ +
+
+ +
+ +
+
+ 15:00
+
+
+ Λανς - Τουλούζ
+
+ Novasports2HD + +
+
+
+ + +
+ + + +
+ +
+
+ 18:00
+
+
+ Παρί Σεν Ζερμέν - Τρουά (Ζ)
+
+ Novasports Εxtra1 + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 22:00
+
+
+ Στρασμπούρ - Μαρσέιγ (Ζ)
+
+ Novasports2HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 00:00
+
+
+ Παρί Σεν Ζερμέν - Τρουά
+
+ Novasports2HD + +
+
+
+ + +
+ + +
+
+
+
+ ΒΕΛΓΙΟ - Pro League - ΠΟΔΟΣΦΑΙΡΟ +
+
+ +
+ +
+
+ 13:00
+
+
+ Γκενκ - Μαλίν
+
+ Novasports2HD + +
+
+
+ + +
+ + + +
+ +
+
+ 20:00
+
+
+ Γκενκ - Μαλίν
+
+ Novasports2HD + +
+
+
+ + +
+ + + +
+ +
+
+ 02:00
+
+
+ Γκενκ - Μαλίν
+
+ Novasports2HD + +
+
+
+ + +
+ + + +
+ +
+
+ 05:00
+
+
+ Γκενκ - Μαλίν
+
+ Novasports2HD + +
+
+
+ + +
+ + +
+
+
+
+ ΔΙΕΘΝΕΙΣ - Euroleague - ΜΠΑΣΚΕΤ +
+
+ +
+ +
+
+ 12:00
+
+
+ Βαλένθια - Αλμπα Βερολίνου
+
+ Novasports5HD + +
+
+
+ + +
+ + + +
+ +
+
+ 15:00
+
+
+ Ρεάλ Μαδρίτης - Βίρτους Μπολόνια
+
+ Novasports4HD + +
+
+
+ + +
+ + + +
+ +
+
+ 15:00
+
+
+ Μπαρτσελόνα - Αρμάνι Μιλάνο
+
+ Novasports5HD + +
+
+
+ + +
+ + + +
+ +
+
+ 19:00
+
+
+ Βιλερμπάν - Μπασκόνια
+
+ Novasports4HD + +
+
+
+ + +
+ + + +
+ +
+
+ 21:00
+
+
+ Παρτίζαν - Ζάλγκιρις Κάουνας
+
+ Novasports4HD + +
+
+
+ + +
+ + + +
+ +
+
+ 21:00
+
+
+ Αναντολού Εφές - Φενέρμπαχτσε
+
+ Novasports5HD + +
+
+
+ + +
+ + + +
+ +
+
+ 23:00
+
+
+ Ερυθρός Αστέρας - Μπάγερν Μονάχου
+
+ Novasports4HD + +
+
+
+ + +
+ + +
+
+
+
+ ΓΕΡΜΑΝΙΑ - 2. Bundesliga - ΠΟΔΟΣΦΑΙΡΟ +
+
+ +
+ +
+
+ 14:00
+
+
+ Γκρόιτερ Φιρτ - Αρμίνια Μπίλεφελντ
+
+ Novasports3HD + +
+
+
+ + +
+ + + +
+ +
+
+ 21:30
+
+
+ Ζανκτ Πάουλι - Ντάρμσταντ (Ζ)
+
+ Novasports3HD + + + LIVE + +
+
+
+ + +
+ + + +
+ +
+
+ 00:15
+
+
+ Γκρόιτερ Φιρτ - Αρμίνια Μπίλεφελντ
+
+ ΝovasportsStart + +
+
+
+ + +
+ + +
+
+
+
+ ΔΙΕΘΝΕΙΣ - Eurocup - ΜΠΑΣΚΕΤ +
+
+ +
+ +
+
+ 07:00
+
+
+ Γκραν Κανάρια - Σλασκ Βρότσλαβ
+
+ ΝovasportsStart + +
+
+
+ + +
+ + + +
+ +
+
+ 12:00
+
+
+ Ουλμ - Μπρέσια
+
+ Novasports4HD + +
+
+
+ + +
+ + + +
+ +
+
+ 19:00
+
+
+ Τσεντεβίτα Ολίμπια - Μπανταλόνα
+
+ Novasports5HD + +
+
+
+ + +
+ + + +
+ +
+
+ 23:00
+
+
+ Τρέντο - Παρί
+
+ Novasports5HD + +
+
+
+ + +
+ + +
+
+
+ + +
+
+
+
+ +
+
\ No newline at end of file diff --git a/sites/novasports.gr/__data__/no_content.html b/sites/novasports.gr/__data__/no_content.html new file mode 100644 index 00000000..451ffd76 --- /dev/null +++ b/sites/novasports.gr/__data__/no_content.html @@ -0,0 +1,139 @@ + + + + YLE TV1 TV-ohjelmat sunnuntaina 29.10.2023 - Telsu.fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ReseptitVaihtoautotHoroskooppiTietovisatViihdeBlogitSanakirja
+ + + +
+ +
+ + + + + +
TV-ohjelmat tänään

Kanavan Yle TV1 ohjelmatiedot sunnuntaina 29.10.2023

Näytä tiivistettynä
+
+
+
+
+
+ +
+


Oops, tältä ajankohdalta ei löydy ohjelmatietoja :(
\ No newline at end of file diff --git a/sites/novasports.gr/novasports.gr.config.js b/sites/novasports.gr/novasports.gr.config.js new file mode 100644 index 00000000..653751b3 --- /dev/null +++ b/sites/novasports.gr/novasports.gr.config.js @@ -0,0 +1,86 @@ +const axios = require('axios') +const cheerio = require('cheerio') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const timezone = require('dayjs/plugin/timezone') + +dayjs.extend(utc) +dayjs.extend(timezone) + +module.exports = { + site: 'novasports.gr', + url: function ({ date, channel }) { + return `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=${date.format( + 'YYYY-MM-DD' + )}` + }, + parser: function ({ content, channel, date }) { + let programs = [] + const items = parseItems(content, channel) + items.forEach(item => { + const $item = cheerio.load(item) + const prev = programs[programs.length - 1] + let start = parseStart($item, date) + let stop = start.add(30, 'm') + if (prev) { + if (start.isBefore(prev.start)) { + start = start.add(1, 'd') + stop = stop.add(1, 'd') + } + prev.stop = start + } + programs.push({ + title: parseTitle($item), + description: parseDescription($item), + start, + stop + }) + }) + + return programs + }, + async channels() { + const html = await axios + .get( + `https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=2022-10-29` + ) + .then(r => r.data) + .catch(console.log) + const $ = cheerio.load(html) + const items = $( + `#mc-broadcast-content:nth-child(2) > div > #channelist-slider > div.channelist-wrapper.slider-wrapper.content > div > div` + ).toArray() + return items.map(item => { + const name = $(item).find('.channel').text().trim() + + return { + lang: 'el', + site_id: name, + name + } + }) + } +} + +function parseTitle($item) { + return $item('.title').text().trim() +} + +function parseDescription($item) { + return $item('.subtitle').text().trim() +} + +function parseStart($item, date) { + const timeString = $item('.time').text().trim() + + return dayjs.tz(`${date.format('YYYY-MM-DD')} ${timeString}`, 'YYYY-MM-DD HH:mm', 'Europe/Athens') +} + +function parseItems(content, channel) { + const $ = cheerio.load(content) + const $channelElement = $( + `#mc-broadcast-content:nth-child(2) > div > #channelist-slider > div.channelist-wrapper.slider-wrapper.content > div > div:contains("${channel.site_id}")` + ) + + return $channelElement.find('.channel-program > div').toArray() +} diff --git a/sites/novasports.gr/novasports.gr.test.js b/sites/novasports.gr/novasports.gr.test.js new file mode 100644 index 00000000..cbaafe31 --- /dev/null +++ b/sites/novasports.gr/novasports.gr.test.js @@ -0,0 +1,49 @@ +// npm run channels:parse -- --config=./sites/novasports.gr/novasports.gr.config.js --output=./sites/novasports.gr/novasports.gr_gr.channels.xml +// npx epg-grabber --config=sites/novasports.gr/novasports.gr.config.js --channels=sites/novasports.gr/novasports.gr_gr.channels.xml --output=guide.xml --days=2 + +const { parser, url } = require('./novasports.gr.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') +dayjs.extend(customParseFormat) +dayjs.extend(utc) + +const date = dayjs.utc('2022-10-29', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: 'Novasports Premier League', + xmltv_id: 'NovasportsPremierLeague.gr' +} + +it('can generate valid url', () => { + expect(url({ date })).toBe( + 'https://www.novasports.gr/wp-admin/admin-ajax.php?action=nova_get_template&template=tv-program/broadcast&dt=2022-10-29' + ) +}) + +it('can parse response', () => { + const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html')) + const results = parser({ content, channel, date }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(results[0]).toMatchObject({ + start: '2022-10-29T07:00:00.000Z', + stop: '2022-10-29T07:30:00.000Z', + title: 'Classic Match', + description: 'Τσέλσι - Μάντσεστερ Γ. (1999/00)' + }) +}) + +it('can handle empty guide', () => { + const results = parser({ + content: fs.readFileSync(path.resolve(__dirname, '__data__/no_content.html')), + channel, + date + }) + + expect(results).toMatchObject([]) +}) diff --git a/sites/novasports.gr/novasports.gr_gr.channels.xml b/sites/novasports.gr/novasports.gr_gr.channels.xml new file mode 100644 index 00000000..7d47afb6 --- /dev/null +++ b/sites/novasports.gr/novasports.gr_gr.channels.xml @@ -0,0 +1,21 @@ + + + + Eurosport 1 HD + Eurosport 2 HD + Novasports1HD + Novasports2HD + Novasports3HD + Novasports4HD + Novasports5HD + Novasports6HD + Novasports Εxtra1 + Novasports Extra2 + Novasports Extra3 + Novasports Extra4 + ΝovasportsNews + Novasports Premier League + Novasports Prime + ΝovasportsStart + +