Merge pull request #1230 from iptv-org/add-telkku.com

Add guide from telkku.com
This commit is contained in:
Aleksandr Statciuk 2022-10-29 01:47:12 +03:00 committed by GitHub
commit bddf9e909f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 240 additions and 0 deletions

17
.github/workflows/telkku.com.yml vendored Normal file
View file

@ -0,0 +1,17 @@
name: telkku.com
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 }}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
{"serverTime":"2022-10-29T01:08:36.966+03:00","response":{"offeringConstructedFor":{"periodStart":"2023-10-29T00:00:00.000+03:00","periodEnd":"2023-10-29T23:00:00.000+02:00"},"offeringConstructedAt":"2022-10-29T01:08:36.966+03:00","publicationsByChannel":[{"channel":{"id":"yle-tv1","name":"Yle TV1","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/yle-tv1.jpg","liveStreamUrl":"https://areena.yle.fi/tv/suorat/yle-tv1"},"publications":[]},{"channel":{"id":"yle-tv2","name":"Yle TV2","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/yle-tv2.jpg","liveStreamUrl":"https://areena.yle.fi/tv/suorat/yle-tv2"},"publications":[]},{"channel":{"id":"mtv3","name":"MTV3","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/MTV3_logo_red.png"},"publications":[]},{"channel":{"id":"nelonen","name":"Nelonen","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/nelonen.png"},"publications":[]},{"channel":{"id":"yle-teema-fem","name":"Yle Teema Fem","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/yle-teema-fem.png","liveStreamUrl":"http://areena.yle.fi/tv/suorat/yle-teema-fem"},"publications":[]},{"channel":{"id":"sub","name":"Sub","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/sub.jpg"},"publications":[]},{"channel":{"id":"tv5","name":"TV5","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/TV5Logo_Midnight_Blue.png"},"publications":[]},{"channel":{"id":"liv","name":"Liv","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/liv.jpg"},"publications":[]},{"channel":{"id":"jim","name":"Jim","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/jim_uusi.jpg"},"publications":[]},{"channel":{"id":"kutonen","name":"Kutonen","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/kutonen.jpg"},"publications":[]},{"channel":{"id":"tlc-finland","name":"TLC","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/tlc-finland.jpg"},"publications":[]},{"channel":{"id":"fox","name":"Fox","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/fox.jpg"},"publications":[]},{"channel":{"id":"ava","name":"Ava","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/ava.jpg"},"publications":[]},{"channel":{"id":"hero","name":"Hero","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/hero.jpg"},"publications":[]},{"channel":{"id":"alfatv","name":"AlfaTV","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/alfatv.png"},"publications":[]},{"channel":{"id":"frii","name":"Frii","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/frii.jpg"},"publications":[]},{"channel":{"id":"national-geographic","name":"National Geographic","providerId":"yle","publicationModel":"Broadcast","availabilityModel":"Free","logoUrl":"https://img.prod.telkku.com/channel-logos/natgeologo.png"},"publications":[]}]}}

View file

@ -0,0 +1,71 @@
const axios = require('axios')
const dayjs = require('dayjs')
module.exports = {
site: 'telkku.com',
url: function ({ channel, date }) {
const [group] = channel.site_id.split('#')
return `https://telkku.com/api/channel-groups/${group}/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=${date.format(
'YYYY-MM-DD'
)}&view=PublicationDetails`
},
parser: function ({ content, channel }) {
let programs = []
const items = getItems(content, channel)
items.forEach(item => {
programs.push({
title: item.title,
description: item.description,
icon: getIcon(item),
start: getStart(item),
stop: getStop(item)
})
})
return programs
},
async channels() {
const data = await axios
.get(`https://telkku.com/api/channel-groups`)
.then(r => r.data)
.catch(console.log)
let items = []
data.response.forEach(group => {
group.channels.forEach(channel => {
items.push({
lang: 'fi',
site_id: `${group.id}#${channel.id}`,
name: channel.name
})
})
})
return items
}
}
function getIcon(item) {
const image = item.images.find(i => i.type === 'default' && i.sizeTag === '1200x630')
return image ? image.url : null
}
function getStart(item) {
return dayjs(item.startTime)
}
function getStop(item) {
return dayjs(item.endTime)
}
function getItems(content, channel) {
const [_, channelId] = channel.site_id.split('#')
const data = JSON.parse(content)
if (!data || !data.response || !Array.isArray(data.response.publicationsByChannel)) return []
const channelData = data.response.publicationsByChannel.find(i => i.channel.id === channelId)
if (!channelData || !Array.isArray(channelData.publications)) return []
return channelData.publications
}

View file

@ -0,0 +1,49 @@
// npm run channels:parse -- --config=./sites/telkku.com/telkku.com.config.js --output=./sites/telkku.com/telkku.com_fi.channels.xml
// npx epg-grabber --config=sites/telkku.com/telkku.com.config.js --channels=sites/telkku.com/telkku.com_fi.channels.xml --output=guide.xml --days=2
const { parser, url } = require('./telkku.com.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: 'default_builtin_channelgroup1#yle-tv1',
xmltv_id: 'YleTV1.fi'
}
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'https://telkku.com/api/channel-groups/default_builtin_channelgroup1/offering?startTime=00%3A00%3A00.000&duration=PT24H&inclusionPolicy=IncludeOngoingAlso&limit=1000&tvDate=2022-10-29&view=PublicationDetails'
)
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
const results = parser({ content, channel }).map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2022-10-28T20:50:00.000Z',
stop: '2022-10-28T21:20:00.000Z',
title: 'Puoli seitsemän',
description:
'Vieraana näyttelijä Elias Salonen. Puoli seiskassa vietetään sekä halloweeniä että joulua, kun Olli-Pekka tapaa todellisen jouluttajan. Juontajina Anniina Valtonen, Tuulianna Tola ja Olli-Pekka Kursi.',
icon: 'https://thumbor.prod.telkku.com/YTglotoUl7aJtzPtYnvM9tH03sY=/1200x630/smart/filters:quality(86):format(jpeg)/img.prod.telkku.com/program-images/0f885238ac16ce167a9d80eace450254.jpg'
})
})
it('can handle empty guide', () => {
const result = parser({
content: fs.readFileSync(path.resolve(__dirname, '__data__/no-content.json')),
channel
})
expect(result).toMatchObject([])
})

View file

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="telkku.com">
<channels>
<channel lang="fi" xmltv_id="AlfaTV.fi" site_id="default_builtin_channelgroup1#alfatv">AlfaTV</channel>
<channel lang="fi" xmltv_id="AnimalPlanetFinland.fi" site_id="default_builtin_channelgroup13#animal-planet">Animal Planet</channel>
<channel lang="fi" xmltv_id="AVA.fi" site_id="default_builtin_channelgroup1#ava">Ava</channel>
<channel lang="fi" xmltv_id="CartoonNetworkFinland.fi" site_id="default_builtin_channelgroup10#cartoon-network">Cartoon Network</channel>
<channel lang="fi" xmltv_id="CMoreFirst.se" site_id="default_builtin_channelgroup4#cmore-first">C More First</channel>
<channel lang="fi" xmltv_id="CMoreHits.se" site_id="default_builtin_channelgroup4#cmore-hits">C More Hits</channel>
<channel lang="fi" xmltv_id="CMoreJuniori.fi" site_id="default_builtin_channelgroup4#mtv-juniori">C More Juniori</channel>
<channel lang="fi" xmltv_id="CMoreMax.fi" site_id="default_builtin_channelgroup4#mtv-max">C More Max</channel>
<channel lang="fi" xmltv_id="CMoreSeries.se" site_id="default_builtin_channelgroup4#cmore-series">C More Series</channel>
<channel lang="fi" xmltv_id="CMoreSport1.fi" site_id="default_builtin_channelgroup4#mtv-sport-1">C More Sport 1</channel>
<channel lang="fi" xmltv_id="CMoreSport2.fi" site_id="default_builtin_channelgroup4#mtv-sport-2">C More Sport 2</channel>
<channel lang="fi" xmltv_id="CMoreStars.se" site_id="default_builtin_channelgroup4#cmore-stars">C More Stars</channel>
<channel lang="fi" xmltv_id="DiscoveryChannelFinland.fi" site_id="default_builtin_channelgroup13#discovery-channel">Discovery Channel</channel>
<channel lang="fi" xmltv_id="Eurosport1Finland.fi" site_id="default_builtin_channelgroup9#eurosport">Eurosport</channel>
<channel lang="fi" xmltv_id="ExtremeSportsChannel.nl" site_id="default_builtin_channelgroup9#extreme-sports">Extreme Sports</channel>
<channel lang="fi" xmltv_id="FoxFinland.fi" site_id="default_builtin_channelgroup1#fox">Fox</channel>
<channel lang="fi" xmltv_id="Frii.fi" site_id="default_builtin_channelgroup1#frii">Frii</channel>
<channel lang="fi" xmltv_id="H2.us" site_id="default_builtin_channelgroup13#h2">H2</channel>
<channel lang="fi" xmltv_id="Hero.fi" site_id="default_builtin_channelgroup1#hero">Hero</channel>
<channel lang="fi" xmltv_id="HimlenTV7.fi" site_id="default_builtin_channelgroup18#himlen-tv7">Himlen TV7</channel>
<channel lang="fi" xmltv_id="Jim.fi" site_id="default_builtin_channelgroup1#jim">Jim</channel>
<channel lang="fi" xmltv_id="Kanal5.se" site_id="default_builtin_channelgroup20#kanal5">Kanal5</channel>
<channel lang="fi" xmltv_id="Kutonen.fi" site_id="default_builtin_channelgroup1#kutonen">Kutonen</channel>
<channel lang="fi" xmltv_id="Liv.fi" site_id="default_builtin_channelgroup1#liv">Liv</channel>
<channel lang="fi" xmltv_id="MTV3.fi" site_id="default_builtin_channelgroup1#mtv3">MTV3</channel>
<channel lang="fi" xmltv_id="NationalGeographicFinland.fi" site_id="default_builtin_channelgroup10#national-geographic">National Geographic</channel>
<channel lang="fi" xmltv_id="Nelonen.fi" site_id="default_builtin_channelgroup1#nelonen">Nelonen</channel>
<channel lang="fi" xmltv_id="SFkanalen.se" site_id="default_builtin_channelgroup4#sf-kanalen">SF-kanalen</channel>
<channel lang="fi" xmltv_id="Sub.fi" site_id="default_builtin_channelgroup1#sub">Sub</channel>
<channel lang="fi" xmltv_id="SVT1.se" site_id="default_builtin_channelgroup20#svt-1">SVT 1</channel>
<channel lang="fi" xmltv_id="SVT2.se" site_id="default_builtin_channelgroup20#svt-2">SVT 2</channel>
<channel lang="fi" xmltv_id="SVT24.se" site_id="default_builtin_channelgroup20#svt24">SVT24</channel>
<channel lang="fi" xmltv_id="TLCFinland.fi" site_id="default_builtin_channelgroup1#tlc-finland">TLC</channel>
<channel lang="fi" xmltv_id="TV3.se" site_id="default_builtin_channelgroup20#tv3">TV3</channel>
<channel lang="fi" xmltv_id="TV4.se" site_id="default_builtin_channelgroup20#tv4">TV4</channel>
<channel lang="fi" xmltv_id="TV5.fi" site_id="default_builtin_channelgroup1#tv5">TV5</channel>
<channel lang="fi" xmltv_id="TV6Sweden.se" site_id="default_builtin_channelgroup20#tv6">TV6</channel>
<channel lang="fi" xmltv_id="VFilmAction.se" site_id="default_builtin_channelgroup10#viasat-film-action">V film ACTION</channel>
<channel lang="fi" xmltv_id="VFilmFamily.se" site_id="default_builtin_channelgroup10#viasat-film-family">V film FAMILY</channel>
<channel lang="fi" xmltv_id="VFilmHits.se" site_id="default_builtin_channelgroup10#viasat-film-hits">V film HITS</channel>
<channel lang="fi" xmltv_id="VFilmPremiere.se" site_id="default_builtin_channelgroup10#viasat-film">V film PREMIERE</channel>
<channel lang="fi" xmltv_id="ViasatExplore.se" site_id="default_builtin_channelgroup10#viasat-explore">Viasat Explore</channel>
<channel lang="fi" xmltv_id="ViasatHistory.se" site_id="default_builtin_channelgroup10#viasat-history">Viasat History</channel>
<channel lang="fi" xmltv_id="VSportFootball.se" site_id="default_builtin_channelgroup10#viasat-fotboll-hd">V sport FOOTBALL</channel>
<channel lang="fi" xmltv_id="VSportGolf.se" site_id="default_builtin_channelgroup10#viasat-golf">V sport GOLF</channel>
<channel lang="fi" xmltv_id="VSportPremium.se" site_id="default_builtin_channelgroup10#viasat-sport-premium-hd">V sport PREMIUM</channel>
<channel lang="fi" xmltv_id="VSportUltraHD.se" site_id="default_builtin_channelgroup10#viasat-ultra-hd">V sport ULTRA HD</channel>
<channel lang="fi" xmltv_id="VSportVinter.se" site_id="default_builtin_channelgroup10#viasat-hockey">V sport vinter</channel>
<channel lang="fi" xmltv_id="YleTeemaFem.fi" site_id="default_builtin_channelgroup1#yle-teema-fem">Yle Teema Fem</channel>
<channel lang="fi" xmltv_id="YleTV1.fi" site_id="default_builtin_channelgroup1#yle-tv1">Yle TV1</channel>
<channel lang="fi" xmltv_id="YleTV2.fi" site_id="default_builtin_channelgroup1#yle-tv2">Yle TV2</channel>
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#cnn">CNN</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#disney-channel">Disney Channel</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#disney-junior">Disney Junior</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#nat-geo-wild-scandinavia">Nat Geo Wild Scandinavia</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#viasat-jaakiekko-hd">V sport 1 Suomi</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#viasat-jalkapallo-hd">V sport 2 Suomi</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#viasat-nature-crime">Viasat Nature/Crime</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#viasat-sport">V sport</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup10#viasat-urheilu-hd">V sport + Suomi</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup13#bbc-earth">BBC Earth</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup13#discovery-science">Discovery Science</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup13#history-channel">The History Channel</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup13#investigation-discovery">Investigation Discovery</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup13#nat-geo-wild-scandinavia">Nat Geo Wild Scandinavia</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup13#viasat-nature-crime">Viasat Nature/Crime</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup14#disney-channel">Disney Channel</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup14#disney-junior">Disney Junior</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup14#nick-jr">Nick Jr.</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup15#iconcerts">iConcerts</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup15#mtv-dance">Club MTV</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup15#mtv-finland">MTV Finland</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup15#mtv-live-hd">MTV Live HD</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup15#vh1-classic">VH1 Classic</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup16#al-jazeera">Al Jazeera</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup16#bbc-world-news">BBC World News</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup16#bloomberg-tv">Bloomberg TV</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup16#cnbc">CNBC</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup16#cnn">CNN</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup16#deutsche-welle">Deutsche Welle</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup16#euronews">EuroNews</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup16#sky-news">Sky News</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup17#fashion-tv">Fashion TV</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup17#travel-channel">Travel Channel</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup18#bbc-brit">BBC Brit</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup18#rtl">RTL</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup18#tv-finland">TV Finland</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup18#tv5-monde">TV5 Monde</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup18#tv7">TV7</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup18#viron-etv">Viron ETV</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup20#barnkanalen">Barnkanalen</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup9#eurosport-2">Eurosport 2</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup9#viasat-jaakiekko-hd">V sport 1 Suomi</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup9#viasat-jalkapallo-hd">V sport 2 Suomi</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup9#viasat-sport">V sport</channel> -->
<!-- <channel lang="fi" xmltv_id="" site_id="default_builtin_channelgroup9#viasat-urheilu-hd">V sport + Suomi</channel> -->
</channels>
</site>