diff --git a/.github/workflows/tv.yettel.hu.yml b/.github/workflows/tv.yettel.hu.yml new file mode 100644 index 00000000..f6c540d0 --- /dev/null +++ b/.github/workflows/tv.yettel.hu.yml @@ -0,0 +1,17 @@ +name: tv.yettel.hu +on: + schedule: + - cron: '0 0 * * *' + 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/tv.yettel.hu/tv.yettel.hu.config.js b/sites/tv.yettel.hu/tv.yettel.hu.config.js new file mode 100644 index 00000000..7d2447ec --- /dev/null +++ b/sites/tv.yettel.hu/tv.yettel.hu.config.js @@ -0,0 +1,68 @@ +const axios = require('axios') +const dayjs = require('dayjs') + +module.exports = { + site: 'tv.yettel.hu', + url: function ({ channel, date }) { + return `https://dev.mytvback.com/api/19/default/hu-HU/schedules?livechannelpids=${ + channel.site_id + }&includeImages=cover%3A100%3A144&filterAvailability=false&startTime=${date.unix()}&endTime=${date + .add(1, 'd') + .unix()}` + }, + parser: function ({ content }) { + let programs = [] + const items = parseItems(content) + items.forEach(item => { + programs.push({ + title: item.Title, + description: item.ShortDescription, + icon: parseIcon(item), + start: parseStart(item), + stop: parseStop(item) + }) + }) + + return programs + }, + async channels() { + const data = await axios + .get(`https://dev.mytvback.com/api/19/default/hu-HU/content/CHA_LIVE_MYTV2_HU/children`) + .then(r => r.data) + .catch(console.log) + + const channels = [] + for (let item of data.Content.List) { + channels.push({ + lang: 'hu', + site_id: item.Pid, + name: item.CallLetter + }) + } + + return channels + } +} + +function parseIcon(item) { + if (Array.isArray(item.Images.Cover) && item.Images.Cover.length) { + return item.Images.Cover[0].Url + } + + return null +} + +function parseStart(item) { + return dayjs.unix(item.Start) +} + +function parseStop(item) { + return dayjs.unix(item.End) +} + +function parseItems(content) { + const data = JSON.parse(content) + if (!data || !Array.isArray(data.Content)) return [] + + return data.Content +} diff --git a/sites/tv.yettel.hu/tv.yettel.hu.test.js b/sites/tv.yettel.hu/tv.yettel.hu.test.js new file mode 100644 index 00000000..fd2277b8 --- /dev/null +++ b/sites/tv.yettel.hu/tv.yettel.hu.test.js @@ -0,0 +1,83 @@ +// npm run channels:parse -- --config=./sites/tv.yettel.hu/tv.yettel.hu.config.js --output=./sites/tv.yettel.hu/tv.yettel.hu_hu.channels.xml +// npx epg-grabber --config=sites/tv.yettel.hu/tv.yettel.hu.config.js --channels=sites/tv.yettel.hu/tv.yettel.hu_hu.channels.xml --output=guide.xml --days=2 + +const { parser, url } = require('./tv.yettel.hu.config.js') +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-06-17', 'YYYY-MM-DD').startOf('d') +const channel = { + site_id: 'LCH1', + xmltv_id: 'M1.hu' +} + +it('can generate valid url', () => { + expect(url({ channel, date })).toBe( + 'https://dev.mytvback.com/api/19/default/hu-HU/schedules?livechannelpids=LCH1&includeImages=cover%3A100%3A144&filterAvailability=false&startTime=1655424000&endTime=1655510400' + ) +}) + +it('can parse response', () => { + const content = `{ + "Content": [ + { + "AgeRatingPid": "", + "catchup_days": "0", + "AvailableUntil": 1655445600, + "Description": "", + "End": 1655445600, + "LiveChannelPid": "LCH1", + "ch_id": "1", + "LiveProgramPid": "LEP3906574", + "pr_id": "3906574", + "se_id": "13986", + "LiveSeriesPid": "LSE13986", + "Pid": "LSC17202373", + "id": "17202373", + "Rating": 0, + "RatingTotalVotes": 0, + "ShortDescription": "A Ma reggel az MTVA saját gyártású, minden hétköznap jelentkező reggeli politikai és közéleti témákkal foglalkozó műsora.", + "Start": 1655443980, + "Title": "Ma reggel", + "Year": 2022, + "GenrePids": [ + "GEN184" + ], + "ge_id": "184", + "IsCatchup": "1", + "ChannelIsCatchup": "0", + "Images": { + "Cover": [ + { + "Url": "https://static.mytvback.com/userfiles/c/0/c01d48a36b913a7afb0dcb5edba33849_thum_100x144.jpg" + } + ] + } + }]}` + const result = parser({ content }).map(p => { + p.start = p.start.toJSON() + p.stop = p.stop.toJSON() + return p + }) + + expect(result).toMatchObject([ + { + start: '2022-06-17T05:33:00.000Z', + stop: '2022-06-17T06:00:00.000Z', + title: 'Ma reggel', + description: + 'A Ma reggel az MTVA saját gyártású, minden hétköznap jelentkező reggeli politikai és közéleti témákkal foglalkozó műsora.', + icon: 'https://static.mytvback.com/userfiles/c/0/c01d48a36b913a7afb0dcb5edba33849_thum_100x144.jpg' + } + ]) +}) + +it('can handle empty guide', () => { + const result = parser({ + content: `{"Content":[],"HttpStatusCode":200,"StatusCode":0,"StatusMessage":"OK","Severity":1}` + }) + expect(result).toMatchObject([]) +}) diff --git a/sites/tv.yettel.hu/tv.yettel.hu_hu.channels.xml b/sites/tv.yettel.hu/tv.yettel.hu_hu.channels.xml new file mode 100644 index 00000000..b6556500 --- /dev/null +++ b/sites/tv.yettel.hu/tv.yettel.hu_hu.channels.xml @@ -0,0 +1,79 @@ + + + + AMC + Animal Planet + Arena4 + ATV + BBC Earth + BBC World News + Boomerang + Cartoon Network + CNN + Comedy Central Family + Comedy Central + Cool + Da Vinci + Discovery Channel + Discovery Science + Disney Channel + DTX + Duna + Duna World + Euronews + FEM3 + FilmCafe + Film+ + Food Network + Hír TV + Investigation Discovery + Izaura TV + JimJam + Jocky TV + LifeTv + M1 + M2 + M4 Sport + M5 + Minimax + Mozi+ + Moziverzum + MTV 00s + MTV 80s + MTV90s + MTV Hits + MTV Hungary + Muzsika TV + National Geographic + National Geographic Wild + Nickelodeon + Nick Junior + OzoneTv + Paramount Channel + Prime + RTL Gold + RTL II + RTL KLUB + RTL+ + Sorozat+ + Spektrum + Spektrum Home + Spíler1 TV + Spíler2 TV + Sport1 + Sport2 + Super TV2 + TeenNick + TLC + Travel Channel + TV2 + TV2 Comedy + TV2 Kids + TV2 Séf + TV Paprika + Viasat Explore + Viasat History + Viasat Nature + Zenebutik + +