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 Englishontvtonight.com122https://iptv-org.github.io/epg/guides/ontvtonight.com.guide.xml Frenchprogramme-tv.net266https://iptv-org.github.io/epg/guides/programme-tv.net.guide.xml + Greekcosmote.gr91https://iptv-org.github.io/epg/guides/cosmote.gr.guide.xml Italianguidatv.sky.it178https://iptv-org.github.io/epg/guides/guidatv.sky.it.guide.xml Italianmediaset.it16https://iptv-org.github.io/epg/guides/mediaset.it.guide.xml Polishprogramtv.onet.pl581https://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 @@ + + + + + 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 + } +}