mirror of
https://github.com/iptv-org/epg
synced 2026-05-15 22:04:59 -04:00
Merge pull request #3146 from knylbyte/feature/web2.magentatv.de
feat: add www.magenta.tv EPG grabber
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -6,6 +6,10 @@
|
||||
/guide.xml.gz
|
||||
.secrets
|
||||
/guides/
|
||||
/dev/
|
||||
|
||||
/AGENT.md
|
||||
/.agent/
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
143
sites/www.magenta.tv/__data__/content.json
Normal file
143
sites/www.magenta.tv/__data__/content.json
Normal file
@@ -0,0 +1,143 @@
|
||||
{
|
||||
"manifest": {
|
||||
"mpx": {
|
||||
"accountPid": "mdeprod",
|
||||
"locationIdUri": "http://data.entertainment.tv.theplatform.eu/entertainment/data/Location/245991976396",
|
||||
"feeds": {
|
||||
"allChannelSchedulesFeed": "https://feed.entertainment.tv.theplatform.eu/f/{MpxAccountPid}/{MpxAccountPid}-all-channel-schedules",
|
||||
"allChannelStationsFeed": "https://feed.entertainment.tv.theplatform.eu/f/{MpxAccountPid}/{MpxAccountPid}-channel-stations-main"
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
"startIndex": 1,
|
||||
"itemsPerPage": 2,
|
||||
"entryCount": 2,
|
||||
"entries": [
|
||||
{
|
||||
"id": "http://data.entertainment.tv.theplatform.eu/entertainment/data/ChannelSchedule/259549736360",
|
||||
"title": "Das Erste HD - Main",
|
||||
"stations": {
|
||||
"http://data.entertainment.tv.theplatform.eu/entertainment/data/Station/259550248018": {
|
||||
"id": "http://data.entertainment.tv.theplatform.eu/entertainment/data/Station/259550248018",
|
||||
"title": "Das Erste",
|
||||
"guid": "das_erste_hd",
|
||||
"thumbnails": {
|
||||
"stationLogoColored": {
|
||||
"url": "https://example.com/das-erste-colored.png",
|
||||
"width": 120,
|
||||
"height": 48
|
||||
},
|
||||
"stationLogo": {
|
||||
"url": "https://example.com/das-erste.png",
|
||||
"width": 120,
|
||||
"height": 48
|
||||
}
|
||||
},
|
||||
"dt$serviceId": "das-erste",
|
||||
"dt$quality": "HD"
|
||||
}
|
||||
},
|
||||
"dt$displayChannelNumber": 1,
|
||||
"dt$isAdult": false,
|
||||
"dt$isRadio": false
|
||||
},
|
||||
{
|
||||
"id": "http://data.entertainment.tv.theplatform.eu/entertainment/data/ChannelSchedule/265809960058",
|
||||
"title": "DabeiTV Radio - Main",
|
||||
"stations": {
|
||||
"http://data.entertainment.tv.theplatform.eu/entertainment/data/Station/265809960059": {
|
||||
"id": "http://data.entertainment.tv.theplatform.eu/entertainment/data/Station/265809960059",
|
||||
"title": "DabeiTV Radio",
|
||||
"guid": "dabei_radio",
|
||||
"dt$serviceId": "dabei-radio"
|
||||
}
|
||||
},
|
||||
"dt$displayChannelNumber": 865,
|
||||
"dt$isAdult": false,
|
||||
"dt$isRadio": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"schedule": {
|
||||
"startIndex": 1,
|
||||
"itemsPerPage": 1,
|
||||
"entryCount": 1,
|
||||
"entries": [
|
||||
{
|
||||
"id": "http://data.entertainment.tv.theplatform.eu/entertainment/data/ChannelSchedule/262270504164",
|
||||
"guid": "sat1_hd-245991976396",
|
||||
"channelNumber": 4,
|
||||
"listings": [
|
||||
{
|
||||
"id": "http://data.entertainment.tv.theplatform.eu/entertainment/data/Listing/775359528265",
|
||||
"guid": "sat1_hd_03078f33",
|
||||
"startTime": 1778458200000,
|
||||
"endTime": 1778461620000,
|
||||
"program": {
|
||||
"id": "http://data.entertainment.tv.theplatform.eu/entertainment/data/Program/775354920143",
|
||||
"title": "FBI: Special Crime Unit",
|
||||
"description": "Eine gigantische Explosion in Brooklyn ruft das FBI auf den Plan. Hinweise deuten auf eine vorsätzliche Fremdeinwirkung hin.",
|
||||
"isAdult": false,
|
||||
"programType": "episode",
|
||||
"ratings": [
|
||||
{
|
||||
"scheme": "telekom-age-rating-2020",
|
||||
"rating": "UNKNOWN",
|
||||
"subRatings": []
|
||||
}
|
||||
],
|
||||
"runtime": 3473,
|
||||
"secondaryTitle": "Aufstand",
|
||||
"seriesId": "http://data.entertainment.tv.theplatform.eu/entertainment/data/Program/guid/2709353023/telekom.de-110697",
|
||||
"tags": [
|
||||
{
|
||||
"scheme": "category",
|
||||
"title": "200-Serie",
|
||||
"titleLocalized": {}
|
||||
},
|
||||
{
|
||||
"scheme": "genre-primary",
|
||||
"title": "Krimi",
|
||||
"titleLocalized": {}
|
||||
},
|
||||
{
|
||||
"scheme": "genre-secondary",
|
||||
"title": "Action",
|
||||
"titleLocalized": {}
|
||||
},
|
||||
{
|
||||
"scheme": "genre-secondary",
|
||||
"title": "Thriller",
|
||||
"titleLocalized": {}
|
||||
},
|
||||
{
|
||||
"scheme": "genre-secondary",
|
||||
"title": "Krimi",
|
||||
"titleLocalized": {}
|
||||
},
|
||||
{
|
||||
"scheme": "programSubType",
|
||||
"title": "linear_program",
|
||||
"titleLocalized": {}
|
||||
}
|
||||
],
|
||||
"tvSeasonEpisodeNumber": null,
|
||||
"tvSeasonNumber": null,
|
||||
"year": 2025,
|
||||
"dt$countries": "us",
|
||||
"dt$originalIds": {
|
||||
"cmlsProgramId": "03078f33",
|
||||
"tva": "crid://telekom.de/03078f33"
|
||||
}
|
||||
},
|
||||
"stationId": "http://data.entertainment.tv.theplatform.eu/entertainment/data/Station/262269992390",
|
||||
"dt$languages": ["deu"],
|
||||
"dt$programInfo": "{'tvSeasonEpisodeNumber' : 7, 'tvSeasonNumber' : 8, 'seriesEpisodeNumber' : null}",
|
||||
"dt$seriesTitle": "FBI: Special Crime Unit"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
21
sites/www.magenta.tv/readme.md
Normal file
21
sites/www.magenta.tv/readme.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# www.magenta.tv
|
||||
|
||||
https://www.magenta.tv/tv-guide
|
||||
|
||||
### Download the guide
|
||||
|
||||
```sh
|
||||
npm run grab --- --sites=www.magenta.tv
|
||||
```
|
||||
|
||||
### Update channel list
|
||||
|
||||
```sh
|
||||
npm run channels:parse --- --config=./sites/www.magenta.tv/www.magenta.tv.config.js --output=./sites/www.magenta.tv/www.magenta.tv.channels.xml
|
||||
```
|
||||
|
||||
### Test
|
||||
|
||||
```sh
|
||||
npm test --- www.magenta.tv
|
||||
```
|
||||
407
sites/www.magenta.tv/www.magenta.tv.channels.xml
Normal file
407
sites/www.magenta.tv/www.magenta.tv.channels.xml
Normal file
@@ -0,0 +1,407 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<channels>
|
||||
<channel site="www.magenta.tv" site_id="259549736358" lang="de" xmltv_id="">RTL</channel>
|
||||
<channel site="www.magenta.tv" site_id="259549736360" lang="de" xmltv_id="">Das Erste</channel>
|
||||
<channel site="www.magenta.tv" site_id="259728423995" lang="de" xmltv_id="">RTL</channel>
|
||||
<channel site="www.magenta.tv" site_id="262264872014" lang="de" xmltv_id="">ZDF</channel>
|
||||
<channel site="www.magenta.tv" site_id="262269992391" lang="de" xmltv_id="">SAT.1</channel>
|
||||
<channel site="www.magenta.tv" site_id="262270504164" lang="de" xmltv_id="">SAT.1</channel>
|
||||
<channel site="www.magenta.tv" site_id="262270504165" lang="de" xmltv_id="">ProSieben</channel>
|
||||
<channel site="www.magenta.tv" site_id="262277160057" lang="de" xmltv_id="">RTLZWEI</channel>
|
||||
<channel site="www.magenta.tv" site_id="262277160060" lang="de" xmltv_id="">Super RTL</channel>
|
||||
<channel site="www.magenta.tv" site_id="262280744415" lang="de" xmltv_id="">Kabel Eins</channel>
|
||||
<channel site="www.magenta.tv" site_id="262281768126" lang="de" xmltv_id="">KiKA</channel>
|
||||
<channel site="www.magenta.tv" site_id="262282280173" lang="de" xmltv_id="">VOX</channel>
|
||||
<channel site="www.magenta.tv" site_id="262729768194" lang="de" xmltv_id="">ZDFneo</channel>
|
||||
<channel site="www.magenta.tv" site_id="262729768197" lang="de" xmltv_id="">Sport 1 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="262729768198" lang="de" xmltv_id="">Warner TV Serie</channel>
|
||||
<channel site="www.magenta.tv" site_id="262729768199" lang="de" xmltv_id="">phoenix</channel>
|
||||
<channel site="www.magenta.tv" site_id="262729768201" lang="de" xmltv_id="">13TH STREET</channel>
|
||||
<channel site="www.magenta.tv" site_id="262729768202" lang="de" xmltv_id="">WDR Fernsehen Köln</channel>
|
||||
<channel site="www.magenta.tv" site_id="262730280151" lang="de" xmltv_id="">Warner TV Film</channel>
|
||||
<channel site="www.magenta.tv" site_id="262730280155" lang="de" xmltv_id="">3sat</channel>
|
||||
<channel site="www.magenta.tv" site_id="262730280165" lang="de" xmltv_id="">Warner TV Comedy</channel>
|
||||
<channel site="www.magenta.tv" site_id="262730792005" lang="de" xmltv_id="">BR Fernsehen Süd</channel>
|
||||
<channel site="www.magenta.tv" site_id="262731304141" lang="de" xmltv_id="">Eurosport 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="262731304143" lang="de" xmltv_id="">ntv</channel>
|
||||
<channel site="www.magenta.tv" site_id="262731304145" lang="de" xmltv_id="">WELT</channel>
|
||||
<channel site="www.magenta.tv" site_id="274350120287" lang="de" xmltv_id="">VOX</channel>
|
||||
<channel site="www.magenta.tv" site_id="274350120288" lang="de" xmltv_id="">hr-fernsehen</channel>
|
||||
<channel site="www.magenta.tv" site_id="274350120289" lang="de" xmltv_id="">Kabel Eins</channel>
|
||||
<channel site="www.magenta.tv" site_id="274350120290" lang="de" xmltv_id="">RTL Crime</channel>
|
||||
<channel site="www.magenta.tv" site_id="274350120291" lang="de" xmltv_id="">SWR Fernsehen BW</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656120" lang="de" xmltv_id="">DMAX</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656121" lang="de" xmltv_id="">ProSieben FUN</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656122" lang="de" xmltv_id="">NITRO</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656123" lang="de" xmltv_id="">rbb fernsehen Berlin</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656124" lang="de" xmltv_id="">WELT</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656125" lang="de" xmltv_id="">Eurosport 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656126" lang="de" xmltv_id="">RTLup</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656127" lang="de" xmltv_id="">National Geographic</channel>
|
||||
<channel site="www.magenta.tv" site_id="274351656128" lang="de" xmltv_id="">Eurosport 2</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352168016" lang="de" xmltv_id="">ntv</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352168017" lang="de" xmltv_id="">SAT.1 GOLD</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352168018" lang="de" xmltv_id="">MDR-Fernsehen Sachsen</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352679970" lang="de" xmltv_id="">ProSieben</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352679971" lang="de" xmltv_id="">Radio Bremen TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352679972" lang="de" xmltv_id="">ARTE</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352679973" lang="de" xmltv_id="">RTLZWEI</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352679974" lang="de" xmltv_id="">SAT.1 emotions</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352679975" lang="de" xmltv_id="">NDR Fernsehen Niedersachsen</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352679976" lang="de" xmltv_id="">SR Fernsehen</channel>
|
||||
<channel site="www.magenta.tv" site_id="274352679977" lang="de" xmltv_id="">Super RTL</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912216" lang="de" xmltv_id="">CHANNEL21</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912217" lang="de" xmltv_id="">NITRO</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912218" lang="de" xmltv_id="">ÜLKE TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912219" lang="de" xmltv_id="">Schlagerparadies.TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912220" lang="de" xmltv_id="">Magenta Musik 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912221" lang="de" xmltv_id="">Sky Sport 5</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912222" lang="de" xmltv_id="">Sport 5 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912223" lang="de" xmltv_id="">KinoweltTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912224" lang="de" xmltv_id="">Sky Sport Bundesliga 7</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912226" lang="de" xmltv_id="">sixx</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912227" lang="de" xmltv_id="">MagentaSport</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912228" lang="de" xmltv_id="">Heimatkanal</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912229" lang="de" xmltv_id="">TLC</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912230" lang="de" xmltv_id="">Cartoon Network (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912231" lang="de" xmltv_id="">Sky Sport Golf</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912232" lang="de" xmltv_id="">Sky Sport Premier League</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912233" lang="de" xmltv_id="">Bibel TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912234" lang="de" xmltv_id="">More Than Sports TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912235" lang="de" xmltv_id="">SAT.1 GOLD</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912236" lang="de" xmltv_id="">Sky Sport F1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912237" lang="de" xmltv_id="">Sky Sport Bundesliga 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912238" lang="de" xmltv_id="">Kabel Eins Doku</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912240" lang="de" xmltv_id="">Sport 18 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912242" lang="de" xmltv_id="">Sky Sport 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912243" lang="de" xmltv_id="">Warner TV Comedy (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912244" lang="de" xmltv_id="">National Geographic Wild</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912245" lang="de" xmltv_id="">DF1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912247" lang="de" xmltv_id="">TV8 Int</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912248" lang="de" xmltv_id="">Jukebox</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912249" lang="de" xmltv_id="">Shop LC</channel>
|
||||
<channel site="www.magenta.tv" site_id="389263912250" lang="de" xmltv_id="">Sky Sport Mix</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424226" lang="de" xmltv_id="">TV5MONDE Europe</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424227" lang="de" xmltv_id="">QVC</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424228" lang="de" xmltv_id="">Sky Sci-Fi</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424230" lang="de" xmltv_id="">Sport 3 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424231" lang="de" xmltv_id="">Kabel Eins CLASSICS</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424232" lang="de" xmltv_id="">VOXup</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424233" lang="de" xmltv_id="">ARD-alpha</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424234" lang="de" xmltv_id="">Welt der Wunder</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424235" lang="de" xmltv_id="">Warner TV Film (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424236" lang="de" xmltv_id="">Magenta Musik 2</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424237" lang="de" xmltv_id="">Sky Sport Bundesliga</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424238" lang="de" xmltv_id="">ProSieben MAXX</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424239" lang="de" xmltv_id="">Stingray Classica</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424240" lang="de" xmltv_id="">Sky Sport Bundesliga 4</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424241" lang="de" xmltv_id="">SPORTDIGITAL FUSSBALL</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424242" lang="de" xmltv_id="">Sky Sport Bundesliga 6</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424243" lang="de" xmltv_id="">beIN Movies Turk</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424244" lang="de" xmltv_id="">Sport 17 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424245" lang="de" xmltv_id="">TOGGO plus</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424246" lang="de" xmltv_id="">ONE</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424248" lang="de" xmltv_id="">ONE MUSIC TELEVISION</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424249" lang="de" xmltv_id="">wedotv Movies</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424250" lang="de" xmltv_id="">Discovery Channel</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424252" lang="de" xmltv_id="">Habertürk TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424253" lang="de" xmltv_id="">RTLup</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424254" lang="de" xmltv_id="">RiC</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424255" lang="de" xmltv_id="">Sky Sport News</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424256" lang="de" xmltv_id="">Universal TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424257" lang="de" xmltv_id="">RTL Passion</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424258" lang="de" xmltv_id="">Warner TV Serie (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424259" lang="de" xmltv_id="">Sky Cinema Classics</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424261" lang="de" xmltv_id="">TeleBom/TeleDom</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424262" lang="de" xmltv_id="">Romance TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424263" lang="de" xmltv_id="">The HISTORY Channel</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424264" lang="de" xmltv_id="">Sky Atlantic</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424268" lang="de" xmltv_id="">OUTtv</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424269" lang="de" xmltv_id="">Sport 4 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424271" lang="de" xmltv_id="">Sky Sport 3</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424272" lang="de" xmltv_id="">Sky Krimi</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424273" lang="de" xmltv_id="">Espreso</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264424274" lang="de" xmltv_id="">Stingray iConcerts</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936243" lang="de" xmltv_id="">Sky Sport Tennis</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936244" lang="de" xmltv_id="">13TH STREET (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936247" lang="de" xmltv_id="">Sky Sport 9</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936248" lang="de" xmltv_id="">Sky Cinema Action</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936249" lang="de" xmltv_id="">Sport 8 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936251" lang="de" xmltv_id="">Sport 2 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936252" lang="de" xmltv_id="">Sky Sport 2</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936253" lang="de" xmltv_id="">AXN Black</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936254" lang="de" xmltv_id="">Ballermann TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936255" lang="de" xmltv_id="">Cartoon Network</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936256" lang="de" xmltv_id="">Sky Sport Bundesliga 10</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936257" lang="de" xmltv_id="">Show Turk</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936258" lang="de" xmltv_id="">Sky Sport 6</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936259" lang="de" xmltv_id="">BonGusto</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936260" lang="de" xmltv_id="">Sky Sport Bundesliga 8</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936261" lang="de" xmltv_id="">ANIXE HD Serie</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936262" lang="de" xmltv_id="">Red Bull TV Motorsport</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936263" lang="de" xmltv_id="">eSportsONE</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936264" lang="de" xmltv_id="">Animal Planet</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936266" lang="de" xmltv_id="">Sky Cinema Premiere</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936267" lang="de" xmltv_id="">Rai 3</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936269" lang="de" xmltv_id="">Stingray DJAZZ</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936270" lang="de" xmltv_id="">Bergblick</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936271" lang="de" xmltv_id="">Playboy Europe</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936272" lang="de" xmltv_id="">OstWest</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936273" lang="de" xmltv_id="">Sky One</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936278" lang="de" xmltv_id="">iTVN</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936279" lang="de" xmltv_id="">Kabel Eins Doku</channel>
|
||||
<channel site="www.magenta.tv" site_id="389264936281" lang="de" xmltv_id="">N24 Doku</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448044" lang="de" xmltv_id="">MagentaTV Info</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448045" lang="de" xmltv_id="">Comedy Central</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448046" lang="de" xmltv_id="">Sky Sport Kompakt 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448047" lang="de" xmltv_id="">Motorvision+</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448048" lang="de" xmltv_id="">tagesschau24</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448049" lang="de" xmltv_id="">Marco Polo TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448050" lang="de" xmltv_id="">ANIXE+</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448051" lang="de" xmltv_id="">CNN International</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448052" lang="de" xmltv_id="">SPORT1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448053" lang="de" xmltv_id="">HGTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448054" lang="de" xmltv_id="">FREEDOM</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448055" lang="de" xmltv_id="">TLC</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448056" lang="de" xmltv_id="">SCHLAGER DELUXE</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448057" lang="de" xmltv_id="">DMF</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448058" lang="de" xmltv_id="">Sky Sport Bundesliga 9</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448059" lang="de" xmltv_id="">ProSieben MAXX</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448060" lang="de" xmltv_id="">MTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448061" lang="de" xmltv_id="">Volksmusik.TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448062" lang="de" xmltv_id="">Sky Sport Bundesliga 5</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448063" lang="de" xmltv_id="">Sport 11 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448065" lang="de" xmltv_id="">123.live</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448066" lang="de" xmltv_id="">SPORT1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448067" lang="de" xmltv_id="">Sport 14 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448068" lang="de" xmltv_id="">Sky Sport Bundesliga 3</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448069" lang="de" xmltv_id="">Kinomir</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448071" lang="de" xmltv_id="">Crime+Investigation</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448072" lang="de" xmltv_id="">Sky Sport Top Event</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448073" lang="de" xmltv_id="">Sport 16 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265448075" lang="de" xmltv_id="">Nicktoons (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960191" lang="de" xmltv_id="">Euro D</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960192" lang="de" xmltv_id="">Sky Sport Bundesliga 2</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960194" lang="de" xmltv_id="">ZWEI MUSIC TELEVISION</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960195" lang="de" xmltv_id="">Rai 2</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960196" lang="de" xmltv_id="">SWR Fernsehen RP</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960197" lang="de" xmltv_id="">Show Max</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960198" lang="de" xmltv_id="">Nick Jr. (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960199" lang="de" xmltv_id="">Penthouse Passion</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960200" lang="de" xmltv_id="">Sport 7 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960201" lang="de" xmltv_id="">Euronews Deutsch</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960204" lang="de" xmltv_id="">RTL Living</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960205" lang="de" xmltv_id="">FOLX MUSIC TELEVISION</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960207" lang="de" xmltv_id="">France 24 francais</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960208" lang="de" xmltv_id="">Comedy Central</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960209" lang="de" xmltv_id="">Sport 12 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960210" lang="de" xmltv_id="">TELE 5</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960211" lang="de" xmltv_id="">Blue Hustler</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960212" lang="de" xmltv_id="">beIN iZ</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960213" lang="de" xmltv_id="">TOP SERIEN</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960214" lang="de" xmltv_id="">Rai 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960215" lang="de" xmltv_id="">Al Jazeera English</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960216" lang="de" xmltv_id="">Nick Jr.</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960218" lang="de" xmltv_id="">Asharq News</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960219" lang="de" xmltv_id="">sonnenklar.TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960220" lang="de" xmltv_id="">N24 Doku</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960221" lang="de" xmltv_id="">MTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960222" lang="de" xmltv_id="">Nick/Comedy Central+1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960223" lang="de" xmltv_id="">CNN International</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960224" lang="de" xmltv_id="">Euronews Russki</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960225" lang="de" xmltv_id="">Red Bull TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960226" lang="de" xmltv_id="">Sky Sport 8</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960227" lang="de" xmltv_id="">Spiegel Geschichte</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960229" lang="de" xmltv_id="">K-TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960231" lang="de" xmltv_id="">Cartoonito</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960232" lang="de" xmltv_id="">Sky Documentaries</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960233" lang="de" xmltv_id="">DMAX</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960236" lang="de" xmltv_id="">Sportdigital1+</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960237" lang="de" xmltv_id="">France 24 english</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960239" lang="de" xmltv_id="">Sky Crime</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960241" lang="de" xmltv_id="">DELUXE MUSIC</channel>
|
||||
<channel site="www.magenta.tv" site_id="389265960242" lang="de" xmltv_id="">Lust pur</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472146" lang="de" xmltv_id="">TOGGO plus</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472147" lang="de" xmltv_id="">VOXup</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472148" lang="de" xmltv_id="">Sky Sci-Fi (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472149" lang="de" xmltv_id="">Sky Nature</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472150" lang="de" xmltv_id="">Sky Showcase</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472151" lang="de" xmltv_id="">wetter.com TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472152" lang="de" xmltv_id="">Sport 9 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472153" lang="de" xmltv_id="">The HISTORY Channel (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472154" lang="de" xmltv_id="">Universal TV (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472155" lang="de" xmltv_id="">AXN White</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472157" lang="de" xmltv_id="">Sport 13 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472159" lang="de" xmltv_id="">Sky Cinema Family</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472161" lang="de" xmltv_id="">Sport 15 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472162" lang="de" xmltv_id="">Sport 10 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472163" lang="de" xmltv_id="">Travelxp</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472164" lang="de" xmltv_id="">sixx</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472165" lang="de" xmltv_id="">MS Sport</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472166" lang="de" xmltv_id="">Euronews Italiano</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472167" lang="de" xmltv_id="">Sport 6 - myTeamTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472168" lang="de" xmltv_id="">TELE 5</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472169" lang="de" xmltv_id="">Sky Sport 4</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472171" lang="de" xmltv_id="">Sky Sport 7</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472172" lang="de" xmltv_id="">Fashion TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472173" lang="de" xmltv_id="">GEO Television</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472174" lang="de" xmltv_id="">HSE</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472175" lang="de" xmltv_id="">Nick/Comedy Central+1</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472176" lang="de" xmltv_id="">Kanal 7</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472177" lang="de" xmltv_id="">auto motor und sport</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472178" lang="de" xmltv_id="">Curiosity Channel</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472179" lang="de" xmltv_id="">Eurostar TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472181" lang="de" xmltv_id="">Cartoonito (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472182" lang="de" xmltv_id="">Crime+Investigation (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472183" lang="de" xmltv_id="">Sky Sport 10</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472185" lang="de" xmltv_id="">MOMENTS</channel>
|
||||
<channel site="www.magenta.tv" site_id="389266472186" lang="de" xmltv_id="">ZDFinfo</channel>
|
||||
<channel site="www.magenta.tv" site_id="415147560391" lang="de" xmltv_id="">WDR Fernsehen Duisburg</channel>
|
||||
<channel site="www.magenta.tv" site_id="415147560392" lang="de" xmltv_id="">SAT.1 Bayern</channel>
|
||||
<channel site="www.magenta.tv" site_id="415147560393" lang="de" xmltv_id="">SAT.1 Bayern</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584245" lang="de" xmltv_id="">CNBC International</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584246" lang="de" xmltv_id="">rbb fernsehen Brandenburg</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584247" lang="de" xmltv_id="">TVP Polonia</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584248" lang="de" xmltv_id="">RTL Bremen & Niedersachsen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584249" lang="de" xmltv_id="">WDR Fernsehen Siegen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584250" lang="de" xmltv_id="">SAT.1 Rheinland-Pfalz und Hessen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584251" lang="de" xmltv_id="">NDR Fernsehen Hamburg</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584252" lang="de" xmltv_id="">RTL Hamburg & Schleswig-Holstein</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584253" lang="de" xmltv_id="">RTL Hessen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415148584254" lang="de" xmltv_id="">SAT.1 Hamburg und Schleswig-Holstein</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608108" lang="de" xmltv_id="">MDR-Fernsehen Thüringen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608150" lang="de" xmltv_id="">SAT.1 Niedersachsen und Bremen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608151" lang="de" xmltv_id="">MDR-Fernsehen Sachsen-Anhalt</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608152" lang="de" xmltv_id="">WDR Fernsehen Bonn</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608153" lang="de" xmltv_id="">RTL Hessen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608154" lang="de" xmltv_id="">NDR Fernsehen Mecklenburg-Vorpommern</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608155" lang="de" xmltv_id="">NDR Fernsehen Schleswig-Holstein</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608156" lang="de" xmltv_id="">RTL Nordrhein-Westfalen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415149608157" lang="de" xmltv_id="">RTL Bremen & Niedersachsen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150120077" lang="de" xmltv_id="">WDR Fernsehen Essen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150120078" lang="de" xmltv_id="">SAT.1 Nordrhein-Westfalen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150120094" lang="de" xmltv_id="">SAT.1 Nordrhein-Westfalen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150120095" lang="de" xmltv_id="">WDR Fernsehen Dortmund</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150120096" lang="de" xmltv_id="">ERT World</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150120097" lang="de" xmltv_id="">Euronews English</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150120143" lang="de" xmltv_id="">WDR Fernsehen Bielefeld</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150120169" lang="de" xmltv_id="">SAT.1 Niedersachsen und Bremen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150632065" lang="de" xmltv_id="">WDR Fernsehen Aachen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150632109" lang="de" xmltv_id="">WDR Fernsehen Wuppertal</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150632110" lang="de" xmltv_id="">RTL Hamburg & Schleswig-Holstein</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150632111" lang="de" xmltv_id="">WDR Fernsehen Düsseldorf</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150632112" lang="de" xmltv_id="">Imearth</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150632113" lang="de" xmltv_id="">RTL Nordrhein-Westfalen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415150632114" lang="de" xmltv_id="">SAT.1 Hamburg und Schleswig-Holstein</channel>
|
||||
<channel site="www.magenta.tv" site_id="415151144338" lang="de" xmltv_id="">SAT.1 Rheinland-Pfalz und Hessen</channel>
|
||||
<channel site="www.magenta.tv" site_id="415151144359" lang="de" xmltv_id="">WDR Fernsehen Münster</channel>
|
||||
<channel site="www.magenta.tv" site_id="415151144360" lang="de" xmltv_id="">BR Fernsehen Nord</channel>
|
||||
<channel site="www.magenta.tv" site_id="463893544181" lang="de" xmltv_id="">France 2</channel>
|
||||
<channel site="www.magenta.tv" site_id="463895080134" lang="de" xmltv_id="">France 3</channel>
|
||||
<channel site="www.magenta.tv" site_id="481691176161" lang="de" xmltv_id="">RTL Bayern</channel>
|
||||
<channel site="www.magenta.tv" site_id="481691176162" lang="de" xmltv_id="">RTL Rhein-Neckar</channel>
|
||||
<channel site="www.magenta.tv" site_id="481694759991" lang="de" xmltv_id="">RTL Rhein-Neckar</channel>
|
||||
<channel site="www.magenta.tv" site_id="481694759992" lang="de" xmltv_id="">RTL Bayern</channel>
|
||||
<channel site="www.magenta.tv" site_id="488325160190" lang="de" xmltv_id="">ATV Avrupa</channel>
|
||||
<channel site="www.magenta.tv" site_id="488325160191" lang="de" xmltv_id="">TRT Cocuk</channel>
|
||||
<channel site="www.magenta.tv" site_id="492496936303" lang="de" xmltv_id="">Disney Channel</channel>
|
||||
<channel site="www.magenta.tv" site_id="492496936304" lang="de" xmltv_id="">TV Mainfranken</channel>
|
||||
<channel site="www.magenta.tv" site_id="492496936305" lang="de" xmltv_id="">ProSiebenSat.1</channel>
|
||||
<channel site="www.magenta.tv" site_id="492496936306" lang="de" xmltv_id="">TV Oberfranken</channel>
|
||||
<channel site="www.magenta.tv" site_id="492496936307" lang="de" xmltv_id="">ems TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="492496936308" lang="de" xmltv_id="">TV Westsachsen</channel>
|
||||
<channel site="www.magenta.tv" site_id="492496936309" lang="de" xmltv_id="">Hamburg 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="492496936310" lang="de" xmltv_id="">a.tv</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497448192" lang="de" xmltv_id="">tv.ingolstadt</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497448194" lang="de" xmltv_id="">Baden TV Süd</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497448195" lang="de" xmltv_id="">NIEDERBAYERN TV Deggendorf - Straubing</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497448196" lang="de" xmltv_id="">RFO</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497448197" lang="de" xmltv_id="">NIEDERBAYERN TV Passau</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497448198" lang="de" xmltv_id="">TVA Ostbayern</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497960281" lang="de" xmltv_id="">TV Mittelrhein</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497960282" lang="de" xmltv_id="">RFH Regionalfernsehen Harz</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497960283" lang="de" xmltv_id="">MDF.1 Fernsehen</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497960284" lang="de" xmltv_id="">JenaTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="492497960285" lang="de" xmltv_id="">allgäu.tv</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498472231" lang="de" xmltv_id="">münchen.tv</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498472232" lang="de" xmltv_id="">salve.tv</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498472233" lang="de" xmltv_id="">Oberpfalz TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498984397" lang="de" xmltv_id="">OK:TV Mainz</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498984398" lang="de" xmltv_id="">OK54 Trier</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498984399" lang="de" xmltv_id="">OK4</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498984400" lang="de" xmltv_id="">LAUSITZWELLE</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498984401" lang="de" xmltv_id="">Baden TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498984402" lang="de" xmltv_id="">rheinlOKal</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496075" lang="de" xmltv_id="">Franken Fernsehen</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496076" lang="de" xmltv_id="">DELUXE MUSIC</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496077" lang="de" xmltv_id="">Disney Channel</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496078" lang="de" xmltv_id="">SRF</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496079" lang="de" xmltv_id="">Rennsteig.TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496080" lang="de" xmltv_id="">HGTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496081" lang="de" xmltv_id="">NRWision</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496082" lang="de" xmltv_id="">Regio TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496083" lang="de" xmltv_id="">NIEDERBAYERN TV Landshut</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496084" lang="de" xmltv_id="">Friesischer Rundfunk</channel>
|
||||
<channel site="www.magenta.tv" site_id="492499496085" lang="de" xmltv_id="">OK Weinstraße</channel>
|
||||
<channel site="www.magenta.tv" site_id="509713959991" lang="de" xmltv_id="">Sky Cinema Highlights</channel>
|
||||
<channel site="www.magenta.tv" site_id="516781096166" lang="de" xmltv_id="">France 5</channel>
|
||||
<channel site="www.magenta.tv" site_id="516781096167" lang="de" xmltv_id="">BBC News</channel>
|
||||
<channel site="www.magenta.tv" site_id="516782120054" lang="de" xmltv_id="">lausitz.tv</channel>
|
||||
<channel site="www.magenta.tv" site_id="516783656172" lang="de" xmltv_id="">altenburg.tv</channel>
|
||||
<channel site="www.magenta.tv" site_id="516784168005" lang="de" xmltv_id="">France 4</channel>
|
||||
<channel site="www.magenta.tv" site_id="561114664140" lang="de" xmltv_id="">Glück Auf! TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="561123367987" lang="de" xmltv_id="">RBW</channel>
|
||||
<channel site="www.magenta.tv" site_id="587597352323" lang="de" xmltv_id="">Stimmungsgarten TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="587598887992" lang="de" xmltv_id="">RiC.today</channel>
|
||||
<channel site="www.magenta.tv" site_id="587598887993" lang="de" xmltv_id="">Fix&Foxi TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="587599400156" lang="de" xmltv_id="">Hope TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="597433895959" lang="de" xmltv_id="">Travelxp 4K</channel>
|
||||
<channel site="www.magenta.tv" site_id="610214440158" lang="de" xmltv_id="">teltOwkanal</channel>
|
||||
<channel site="www.magenta.tv" site_id="636955688283" lang="de" xmltv_id="">HT SPOR</channel>
|
||||
<channel site="www.magenta.tv" site_id="658197032097" lang="de" xmltv_id="">BLK TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="658197544149" lang="de" xmltv_id="">Lilo.TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="662243367962" lang="de" xmltv_id="">Juwelo</channel>
|
||||
<channel site="www.magenta.tv" site_id="662243880190" lang="de" xmltv_id="">RAN1</channel>
|
||||
<channel site="www.magenta.tv" site_id="669655079976" lang="de" xmltv_id="">QVC ZWEI</channel>
|
||||
<channel site="www.magenta.tv" site_id="695561768145" lang="de" xmltv_id="">Romance TV (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="695561768146" lang="de" xmltv_id="">National Geographic (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="695563816191" lang="de" xmltv_id="">Jukebox (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="695564328412" lang="de" xmltv_id="">Beate-Uhse.TV (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="695564328413" lang="de" xmltv_id="">Heimatkanal (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="698208807980" lang="de" xmltv_id="">kulturmd</channel>
|
||||
<channel site="www.magenta.tv" site_id="701488168394" lang="de" xmltv_id="">National Geographic Wild (Sky)</channel>
|
||||
<channel site="www.magenta.tv" site_id="704010792353" lang="de" xmltv_id="">GüstrowTV</channel>
|
||||
<channel site="www.magenta.tv" site_id="736340520422" lang="de" xmltv_id="">World of Freesports</channel>
|
||||
<channel site="www.magenta.tv" site_id="736340520423" lang="de" xmltv_id="">Filmgold</channel>
|
||||
<channel site="www.magenta.tv" site_id="736344616035" lang="de" xmltv_id="">KultKrimi</channel>
|
||||
<channel site="www.magenta.tv" site_id="736345639978" lang="de" xmltv_id="">Telenovela ZDF</channel>
|
||||
<channel site="www.magenta.tv" site_id="738497064302" lang="de" xmltv_id="">Landlust TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="738500136328" lang="de" xmltv_id="">Scooore</channel>
|
||||
<channel site="www.magenta.tv" site_id="745871912203" lang="de" xmltv_id="">SYLT1</channel>
|
||||
<channel site="www.magenta.tv" site_id="746148392381" lang="de" xmltv_id="">MS GOLF 1</channel>
|
||||
<channel site="www.magenta.tv" site_id="746150440202" lang="de" xmltv_id="">MS GOLF 2</channel>
|
||||
<channel site="www.magenta.tv" site_id="750315048280" lang="de" xmltv_id="">Baby TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="754135080287" lang="de" xmltv_id="">Spiegel TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="754135080288" lang="de" xmltv_id="">Grjngo</channel>
|
||||
<channel site="www.magenta.tv" site_id="754136616350" lang="de" xmltv_id="">NARUTO</channel>
|
||||
<channel site="www.magenta.tv" site_id="754137640065" lang="de" xmltv_id="">TOP SCI-FI</channel>
|
||||
<channel site="www.magenta.tv" site_id="754137640066" lang="de" xmltv_id="">TOP TRUE CRIME</channel>
|
||||
<channel site="www.magenta.tv" site_id="754138152287" lang="de" xmltv_id="">Royalworld</channel>
|
||||
<channel site="www.magenta.tv" site_id="754138663958" lang="de" xmltv_id="">Terra Mater WILD</channel>
|
||||
<channel site="www.magenta.tv" site_id="764249128121" lang="de" xmltv_id="">Moviedome</channel>
|
||||
<channel site="www.magenta.tv" site_id="764249640071" lang="de" xmltv_id="">Fabella</channel>
|
||||
<channel site="www.magenta.tv" site_id="764523048346" lang="de" xmltv_id="">Shopping Queen</channel>
|
||||
<channel site="www.magenta.tv" site_id="764523560413" lang="de" xmltv_id="">hundkatzemaus</channel>
|
||||
<channel site="www.magenta.tv" site_id="764524584021" lang="de" xmltv_id="">Bauer sucht Frau</channel>
|
||||
<channel site="www.magenta.tv" site_id="764525608043" lang="de" xmltv_id="">Alarm für Cobra 11 / Balko</channel>
|
||||
<channel site="www.magenta.tv" site_id="767935016341" lang="de" xmltv_id="">tv.berlin</channel>
|
||||
<channel site="www.magenta.tv" site_id="767936040120" lang="de" xmltv_id="">ALEX Berlin</channel>
|
||||
<channel site="www.magenta.tv" site_id="767936552360" lang="de" xmltv_id="">L-TV</channel>
|
||||
<channel site="www.magenta.tv" site_id="767936552361" lang="de" xmltv_id="">Leipzig Fernsehen</channel>
|
||||
<channel site="www.magenta.tv" site_id="767936552362" lang="de" xmltv_id="">Studio 47</channel>
|
||||
<channel site="www.magenta.tv" site_id="767937064033" lang="de" xmltv_id="">Dresden Fernsehen</channel>
|
||||
<channel site="www.magenta.tv" site_id="767937576117" lang="de" xmltv_id="">Chemnitz Fernsehen</channel>
|
||||
<channel site="www.magenta.tv" site_id="769865767977" lang="de" xmltv_id="">Sky Sport Bundesliga</channel>
|
||||
<channel site="www.magenta.tv" site_id="769867816329" lang="de" xmltv_id="">Sky Sport</channel>
|
||||
<channel site="www.magenta.tv" site_id="492498472234" lang="de" xmltv_id="">RTL</channel>
|
||||
</channels>
|
||||
354
sites/www.magenta.tv/www.magenta.tv.config.js
Normal file
354
sites/www.magenta.tv/www.magenta.tv.config.js
Normal file
@@ -0,0 +1,354 @@
|
||||
const axios = require('axios')
|
||||
const crypto = require('crypto')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(utc)
|
||||
dayjs.extend(customParseFormat)
|
||||
|
||||
const MANIFEST_URL = 'https://prod.dcm.telekom-dienste.de/v1/settings/web-mtv/manifest'
|
||||
const DEVICE_MODEL = 'WEB2_FTV'
|
||||
const PORTAL = 'release'
|
||||
const SUBSCRIBER_TYPE = 'FTV_FREEMIUM_DT'
|
||||
const CHANNEL_PAGE_SIZE = 100
|
||||
const CHANNEL_PAGE_LIMIT = 1000
|
||||
|
||||
const FALLBACK_MPX = Object.freeze({
|
||||
accountPid: 'mdeprod',
|
||||
locationIdUri: 'http://data.entertainment.tv.theplatform.eu/entertainment/data/Location/245991976396',
|
||||
feeds: {
|
||||
allChannelSchedulesFeed:
|
||||
'https://feed.entertainment.tv.theplatform.eu/f/{MpxAccountPid}/{MpxAccountPid}-all-channel-schedules',
|
||||
allChannelStationsFeed:
|
||||
'https://feed.entertainment.tv.theplatform.eu/f/{MpxAccountPid}/{MpxAccountPid}-channel-stations-main'
|
||||
}
|
||||
})
|
||||
|
||||
let session
|
||||
let manifestPromise
|
||||
|
||||
module.exports = {
|
||||
site: 'www.magenta.tv',
|
||||
days: 2,
|
||||
request: {
|
||||
cache: {
|
||||
ttl: 60 * 60 * 1000 // 1 hour
|
||||
}
|
||||
},
|
||||
async url({ channel, date }) {
|
||||
const mpx = await getMpxConfig()
|
||||
const currentSession = getSession()
|
||||
const window = getUtcWindow(date)
|
||||
|
||||
return buildScheduleUrl({
|
||||
mpx,
|
||||
session: currentSession,
|
||||
siteIds: [channel.site_id],
|
||||
window
|
||||
})
|
||||
},
|
||||
async parser({ content, channel }) {
|
||||
return parseScheduleResponse(content, channel)
|
||||
},
|
||||
async channels() {
|
||||
const mpx = await getMpxConfig()
|
||||
const currentSession = getSession()
|
||||
const channels = []
|
||||
|
||||
for (let start = 1; start <= CHANNEL_PAGE_LIMIT; start += CHANNEL_PAGE_SIZE) {
|
||||
const entries = await getChannelEntries({
|
||||
mpx,
|
||||
session: currentSession,
|
||||
start,
|
||||
end: start + CHANNEL_PAGE_SIZE - 1
|
||||
})
|
||||
|
||||
if (!entries.length) break
|
||||
|
||||
entries.forEach(entry => {
|
||||
const channel = parseChannel(entry)
|
||||
if (channel) channels.push(channel)
|
||||
})
|
||||
|
||||
if (entries.length < CHANNEL_PAGE_SIZE) break
|
||||
}
|
||||
|
||||
return channels
|
||||
}
|
||||
}
|
||||
|
||||
function createSession() {
|
||||
return {
|
||||
deviceId: crypto.randomUUID(),
|
||||
sessionId: crypto.randomUUID()
|
||||
}
|
||||
}
|
||||
|
||||
function getSession() {
|
||||
if (!session) {
|
||||
session = createSession()
|
||||
}
|
||||
|
||||
return session
|
||||
}
|
||||
|
||||
function buildCid(currentSession) {
|
||||
return `${currentSession.sessionId}::${crypto.randomUUID()}`
|
||||
}
|
||||
|
||||
function getManifestRequestConfig(currentSession) {
|
||||
return {
|
||||
headers: {
|
||||
'X-DT-Call-ID': crypto.randomUUID(),
|
||||
'X-DT-Session-ID': currentSession.sessionId
|
||||
},
|
||||
params: {
|
||||
deviceId: currentSession.deviceId,
|
||||
deviceModel: DEVICE_MODEL,
|
||||
portal: PORTAL,
|
||||
subscriberType: SUBSCRIBER_TYPE,
|
||||
$redirect: false,
|
||||
sid: currentSession.sessionId
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function getManifest() {
|
||||
if (!manifestPromise) {
|
||||
manifestPromise = axios
|
||||
.get(MANIFEST_URL, getManifestRequestConfig(getSession()))
|
||||
.then(r => r.data)
|
||||
.catch(() => null)
|
||||
}
|
||||
|
||||
return manifestPromise
|
||||
}
|
||||
|
||||
async function getMpxConfig() {
|
||||
const manifest = await getManifest()
|
||||
const manifestMpx = manifest && manifest.mpx ? manifest.mpx : {}
|
||||
|
||||
return {
|
||||
...FALLBACK_MPX,
|
||||
...manifestMpx,
|
||||
feeds: {
|
||||
...FALLBACK_MPX.feeds,
|
||||
...(manifestMpx.feeds || {})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function getChannelEntries({ mpx, session, start, end }) {
|
||||
const url = buildChannelFeedUrl({ mpx, session, start, end })
|
||||
const data = await axios
|
||||
.get(url)
|
||||
.then(r => r.data)
|
||||
.catch(() => null)
|
||||
|
||||
return Array.isArray(data && data.entries) ? data.entries : []
|
||||
}
|
||||
|
||||
function buildChannelFeedUrl({ mpx, session, start, end }) {
|
||||
const url = new URL(resolveFeedTemplate(mpx.feeds.allChannelStationsFeed, mpx.accountPid))
|
||||
|
||||
url.searchParams.set('lang', 'short-de')
|
||||
url.searchParams.set('sort', 'dt$displayChannelNumber')
|
||||
url.searchParams.set('range', `${start}-${end}`)
|
||||
url.searchParams.set('cid', buildCid(session))
|
||||
|
||||
return url.toString()
|
||||
}
|
||||
|
||||
function buildScheduleUrl({ mpx, session, siteIds, window }) {
|
||||
const url = new URL(resolveFeedTemplate(mpx.feeds.allChannelSchedulesFeed, mpx.accountPid))
|
||||
|
||||
url.searchParams.set('byId', siteIds.join('|'))
|
||||
url.searchParams.set('byListingTime', window)
|
||||
url.searchParams.set('byLocationId', mpx.locationIdUri)
|
||||
url.searchParams.set('cid', buildCid(session))
|
||||
|
||||
return url.toString()
|
||||
}
|
||||
|
||||
function resolveFeedTemplate(template, accountPid) {
|
||||
return template.replaceAll('{MpxAccountPid}', accountPid)
|
||||
}
|
||||
|
||||
function getUtcWindow(date) {
|
||||
const start = date.utc().startOf('day')
|
||||
const end = start.add(1, 'day')
|
||||
|
||||
return `${start.toISOString()}~${end.toISOString()}`
|
||||
}
|
||||
|
||||
function parseScheduleResponse(content, channel) {
|
||||
const data = parseJson(content)
|
||||
const entries = Array.isArray(data && data.entries) ? data.entries : []
|
||||
const targetSiteId = channel && channel.site_id ? String(channel.site_id) : null
|
||||
const programs = []
|
||||
|
||||
entries.forEach(entry => {
|
||||
if (targetSiteId && extractNumericId(entry.id) !== targetSiteId) return
|
||||
if (!Array.isArray(entry.listings)) return
|
||||
|
||||
entry.listings.forEach(listing => {
|
||||
const program = parseProgramme(entry, listing)
|
||||
if (program) programs.push(program)
|
||||
})
|
||||
})
|
||||
|
||||
return programs
|
||||
}
|
||||
|
||||
function parseChannel(entry) {
|
||||
if (!entry || entry['dt$isRadio']) return null
|
||||
|
||||
const station = getFirstStation(entry)
|
||||
const siteId = extractNumericId(entry.id)
|
||||
const name = station && station.title ? station.title : entry.title
|
||||
|
||||
if (!station || !siteId || !name) return null
|
||||
|
||||
return {
|
||||
lang: 'de',
|
||||
site_id: siteId,
|
||||
name
|
||||
}
|
||||
}
|
||||
|
||||
function parseProgramme(entry, listing) {
|
||||
if (
|
||||
!listing ||
|
||||
!listing.program ||
|
||||
listing.startTime === null ||
|
||||
listing.startTime === undefined ||
|
||||
listing.endTime === null ||
|
||||
listing.endTime === undefined
|
||||
) {
|
||||
return null
|
||||
}
|
||||
|
||||
const program = listing.program
|
||||
const programInfo = parseProgramInfo(listing['dt$programInfo'])
|
||||
const title = program.title
|
||||
|
||||
if (!title) return null
|
||||
|
||||
const parsed = {
|
||||
title,
|
||||
description: program.description || null,
|
||||
category: parseCategories(program.tags),
|
||||
sub_title: parseSubTitle(program, listing),
|
||||
rating: parseRating(program.ratings),
|
||||
season: normalizeNumber(program.tvSeasonNumber ?? programInfo.tvSeasonNumber),
|
||||
episode: normalizeNumber(
|
||||
program.tvSeasonEpisodeNumber ??
|
||||
programInfo.tvSeasonEpisodeNumber ??
|
||||
programInfo.seriesEpisodeNumber
|
||||
),
|
||||
image: parseProgramImage(program),
|
||||
icon: parseProgramImage(program),
|
||||
start: dayjs(Number(listing.startTime)),
|
||||
stop: dayjs(Number(listing.endTime)),
|
||||
country: parseCountry(program['dt$countries']),
|
||||
date: program.year ? String(program.year) : null
|
||||
}
|
||||
|
||||
if (parsed.image === null) delete parsed.image
|
||||
if (parsed.icon === null) delete parsed.icon
|
||||
if (parsed.category === null) delete parsed.category
|
||||
if (parsed.sub_title === null) delete parsed.sub_title
|
||||
if (parsed.rating === null) delete parsed.rating
|
||||
if (parsed.season === null) delete parsed.season
|
||||
if (parsed.episode === null) delete parsed.episode
|
||||
if (parsed.country === null) delete parsed.country
|
||||
if (parsed.date === null) delete parsed.date
|
||||
|
||||
return parsed
|
||||
}
|
||||
|
||||
function parseSubTitle(program, listing) {
|
||||
if (program.secondaryTitle && program.secondaryTitle !== program.title) {
|
||||
return program.secondaryTitle
|
||||
}
|
||||
|
||||
if (listing['dt$seriesTitle'] && listing['dt$seriesTitle'] !== program.title) {
|
||||
return listing['dt$seriesTitle']
|
||||
}
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
function parseCategories(tags) {
|
||||
if (!Array.isArray(tags)) return null
|
||||
|
||||
const categories = tags
|
||||
.filter(tag => ['category', 'genre-primary', 'genre-secondary'].includes(tag.scheme) && tag.title)
|
||||
.map(tag => tag.title)
|
||||
|
||||
return categories.length ? [...new Set(categories)] : null
|
||||
}
|
||||
|
||||
function parseRating(ratings) {
|
||||
if (!Array.isArray(ratings)) return null
|
||||
|
||||
const rating = ratings.find(item => item && item.rating && item.rating !== 'UNKNOWN')
|
||||
if (!rating) return null
|
||||
|
||||
return {
|
||||
system: rating.scheme || 'magenta',
|
||||
value: rating.rating
|
||||
}
|
||||
}
|
||||
|
||||
function parseProgramInfo(value) {
|
||||
if (!value || typeof value !== 'string') return {}
|
||||
|
||||
try {
|
||||
return JSON.parse(value.replaceAll("'", '"'))
|
||||
} catch {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
function parseProgramImage(program) {
|
||||
if (!program || !program.thumbnails) return null
|
||||
|
||||
const thumbnails = Object.values(program.thumbnails)
|
||||
.filter(thumbnail => thumbnail && thumbnail.url)
|
||||
.sort((a, b) => (b.width || 0) * (b.height || 0) - (a.width || 0) * (a.height || 0))
|
||||
|
||||
return thumbnails[0] ? thumbnails[0].url : null
|
||||
}
|
||||
|
||||
function parseCountry(value) {
|
||||
if (!value || typeof value !== 'string') return null
|
||||
return value.toUpperCase()
|
||||
}
|
||||
|
||||
function getFirstStation(entry) {
|
||||
if (!entry || !entry.stations || typeof entry.stations !== 'object') return null
|
||||
return Object.values(entry.stations)[0] || null
|
||||
}
|
||||
|
||||
function extractNumericId(uri) {
|
||||
if (!uri || typeof uri !== 'string') return null
|
||||
const match = uri.match(/(\d+)(?!.*\d)/)
|
||||
return match ? match[1] : null
|
||||
}
|
||||
|
||||
function normalizeNumber(value) {
|
||||
return value === null || value === undefined || value === '' ? null : value
|
||||
}
|
||||
|
||||
function parseJson(content) {
|
||||
if (!content) return {}
|
||||
if (typeof content !== 'string') return content
|
||||
|
||||
try {
|
||||
return JSON.parse(content)
|
||||
} catch {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
262
sites/www.magenta.tv/www.magenta.tv.test.js
Normal file
262
sites/www.magenta.tv/www.magenta.tv.test.js
Normal file
@@ -0,0 +1,262 @@
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const crypto = require('crypto')
|
||||
const dayjs = require('dayjs')
|
||||
const utc = require('dayjs/plugin/utc')
|
||||
const customParseFormat = require('dayjs/plugin/customParseFormat')
|
||||
|
||||
dayjs.extend(customParseFormat)
|
||||
dayjs.extend(utc)
|
||||
|
||||
jest.mock('axios')
|
||||
|
||||
const fixture = JSON.parse(fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8'))
|
||||
const date = dayjs.utc('2026-05-11', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '262270504164',
|
||||
xmltv_id: 'Sat1.de'
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
jest.resetModules()
|
||||
jest.restoreAllMocks()
|
||||
})
|
||||
|
||||
function loadConfig() {
|
||||
const axios = require('axios')
|
||||
const config = require('./www.magenta.tv.config.js')
|
||||
|
||||
return {
|
||||
axios,
|
||||
...config
|
||||
}
|
||||
}
|
||||
|
||||
it('can generate valid url', async () => {
|
||||
const { axios, url } = loadConfig()
|
||||
|
||||
jest
|
||||
.spyOn(crypto, 'randomUUID')
|
||||
.mockReturnValueOnce('device-id')
|
||||
.mockReturnValueOnce('session-id')
|
||||
.mockReturnValueOnce('manifest-call-id')
|
||||
.mockReturnValueOnce('schedule-call-id')
|
||||
|
||||
axios.get.mockImplementation(url => {
|
||||
if (url === 'https://prod.dcm.telekom-dienste.de/v1/settings/web-mtv/manifest') {
|
||||
return Promise.resolve({ data: fixture.manifest })
|
||||
}
|
||||
|
||||
return Promise.reject(new Error('unexpected request'))
|
||||
})
|
||||
|
||||
const result = await url({ channel, date })
|
||||
|
||||
expect(result).toBe(
|
||||
'https://feed.entertainment.tv.theplatform.eu/f/mdeprod/mdeprod-all-channel-schedules?byId=262270504164&byListingTime=2026-05-11T00%3A00%3A00.000Z%7E2026-05-12T00%3A00%3A00.000Z&byLocationId=http%3A%2F%2Fdata.entertainment.tv.theplatform.eu%2Fentertainment%2Fdata%2FLocation%2F245991976396&cid=session-id%3A%3Aschedule-call-id'
|
||||
)
|
||||
|
||||
expect(axios.get).toHaveBeenCalledWith(
|
||||
'https://prod.dcm.telekom-dienste.de/v1/settings/web-mtv/manifest',
|
||||
expect.objectContaining({
|
||||
headers: {
|
||||
'X-DT-Call-ID': 'manifest-call-id',
|
||||
'X-DT-Session-ID': 'session-id'
|
||||
},
|
||||
params: expect.objectContaining({
|
||||
deviceId: 'device-id',
|
||||
sid: 'session-id',
|
||||
deviceModel: 'WEB2_FTV',
|
||||
portal: 'release',
|
||||
subscriberType: 'FTV_FREEMIUM_DT',
|
||||
$redirect: false
|
||||
})
|
||||
})
|
||||
)
|
||||
})
|
||||
|
||||
it('can map a channel feed entry', () => {
|
||||
const { axios, channels } = loadConfig()
|
||||
|
||||
axios.get.mockImplementation((url) => {
|
||||
if (url === 'https://prod.dcm.telekom-dienste.de/v1/settings/web-mtv/manifest') {
|
||||
return Promise.resolve({ data: fixture.manifest })
|
||||
}
|
||||
|
||||
if (new URL(url).searchParams.get('range') === '1-100') {
|
||||
return Promise.resolve({ data: fixture.channels })
|
||||
}
|
||||
|
||||
return Promise.resolve({ data: { entries: [] } })
|
||||
})
|
||||
|
||||
return channels().then(result => {
|
||||
expect(result[0]).toMatchObject({
|
||||
lang: 'de',
|
||||
site_id: '259549736360',
|
||||
name: 'Das Erste'
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
it('can ignore radio channels', async () => {
|
||||
const { axios, channels } = loadConfig()
|
||||
|
||||
axios.get.mockImplementation((url) => {
|
||||
if (url === 'https://prod.dcm.telekom-dienste.de/v1/settings/web-mtv/manifest') {
|
||||
return Promise.resolve({ data: fixture.manifest })
|
||||
}
|
||||
|
||||
if (new URL(url).searchParams.get('range') === '1-100') {
|
||||
return Promise.resolve({ data: fixture.channels })
|
||||
}
|
||||
|
||||
return Promise.resolve({ data: { entries: [] } })
|
||||
})
|
||||
|
||||
const result = await channels()
|
||||
|
||||
expect(result).toHaveLength(1)
|
||||
expect(result[0].name).toBe('Das Erste')
|
||||
})
|
||||
|
||||
it('can paginate channels', async () => {
|
||||
const { axios, channels } = loadConfig()
|
||||
|
||||
jest
|
||||
.spyOn(crypto, 'randomUUID')
|
||||
.mockReturnValueOnce('device-id')
|
||||
.mockReturnValueOnce('session-id')
|
||||
.mockReturnValueOnce('manifest-call-id')
|
||||
.mockImplementation(() => 'call-id')
|
||||
|
||||
const page1 = {
|
||||
entries: Array.from({ length: 100 }, (_, index) => ({
|
||||
id: `http://data.entertainment.tv.theplatform.eu/entertainment/data/ChannelSchedule/${1000 + index}`,
|
||||
title: `Channel ${index + 1}`,
|
||||
stations: {
|
||||
[`station-${index}`]: {
|
||||
title: `Channel ${index + 1}`,
|
||||
thumbnails: {
|
||||
stationLogo: {
|
||||
url: `https://example.com/${index + 1}.png`
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
'dt$isRadio': false
|
||||
}))
|
||||
}
|
||||
const page2 = {
|
||||
entries: [
|
||||
{
|
||||
id: 'http://data.entertainment.tv.theplatform.eu/entertainment/data/ChannelSchedule/2001',
|
||||
title: 'Channel 101',
|
||||
stations: {
|
||||
'station-101': {
|
||||
title: 'Channel 101',
|
||||
thumbnails: {
|
||||
stationLogo: {
|
||||
url: 'https://example.com/101.png'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
'dt$isRadio': false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
axios.get.mockImplementation((url, options) => {
|
||||
if (url === 'https://prod.dcm.telekom-dienste.de/v1/settings/web-mtv/manifest') {
|
||||
return Promise.resolve({ data: fixture.manifest })
|
||||
}
|
||||
|
||||
const range = new URL(url).searchParams.get('range')
|
||||
if (range === '1-100') return Promise.resolve({ data: page1 })
|
||||
if (range === '101-200') return Promise.resolve({ data: page2 })
|
||||
|
||||
return Promise.reject(new Error(`unexpected request ${url} ${JSON.stringify(options)}`))
|
||||
})
|
||||
|
||||
const result = await channels()
|
||||
|
||||
expect(result).toHaveLength(101)
|
||||
expect(result[0]).toMatchObject({
|
||||
site_id: '1000',
|
||||
name: 'Channel 1'
|
||||
})
|
||||
expect(result[100]).toMatchObject({
|
||||
site_id: '2001',
|
||||
name: 'Channel 101'
|
||||
})
|
||||
})
|
||||
|
||||
it('can parse response', async () => {
|
||||
const { parser } = loadConfig()
|
||||
const result = await parser({ content: JSON.stringify(fixture.schedule), channel })
|
||||
const serialized = result.map(program => ({
|
||||
...program,
|
||||
start: program.start.toJSON(),
|
||||
stop: program.stop.toJSON()
|
||||
}))
|
||||
|
||||
expect(serialized).toMatchObject([
|
||||
{
|
||||
start: '2026-05-11T00:10:00.000Z',
|
||||
stop: '2026-05-11T01:07:00.000Z',
|
||||
title: 'FBI: Special Crime Unit',
|
||||
sub_title: 'Aufstand',
|
||||
description:
|
||||
'Eine gigantische Explosion in Brooklyn ruft das FBI auf den Plan. Hinweise deuten auf eine vorsätzliche Fremdeinwirkung hin.',
|
||||
category: ['200-Serie', 'Krimi', 'Action', 'Thriller'],
|
||||
season: 8,
|
||||
episode: 7,
|
||||
country: 'US',
|
||||
date: '2025'
|
||||
}
|
||||
])
|
||||
})
|
||||
|
||||
it('can handle empty guide', async () => {
|
||||
const { parser } = loadConfig()
|
||||
const result = await parser({
|
||||
channel,
|
||||
content: '{"entries":[{"id":"http://data.entertainment.tv.theplatform.eu/entertainment/data/ChannelSchedule/262270504164","listings":[]}]}'
|
||||
})
|
||||
|
||||
expect(result).toMatchObject([])
|
||||
})
|
||||
|
||||
it('can handle listings without program', async () => {
|
||||
const { parser } = loadConfig()
|
||||
const result = await parser({
|
||||
channel,
|
||||
content:
|
||||
'{"entries":[{"id":"http://data.entertainment.tv.theplatform.eu/entertainment/data/ChannelSchedule/262270504164","listings":[{"startTime":1,"endTime":2}]}]}'
|
||||
})
|
||||
|
||||
expect(result).toMatchObject([])
|
||||
})
|
||||
|
||||
it('can build a UTC schedule window', async () => {
|
||||
const { axios, url } = loadConfig()
|
||||
|
||||
jest
|
||||
.spyOn(crypto, 'randomUUID')
|
||||
.mockReturnValueOnce('device-id')
|
||||
.mockReturnValueOnce('session-id')
|
||||
.mockReturnValueOnce('manifest-call-id')
|
||||
.mockReturnValueOnce('schedule-call-id')
|
||||
|
||||
axios.get.mockResolvedValue({ data: fixture.manifest })
|
||||
|
||||
const result = await url({
|
||||
channel,
|
||||
date
|
||||
})
|
||||
|
||||
expect(new URL(result).searchParams.get('byListingTime')).toBe(
|
||||
'2026-05-11T00:00:00.000Z~2026-05-12T00:00:00.000Z'
|
||||
)
|
||||
})
|
||||
Reference in New Issue
Block a user