diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml
index 8f607c64..19a55268 100644
--- a/.github/workflows/auto-update.yml
+++ b/.github/workflows/auto-update.yml
@@ -4,6 +4,21 @@ on:
schedule:
- cron: '0 0 * * *'
jobs:
+ cosmote_gr:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2.3.1
+ - name: Install Dependencies
+ run: npm install
+ - name: Run EPG Grabber
+ run: npx epg-grabber --config=sites/cosmote.gr.config.js
+ - name: Deploy to GitHub Pages
+ uses: JamesIves/github-pages-deploy-action@4.1.0
+ with:
+ branch: gh-pages
+ folder: .gh-pages
+ clean: false
programetv_ro:
runs-on: ubuntu-latest
steps:
diff --git a/README.md b/README.md
index 5b321018..fcb195f1 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,7 @@ To load a program guide, all you need to do is copy the link to one of the guide
English | ontvtonight.com | 122 | https://iptv-org.github.io/epg/guides/ontvtonight.com.guide.xml |
French | programme-tv.net | 266 | https://iptv-org.github.io/epg/guides/programme-tv.net.guide.xml |
+ Greek | cosmote.gr | 91 | https://iptv-org.github.io/epg/guides/cosmote.gr.guide.xml |
Italian | guidatv.sky.it | 178 | https://iptv-org.github.io/epg/guides/guidatv.sky.it.guide.xml |
Italian | mediaset.it | 16 | https://iptv-org.github.io/epg/guides/mediaset.it.guide.xml |
Polish | programtv.onet.pl | 581 | https://iptv-org.github.io/epg/guides/programtv.onet.pl.guide.xml |
diff --git a/sites/cosmote.gr.channels.xml b/sites/cosmote.gr.channels.xml
new file mode 100755
index 00000000..99f98d92
--- /dev/null
+++ b/sites/cosmote.gr.channels.xml
@@ -0,0 +1,96 @@
+
+
+
+ 4Ε
+ ANT1 TV HD
+ Action 24
+ Al Arabiya
+ Al Jazeera English
+ Alpha TV HD
+ Atlas TV
+ BBC Earth HD Greece
+ BBC World News Europe
+ BabyTV Europe
+ Bloomberg TV Europe
+ Blue Hustler Europe
+ Body in Balance Greece
+ CBS Reality Europe
+ CNBC Europe
+ CNN International Europe
+ Cosmote Cinema 1 HD
+ Cosmote Cinema 2 HD
+ Cosmote Cinema 3
+ Cosmote Cinema Oscars HD
+ Cosmote History HD
+ Cosmote Series HD
+ Cosmote Series Marathon
+ Cosmote Sport 1 HD
+ Cosmote Sport 2 HD
+ Cosmote Sport 3 HD
+ Cosmote Sport 4 HD
+ Cosmote Sport 5 HD
+ Cosmote Sport 6 HD
+ Cosmote Sport 7 HD
+ Cosmote Sport 8 HD
+ Cosmote Sport 9 HD
+ Cosmote Sport Highlights HD
+ Crime+Investigation UK
+ DW English
+ Disney Channel Middle East
+ Disney Junior Greece
+ E! HD Europe
+ EDGEsport HD
+ ENA Channel
+ ERT World
+ Epsilon TV
+ Euronews English
+ Euronews ελληνικά
+ Fashion TV HD Europe
+ Fox HD Greece
+ Fox Life HD Greece
+ France 24 English
+ France 24 Français
+ GINX eSports TV Greece
+ Hustler HD Europe
+ Luxe TV HD
+ MTV Europe
+ MTV Live HD
+ Mad TV
+ Mad Viral HD
+ Mega TV HD
+ Mezzo Live HD
+ Motorvision TV HD
+ Nat Geo Wild HD Europe
+ National Geographic HD Greece
+ Nautical Channel HD
+ Nickelodeon HD Greece
+ One Channel HD
+ Open Beyond HD
+ Outdoor Channel HD
+ Penthouse Gold
+ Private TV
+ RT
+ Sirina TV
+ Smile TV
+ Star TV HD
+ Star Κεντρικής Ελλάδας
+ Stingray CMusic
+ Stingray iConcerts
+ TCM HD Central & Eastern Europe
+ VH1 Europe
+ Viasat Explore HD East
+ Viasat History HD
+ Viasat Nature HD East
+ Village Cinemas HD
+ Αιγαίο TV
+ Βεργίνα TV
+ Βουλή
+ ΕΡΤ1 HD
+ ΕΡΤ2 HD
+ ΕΡΤ3 HD
+ Κρήτη TV
+ Μακεδονία TV HD
+ Νέα Τηλεόραση Κρήτης
+ ΣΚΑΪ HD
+
+
\ No newline at end of file
diff --git a/sites/cosmote.gr.config.js b/sites/cosmote.gr.config.js
new file mode 100644
index 00000000..cc35b877
--- /dev/null
+++ b/sites/cosmote.gr.config.js
@@ -0,0 +1,60 @@
+const urlParser = require('url')
+const jsdom = require('jsdom')
+const { JSDOM } = jsdom
+const dayjs = require('dayjs')
+const utc = require('dayjs/plugin/utc')
+const customParseFormat = require('dayjs/plugin/customParseFormat')
+
+dayjs.extend(utc)
+dayjs.extend(customParseFormat)
+
+module.exports = {
+ lang: 'el',
+ site: 'cosmote.gr',
+ channels: 'cosmote.gr.channels.xml',
+ output: '.gh-pages/guides/cosmote.gr.guide.xml',
+ url: function ({ date, channel }) {
+ return `https://www.cosmote.gr/cosmotetv/residential/program/epg/programchannel?p_p_id=channelprogram_WAR_OTETVportlet&p_p_lifecycle=0&_channelprogram_WAR_OTETVportlet_platform=IPTV&_channelprogram_WAR_OTETVportlet_date=${date.format(
+ 'DD-MM-YYYY'
+ )}&_channelprogram_WAR_OTETVportlet_articleTitleUrl=${channel.site_id}`
+ },
+ logo: function ({ content }) {
+ const dom = new JSDOM(content)
+ const img = dom.window.document.querySelector('img.channel_program-banner')
+
+ return img ? 'https://www.cosmote.gr' + img.src : null
+ },
+ parser: function ({ date, content }) {
+ const dom = new JSDOM(content)
+ const items = dom.window.document.querySelectorAll(
+ '#_channelprogram_WAR_OTETVportlet_programs > tr.visible-xs'
+ )
+ let programs = []
+ items.forEach(item => {
+ const title = (item.querySelector('a') || { textContent: '' }).textContent
+ const meta = (item.querySelector('td') || { innerHTML: '' }).innerHTML
+ const startTime = (item.querySelector('.start-time') || { textContent: '' }).textContent
+ const endTime = (item.querySelector('.end-time') || { textContent: '' }).textContent
+ const category = meta.match(/\| (.+)
/)[1]
+ const start = dayjs
+ .utc(startTime, 'HH:mm')
+ .set('D', date.get('D'))
+ .set('M', date.get('M'))
+ .set('y', date.get('y'))
+ const stop = dayjs
+ .utc(endTime, 'HH:mm')
+ .set('D', date.get('D'))
+ .set('M', date.get('M'))
+ .set('y', date.get('y'))
+
+ programs.push({
+ title,
+ category,
+ start,
+ stop
+ })
+ })
+
+ return programs
+ }
+}