From 8e21a9c85d4752a3207cb4588a91df626e6929be Mon Sep 17 00:00:00 2001 From: knylbyte <40831653+knylbyte@users.noreply.github.com> Date: Tue, 21 Jul 2026 18:31:07 +0200 Subject: [PATCH 1/4] feat: added new site -> www.dazn.com/de-DE --- sites/dazn.de/__data__/content.json | 154 +++++++++++++++++++ sites/dazn.de/dazn.de.channels.xml | 124 ++++++++++++++++ sites/dazn.de/dazn.de.config.js | 219 ++++++++++++++++++++++++++++ sites/dazn.de/dazn.de.test.js | 122 ++++++++++++++++ sites/dazn.de/readme.md | 21 +++ 5 files changed, 640 insertions(+) create mode 100644 sites/dazn.de/__data__/content.json create mode 100644 sites/dazn.de/dazn.de.channels.xml create mode 100644 sites/dazn.de/dazn.de.config.js create mode 100644 sites/dazn.de/dazn.de.test.js create mode 100644 sites/dazn.de/readme.md diff --git a/sites/dazn.de/__data__/content.json b/sites/dazn.de/__data__/content.json new file mode 100644 index 000000000..3871aef3b --- /dev/null +++ b/sites/dazn.de/__data__/content.json @@ -0,0 +1,154 @@ +{ + "Id": "LinearChannels", + "Title": "Kanäle", + "Tiles": [ + { + "Id": "Linear:bj5o60qt6uoe1clfdsev239pr", + "AssetId": "bj5o60qt6uoe1clfdsev239pr", + "Title": "DAZN 1", + "LogoImage": { + "ImageMimeType": "png", + "ImageType": "image-logo", + "Id": "Logo_LTV_DAZN_1" + }, + "LinearSchedule": { + "Now": { + "Title": "Spanish Copa del Rey Soccer", + "EpisodeTitle": "Atlético Madrid - FC Barcelona", + "Genre": [ + { + "name": "Soccer", + "MappedValue": [1] + } + ], + "Description": "Aus dem Riyadh Air Metropolitano in Madrid, Spanien.", + "Start": "2026-07-19T15:00:00Z", + "End": "2026-07-19T17:00:00Z", + "Image": { + "ImageMimeType": "png", + "ImageType": "image-portrait", + "Id": "DAZN_1" + }, + "BackgroundImage": { + "ImageMimeType": "jpg", + "ImageType": "image-background", + "Id": "111745_2026-07-19_EP037460110300_108429740567_2026-02-13T20:01:23Z_GNLZZGG002QL9SB" + }, + "GradientBackgroundImage": { + "ImageMimeType": "jpg", + "ImageType": "image-background", + "Id": "111745_2026-07-19_EP037460110300_108429740567_2026-02-13T20:01:23Z_GNLZZGG002QL9SB" + }, + "IsLive": false, + "EventYear": "2026", + "ProgramType": "Sports event", + "TvRating": null + }, + "Next": { + "Title": "The Late Kick 2026", + "EpisodeTitle": "Folge 6", + "Genre": [ + { + "name": "Soccer", + "MappedValue": [1] + } + ], + "Description": "", + "Start": "2026-07-19T17:00:00Z", + "End": "2026-07-19T17:50:00Z", + "Image": { + "ImageMimeType": "png", + "ImageType": "image-portrait", + "Id": "DAZN_1" + }, + "BackgroundImage": { + "ImageMimeType": "jpg", + "ImageType": "image-background", + "Id": "111745_2026-07-19_SH064823960000_108834056900_2026-06-16T01:52:26Z_p33375908_st_h10_aa" + }, + "GradientBackgroundImage": { + "ImageMimeType": "jpg", + "ImageType": "image-background", + "Id": "111745_2026-07-19_SH064823960000_108834056900_2026-06-16T01:52:26Z_p33375908_st_h10_aa" + }, + "IsLive": false, + "EventYear": "2026", + "ProgramType": "Sports non-event", + "TvRating": null + }, + "Later": [ + { + "Title": "Best of DAZN - Highlights", + "EpisodeTitle": "", + "Genre": [ + { + "name": "Entertainment" + } + ], + "Description": "Bei Best of DAZN erwarten euch ausgewählte Highlights.", + "Start": "2026-07-19T17:50:00Z", + "End": "2026-07-19T18:10:00Z", + "Image": { + "ImageMimeType": "png", + "ImageType": "image-portrait", + "Id": "DAZN_1" + }, + "BackgroundImage": { + "ImageMimeType": "jpg", + "ImageType": "image-background", + "Id": "111745_2026-07-19_SH048946860000_101077135689_2022-04-22T10:18:32Z_p19111987_i_h8_aa" + }, + "GradientBackgroundImage": { + "ImageMimeType": "jpg", + "ImageType": "image-background", + "Id": "111745_2026-07-19_SH048946860000_101077135689_2022-04-22T10:18:32Z_p19111987_i_h8_aa" + }, + "IsLive": false, + "EventYear": "2020", + "ProgramType": "Sports non-event", + "TvRating": null + }, + { + "Title": "Bundesliga Soccer", + "EpisodeTitle": "31. Spieltag", + "Genre": [ + { + "name": "Soccer", + "MappedValue": [1] + } + ], + "Description": "Berichtet wird vom 31. Spieltag der Fußball-Bundesliga.", + "Start": "2026-07-20T06:00:00Z", + "End": "2026-07-20T07:05:00Z", + "Image": { + "ImageMimeType": "png", + "ImageType": "image-portrait", + "Id": "DAZN_1" + }, + "BackgroundImage": { + "ImageMimeType": "jpg", + "ImageType": "image-background", + "Id": "111745_2026-07-20_SH037261360000_109454514209_2025-08-28T09:24:36Z_p7956966_i_h8_aj" + }, + "IsLive": false, + "EventYear": "2026", + "ProgramType": "Sports non-event", + "TvRating": null + } + ] + } + }, + { + "Id": "Linear:9dmerrb96eue11mjxhgbnyjho", + "AssetId": "9dmerrb96eue11mjxhgbnyjho", + "Title": "Rally TV", + "LogoImage": { + "ImageMimeType": "png", + "ImageType": "image-logo", + "Id": "Logo_Rally_TV" + }, + "LinearSchedule": null + } + ], + "Type": "Linear" +} diff --git a/sites/dazn.de/dazn.de.channels.xml b/sites/dazn.de/dazn.de.channels.xml new file mode 100644 index 000000000..a16385417 --- /dev/null +++ b/sites/dazn.de/dazn.de.channels.xml @@ -0,0 +1,124 @@ + + + Eurosport 1 + DAZN 2 + DAZN FAST+ + DAZN RISE + NHL FAST Channel + Rally TV + Eurosport 2 + DAZN 1 + MLB Network + Red Bull TV + Unbeaten + DFB.TV + NFL Network + SPORTDIGITAL FUSSBALL + Unbeaten + Red Bull TV + NHL FAST Channel + NFL Network: Live 24/7 Coverage + NFL Network: Live 24/7 Coverage + Red Bull TV: Extreme Sports Channel + NHL FAST Channel + Unbeaten: 24/7 Global Sports Channel + Rally TV + MLB Network + Unbeaten: 24/7 Global Sports Channel + Rally TV + Red Bull TV + NFL Network + Rally TV + Red Bull TV: Extreme Sports Channel + NHL FAST Channel + NFL Network: Live 24/7 Coverage + Unbeaten: 24/7 Global Sports Channel + Red Bull TV: Extreme Sports Channel + DAZN 1 USA + Fubo Sports + Unbeaten: 24/7 Global Sports Channel + Rally TV + NFL Network + Red Bull TV: Extreme Sports Channel + Unbeaten: 24/7 Global Sports Channel + Rally TV + DSPORTS 2 + DSPORTS + DSPORTS + + DSPORTS + DSPORTS + Red Bull TV + Eurosport 2 + Eurosport 1 + LALIGA TV HYPERMOTION + Rally TV + DAZN 2 + NFL Network + NHL FAST Channel + DAZN 1 + DAZN F1® + DAZN Mundial + Unbeaten + DSPORTS + DSPORTS + DSPORTS + Rally TV + NFL Network + Red Bull TV + Unbeaten + NHL FAST Channel + NFL Network + NHL FAST Channel + Red Bull TV + Unbeaten + Unbeaten + MLB Network + Rally TV + Red Bull TV + Radio TV Serie A + Inter TV + Eurosport 4 + Real Time + Eurosport 1 + DAZN 1 + DMAX + NFL Network + Unbeaten + NHL FAST Channel + Eurosport 5 + Eurosport 3 + Eurosport 6 + Discovery + NOVE + Eurosport 2 + Red Bull TV + Rally TV + Milan TV + NHL FAST Channel + Unbeaten + レッドブルTV(24時間チャンネル) + NFL Network + Rally TV + Red Bull TV: Extreme Sports Channel + NHL FAST Channel + NFL Network: Live 24/7 Coverage + Unbeaten: 24/7 Global Sports Channel + Red Bull TV + NFL Network + Rally TV + Unbeaten + NHL FAST Channel + DAZN 2 + DAZN 5 + DAZN 3 + Red Bull TV + DAZN 1 + NFL Network + DAZN 4 + Unbeaten + Red Bull TV + Unbeaten + NHL FAST Channel + Rally TV + NFL Network + diff --git a/sites/dazn.de/dazn.de.config.js b/sites/dazn.de/dazn.de.config.js new file mode 100644 index 000000000..9b933680b --- /dev/null +++ b/sites/dazn.de/dazn.de.config.js @@ -0,0 +1,219 @@ +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') + +dayjs.extend(utc) + +const API_URL = 'https://rail-router.discovery.indazn.com/eu/v10/Rail' +const IMAGE_API_URL = 'https://image.discovery.indazn.com/eu/v3/linear-channel/none' +const DEFAULT_COUNTRY = 'de' +const SUPPORTED_COUNTRIES = + 'ad ae af ag ai al am ao aq ar at au aw ax az ba bb bd be bf bg bh bi bj bl bm bn bo bq br bs bt bv bw bz ca cc cd cf cg ch ci ck cl cm co cr cv cw cx cy cz de dj dk dm do dz ec ee eg eh er es et fi fj fk fm fo fr ga gb gd ge gf gh gl gm gn gp gq gr gs gt gu gw gy hk hm hn hr ht hu id ie il in io iq is it jm jo jp ke kg kh ki km kn kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md me mf mg mh mk ml mm mn mo mp mq mr ms mt mu mv mw mx my mz na nc ne nf ng ni nl no np nr nu nz om pa pe pf pg ph pk pl pm pn ps pt pw py qa re ro rs rw sa sb sc sd se sg sh si sj sk sl sn so sr ss st sv sx sz tc td tf tg th tj tk tl tm tn to tr tt tv tw tz ua ug um us uy uz vc ve vg vi vn vu wf ws xk ye yt za zm zw'.split( + ' ' + ) +const COUNTRY_LANGUAGES = { + ar: 'es', + at: 'de', + be: 'fr', + bo: 'es', + br: 'pt', + ch: 'de', + cl: 'es', + co: 'es', + cr: 'es', + de: 'de', + do: 'es', + ec: 'es', + es: 'es', + fr: 'fr', + gt: 'es', + hn: 'es', + it: 'it', + jp: 'ja', + li: 'de', + lu: 'fr', + mc: 'fr', + mx: 'es', + ni: 'es', + nl: 'nl', + pa: 'es', + pe: 'es', + pt: 'pt', + py: 'es', + sv: 'es', + tw: 'zh', + uy: 'es', + ve: 'es' +} +const PREFERRED_COUNTRIES = { + de: 'de', + en: 'gb', + es: 'es', + fr: 'fr', + it: 'it', + ja: 'jp', + nl: 'nl', + pt: 'pt', + zh: 'tw' +} +const HEADERS = { + Accept: 'application/json, text/plain, */*', + Referer: 'https://www.dazn.com/' +} + +module.exports = { + site: 'dazn.de', + days: 3, + url({ channel }) { + const { country } = parseSiteId(channel.site_id) + + return createApiUrl(country, channel.lang || getLanguage(country)) + }, + request: { + headers: HEADERS, + cache: { + ttl: 5 * 60 * 1000 + } + }, + parser({ content, channel, date }) { + const data = parseData(content) + const tiles = Array.isArray(data?.Tiles) ? data.Tiles : [] + const { assetId } = parseSiteId(channel.site_id) + const tile = tiles.find(item => item.AssetId === assetId) + + if (!tile?.LinearSchedule) return [] + + const schedule = tile.LinearSchedule + const programs = [ + schedule.Now, + schedule.Next, + ...(Array.isArray(schedule.Later) ? schedule.Later : []) + ].filter(Boolean) + + return programs + .filter(item => item.Start && item.End && dayjs.utc(item.Start).isSame(date, 'day')) + .map(parseProgram) + }, + async channels({ country, lang } = {}) { + if (country) return loadChannels(country, lang) + + const channelsByAssetAndLanguage = new Map() + for (const supportedCountry of SUPPORTED_COUNTRIES) { + for (const channel of await loadChannels(supportedCountry)) { + const { assetId, country } = parseSiteId(channel.site_id) + const key = `${assetId}#${channel.lang}` + const current = channelsByAssetAndLanguage.get(key) + + if (!current || isPreferredCountry(country, channel.lang)) { + channelsByAssetAndLanguage.set(key, channel) + } + } + } + + return Array.from(channelsByAssetAndLanguage.values()) + } +} + +async function loadChannels(country, lang) { + country = country.toLowerCase() + if (!SUPPORTED_COUNTRIES.includes(country)) { + throw new Error(`Unsupported DAZN country: ${country}`) + } + + const language = lang || getLanguage(country) + const { data } = await axios.get(createApiUrl(country, language), { headers: HEADERS }) + const tiles = Array.isArray(data?.Tiles) ? data.Tiles : [] + + return tiles + .filter(tile => tile.AssetId && tile.Title) + .map(tile => ({ + lang: language, + site_id: createSiteId(country, tile.AssetId), + name: tile.Title, + logo: createImageUrl(tile.LogoImage, { + resizeAction: 'contain', + width: 68, + height: 56, + format: 'png' + }) + })) +} + +function createApiUrl(country, language) { + const params = new URLSearchParams({ + platform: 'web', + id: 'Livetvschedule', + country, + brand: 'dazn', + languageCode: language + }) + + return `${API_URL}?${params}` +} + +function createSiteId(country, assetId) { + return country === DEFAULT_COUNTRY ? assetId : `${country}#${assetId}` +} + +function parseSiteId(siteId) { + const separator = siteId.indexOf('#') + + if (separator === -1) return { country: DEFAULT_COUNTRY, assetId: siteId } + + return { + country: siteId.slice(0, separator), + assetId: siteId.slice(separator + 1) + } +} + +function getLanguage(country) { + return COUNTRY_LANGUAGES[country] || 'en' +} + +function isPreferredCountry(country, language) { + return country === PREFERRED_COUNTRIES[language] +} + +function parseData(content) { + try { + return typeof content === 'string' ? JSON.parse(content) : content + } catch { + return null + } +} + +function parseProgram(item) { + const program = { + title: item.Title, + start: item.Start, + stop: item.End + } + + if (item.EpisodeTitle) program.subTitle = item.EpisodeTitle + if (item.Description) program.description = item.Description + if (item.EventYear) program.date = item.EventYear + if (item.TvRating) program.rating = item.TvRating + + const categories = (Array.isArray(item.Genre) ? item.Genre : []) + .map(genre => genre?.name) + .filter(Boolean) + if (item.ProgramType) categories.push(item.ProgramType) + if (categories.length) program.categories = [...new Set(categories)] + + const image = item.BackgroundImage || item.GradientBackgroundImage || item.Image + const icon = createImageUrl(image) + if (icon) program.icon = icon + + return program +} + +function createImageUrl( + image, + { resizeAction = 'fill', width = 856, height = 481, format = 'webp' } = {} +) { + if (!image?.Id) return null + + return `${IMAGE_API_URL}/${encodeURIComponent( + image.Id + )}/${resizeAction}/center/center/none/80/${width}/${height}/${format}/image?brand=dazn` +} diff --git a/sites/dazn.de/dazn.de.test.js b/sites/dazn.de/dazn.de.test.js new file mode 100644 index 000000000..4892c09f3 --- /dev/null +++ b/sites/dazn.de/dazn.de.test.js @@ -0,0 +1,122 @@ +const fs = require('fs') +const path = require('path') +const axios = require('axios') +const dayjs = require('dayjs') +const utc = require('dayjs/plugin/utc') +const customParseFormat = require('dayjs/plugin/customParseFormat') +const { channels, parser, url } = require('./dazn.de.config.js') + +dayjs.extend(utc) +dayjs.extend(customParseFormat) + +jest.mock('axios') + +const date = dayjs.utc('2026-07-19', 'YYYY-MM-DD').startOf('day') +const channel = { site_id: 'bj5o60qt6uoe1clfdsev239pr' } +const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'), 'utf8') + +it('can generate valid url', () => { + expect(url({ channel })).toBe( + 'https://rail-router.discovery.indazn.com/eu/v10/Rail?platform=web&id=Livetvschedule&country=de&brand=dazn&languageCode=de' + ) +}) + +it('can generate regional url', () => { + expect(url({ channel: { site_id: 'es#asset-id', lang: 'es' } })).toBe( + 'https://rail-router.discovery.indazn.com/eu/v10/Rail?platform=web&id=Livetvschedule&country=es&brand=dazn&languageCode=es' + ) +}) + +it('can parse response', () => { + const results = parser({ content, channel, date }) + + expect(results).toHaveLength(3) + expect(results[0]).toMatchObject({ + title: 'Spanish Copa del Rey Soccer', + subTitle: 'Atlético Madrid - FC Barcelona', + description: 'Aus dem Riyadh Air Metropolitano in Madrid, Spanien.', + categories: ['Soccer', 'Sports event'], + date: '2026', + start: '2026-07-19T15:00:00Z', + stop: '2026-07-19T17:00:00Z', + icon: 'https://image.discovery.indazn.com/eu/v3/linear-channel/none/111745_2026-07-19_EP037460110300_108429740567_2026-02-13T20%3A01%3A23Z_GNLZZGG002QL9SB/fill/center/center/none/80/856/481/webp/image?brand=dazn' + }) + expect(results[2]).toMatchObject({ + title: 'Best of DAZN - Highlights', + description: 'Bei Best of DAZN erwarten euch ausgewählte Highlights.', + categories: ['Entertainment', 'Sports non-event'], + start: '2026-07-19T17:50:00Z', + stop: '2026-07-19T18:10:00Z' + }) +}) + +it('can filter response by date', () => { + const results = parser({ content, channel, date: date.add(1, 'day') }) + + expect(results).toHaveLength(1) + expect(results[0]).toMatchObject({ + title: 'Bundesliga Soccer', + start: '2026-07-20T06:00:00Z', + stop: '2026-07-20T07:05:00Z' + }) +}) + +it('can handle empty guide', () => { + expect(parser({ content: '', channel, date })).toEqual([]) + expect(parser({ content, channel: { site_id: '9dmerrb96eue11mjxhgbnyjho' }, date })).toEqual([]) +}) + +it('can create channel list', async () => { + axios.get.mockResolvedValue({ data: JSON.parse(content) }) + + const results = await channels({ country: 'de' }) + + expect(results).toHaveLength(2) + expect(results[0]).toMatchObject({ + lang: 'de', + site_id: 'bj5o60qt6uoe1clfdsev239pr', + name: 'DAZN 1', + logo: 'https://image.discovery.indazn.com/eu/v3/linear-channel/none/Logo_LTV_DAZN_1/contain/center/center/none/80/68/56/png/image?brand=dazn' + }) + expect(results[0]).not.toHaveProperty('xmltv_id') +}) + +it('can create one deduplicated channel list', async () => { + axios.get.mockClear() + axios.get.mockResolvedValue({ data: JSON.parse(content) }) + + const results = await channels() + + expect(axios.get).toHaveBeenCalledTimes(235) + expect(results).toHaveLength(18) + expect(results).toEqual( + expect.arrayContaining([ + expect.objectContaining({ lang: 'de', site_id: 'bj5o60qt6uoe1clfdsev239pr' }), + expect.objectContaining({ lang: 'es', site_id: 'es#bj5o60qt6uoe1clfdsev239pr' }), + expect.objectContaining({ lang: 'en', site_id: 'gb#bj5o60qt6uoe1clfdsev239pr' }) + ]) + ) + + const keys = results.map(result => { + const assetId = result.site_id.includes('#') ? result.site_id.split('#')[1] : result.site_id + + return `${assetId}#${result.lang}` + }) + expect(new Set(keys).size).toBe(results.length) +}) + +it('can create regional channel list', async () => { + axios.get.mockResolvedValue({ data: JSON.parse(content) }) + + const results = await channels({ country: 'es', lang: 'es' }) + + expect(axios.get).toHaveBeenCalledWith( + 'https://rail-router.discovery.indazn.com/eu/v10/Rail?platform=web&id=Livetvschedule&country=es&brand=dazn&languageCode=es', + expect.any(Object) + ) + expect(results[0]).toMatchObject({ + lang: 'es', + site_id: 'es#bj5o60qt6uoe1clfdsev239pr', + name: 'DAZN 1' + }) +}) diff --git a/sites/dazn.de/readme.md b/sites/dazn.de/readme.md new file mode 100644 index 000000000..676d9167a --- /dev/null +++ b/sites/dazn.de/readme.md @@ -0,0 +1,21 @@ +# dazn.de + +https://www.dazn.com/de-DE/epg-fixture/ + +### Download the guide + +```sh +npm run grab --- --sites=dazn.de +``` + +### Update channel list + +```sh +npm run channels:parse --- --config=./sites/dazn.de/dazn.de.config.js --output=./sites/dazn.de/dazn.de.channels.xml +``` + +### Test + +```sh +npm test --- dazn.de +``` From 125608e148af11a89a74eb076a695608a8b9913d Mon Sep 17 00:00:00 2001 From: knylbyte <40831653+knylbyte@users.noreply.github.com> Date: Tue, 28 Jul 2026 15:02:32 +0200 Subject: [PATCH 2/4] fix: rename DAZN site to dazn.com --- .../__data__/content.json | 0 sites/dazn.com/dazn.com.channels.xml | 124 ++++++++++++++++++ .../dazn.com.config.js} | 2 +- .../dazn.com.test.js} | 2 +- sites/dazn.com/readme.md | 21 +++ sites/dazn.de/dazn.de.channels.xml | 124 ------------------ sites/dazn.de/readme.md | 21 --- 7 files changed, 147 insertions(+), 147 deletions(-) rename sites/{dazn.de => dazn.com}/__data__/content.json (100%) create mode 100644 sites/dazn.com/dazn.com.channels.xml rename sites/{dazn.de/dazn.de.config.js => dazn.com/dazn.com.config.js} (96%) rename sites/{dazn.de/dazn.de.test.js => dazn.com/dazn.com.test.js} (95%) create mode 100644 sites/dazn.com/readme.md delete mode 100644 sites/dazn.de/dazn.de.channels.xml delete mode 100644 sites/dazn.de/readme.md diff --git a/sites/dazn.de/__data__/content.json b/sites/dazn.com/__data__/content.json similarity index 100% rename from sites/dazn.de/__data__/content.json rename to sites/dazn.com/__data__/content.json diff --git a/sites/dazn.com/dazn.com.channels.xml b/sites/dazn.com/dazn.com.channels.xml new file mode 100644 index 000000000..b9bcb14a0 --- /dev/null +++ b/sites/dazn.com/dazn.com.channels.xml @@ -0,0 +1,124 @@ + + + Eurosport 1 + DAZN 2 + DAZN FAST+ + DAZN RISE + NHL FAST Channel + Rally TV + Eurosport 2 + DAZN 1 + MLB Network + Red Bull TV + Unbeaten + DFB.TV + NFL Network + SPORTDIGITAL FUSSBALL + Unbeaten + Red Bull TV + NHL FAST Channel + NFL Network: Live 24/7 Coverage + NFL Network: Live 24/7 Coverage + Red Bull TV: Extreme Sports Channel + NHL FAST Channel + Unbeaten: 24/7 Global Sports Channel + Rally TV + MLB Network + Unbeaten: 24/7 Global Sports Channel + Rally TV + Red Bull TV + NFL Network + Rally TV + Red Bull TV: Extreme Sports Channel + NHL FAST Channel + NFL Network: Live 24/7 Coverage + Unbeaten: 24/7 Global Sports Channel + Red Bull TV: Extreme Sports Channel + DAZN 1 USA + Fubo Sports + Unbeaten: 24/7 Global Sports Channel + Rally TV + NFL Network + Red Bull TV: Extreme Sports Channel + Unbeaten: 24/7 Global Sports Channel + Rally TV + DSPORTS 2 + DSPORTS + DSPORTS + + DSPORTS + DSPORTS + Red Bull TV + Eurosport 2 + Eurosport 1 + LALIGA TV HYPERMOTION + Rally TV + DAZN 2 + NFL Network + NHL FAST Channel + DAZN 1 + DAZN F1® + DAZN Mundial + Unbeaten + DSPORTS + DSPORTS + DSPORTS + Rally TV + NFL Network + Red Bull TV + Unbeaten + NHL FAST Channel + NFL Network + NHL FAST Channel + Red Bull TV + Unbeaten + Unbeaten + MLB Network + Rally TV + Red Bull TV + Radio TV Serie A + Inter TV + Eurosport 4 + Real Time + Eurosport 1 + DAZN 1 + DMAX + NFL Network + Unbeaten + NHL FAST Channel + Eurosport 5 + Eurosport 3 + Eurosport 6 + Discovery + NOVE + Eurosport 2 + Red Bull TV + Rally TV + Milan TV + NHL FAST Channel + Unbeaten + レッドブルTV(24時間チャンネル) + NFL Network + Rally TV + Red Bull TV: Extreme Sports Channel + NHL FAST Channel + NFL Network: Live 24/7 Coverage + Unbeaten: 24/7 Global Sports Channel + Red Bull TV + NFL Network + Rally TV + Unbeaten + NHL FAST Channel + DAZN 2 + DAZN 5 + DAZN 3 + Red Bull TV + DAZN 1 + NFL Network + DAZN 4 + Unbeaten + Red Bull TV + Unbeaten + NHL FAST Channel + Rally TV + NFL Network + diff --git a/sites/dazn.de/dazn.de.config.js b/sites/dazn.com/dazn.com.config.js similarity index 96% rename from sites/dazn.de/dazn.de.config.js rename to sites/dazn.com/dazn.com.config.js index 9b933680b..faa43f65f 100644 --- a/sites/dazn.de/dazn.de.config.js +++ b/sites/dazn.com/dazn.com.config.js @@ -62,7 +62,7 @@ const HEADERS = { } module.exports = { - site: 'dazn.de', + site: 'dazn.com', days: 3, url({ channel }) { const { country } = parseSiteId(channel.site_id) diff --git a/sites/dazn.de/dazn.de.test.js b/sites/dazn.com/dazn.com.test.js similarity index 95% rename from sites/dazn.de/dazn.de.test.js rename to sites/dazn.com/dazn.com.test.js index 4892c09f3..a11c54758 100644 --- a/sites/dazn.de/dazn.de.test.js +++ b/sites/dazn.com/dazn.com.test.js @@ -4,7 +4,7 @@ const axios = require('axios') const dayjs = require('dayjs') const utc = require('dayjs/plugin/utc') const customParseFormat = require('dayjs/plugin/customParseFormat') -const { channels, parser, url } = require('./dazn.de.config.js') +const { channels, parser, url } = require('./dazn.com.config.js') dayjs.extend(utc) dayjs.extend(customParseFormat) diff --git a/sites/dazn.com/readme.md b/sites/dazn.com/readme.md new file mode 100644 index 000000000..a5f3c620c --- /dev/null +++ b/sites/dazn.com/readme.md @@ -0,0 +1,21 @@ +# dazn.com + +https://www.dazn.com/de-DE/epg-fixture/ + +### Download the guide + +```sh +npm run grab --- --sites=dazn.com +``` + +### Update channel list + +```sh +npm run channels:parse --- --config=./sites/dazn.com/dazn.com.config.js --output=./sites/dazn.com/dazn.com.channels.xml +``` + +### Test + +```sh +npm test --- dazn.com +``` diff --git a/sites/dazn.de/dazn.de.channels.xml b/sites/dazn.de/dazn.de.channels.xml deleted file mode 100644 index a16385417..000000000 --- a/sites/dazn.de/dazn.de.channels.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - Eurosport 1 - DAZN 2 - DAZN FAST+ - DAZN RISE - NHL FAST Channel - Rally TV - Eurosport 2 - DAZN 1 - MLB Network - Red Bull TV - Unbeaten - DFB.TV - NFL Network - SPORTDIGITAL FUSSBALL - Unbeaten - Red Bull TV - NHL FAST Channel - NFL Network: Live 24/7 Coverage - NFL Network: Live 24/7 Coverage - Red Bull TV: Extreme Sports Channel - NHL FAST Channel - Unbeaten: 24/7 Global Sports Channel - Rally TV - MLB Network - Unbeaten: 24/7 Global Sports Channel - Rally TV - Red Bull TV - NFL Network - Rally TV - Red Bull TV: Extreme Sports Channel - NHL FAST Channel - NFL Network: Live 24/7 Coverage - Unbeaten: 24/7 Global Sports Channel - Red Bull TV: Extreme Sports Channel - DAZN 1 USA - Fubo Sports - Unbeaten: 24/7 Global Sports Channel - Rally TV - NFL Network - Red Bull TV: Extreme Sports Channel - Unbeaten: 24/7 Global Sports Channel - Rally TV - DSPORTS 2 - DSPORTS - DSPORTS + - DSPORTS - DSPORTS - Red Bull TV - Eurosport 2 - Eurosport 1 - LALIGA TV HYPERMOTION - Rally TV - DAZN 2 - NFL Network - NHL FAST Channel - DAZN 1 - DAZN F1® - DAZN Mundial - Unbeaten - DSPORTS - DSPORTS - DSPORTS - Rally TV - NFL Network - Red Bull TV - Unbeaten - NHL FAST Channel - NFL Network - NHL FAST Channel - Red Bull TV - Unbeaten - Unbeaten - MLB Network - Rally TV - Red Bull TV - Radio TV Serie A - Inter TV - Eurosport 4 - Real Time - Eurosport 1 - DAZN 1 - DMAX - NFL Network - Unbeaten - NHL FAST Channel - Eurosport 5 - Eurosport 3 - Eurosport 6 - Discovery - NOVE - Eurosport 2 - Red Bull TV - Rally TV - Milan TV - NHL FAST Channel - Unbeaten - レッドブルTV(24時間チャンネル) - NFL Network - Rally TV - Red Bull TV: Extreme Sports Channel - NHL FAST Channel - NFL Network: Live 24/7 Coverage - Unbeaten: 24/7 Global Sports Channel - Red Bull TV - NFL Network - Rally TV - Unbeaten - NHL FAST Channel - DAZN 2 - DAZN 5 - DAZN 3 - Red Bull TV - DAZN 1 - NFL Network - DAZN 4 - Unbeaten - Red Bull TV - Unbeaten - NHL FAST Channel - Rally TV - NFL Network - diff --git a/sites/dazn.de/readme.md b/sites/dazn.de/readme.md deleted file mode 100644 index 676d9167a..000000000 --- a/sites/dazn.de/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# dazn.de - -https://www.dazn.com/de-DE/epg-fixture/ - -### Download the guide - -```sh -npm run grab --- --sites=dazn.de -``` - -### Update channel list - -```sh -npm run channels:parse --- --config=./sites/dazn.de/dazn.de.config.js --output=./sites/dazn.de/dazn.de.channels.xml -``` - -### Test - -```sh -npm test --- dazn.de -``` From 2529cc6d6840eb1b25b1c7a7b5d47449ede62d6c Mon Sep 17 00:00:00 2001 From: Fridrich Strba Date: Wed, 29 Jul 2026 14:16:37 +0200 Subject: [PATCH 3/4] Regenerate the tv.blue.ch channel list --- sites/tv.blue.ch/tv.blue.ch.channels.xml | 214 ++++++++++++++++++----- 1 file changed, 166 insertions(+), 48 deletions(-) diff --git a/sites/tv.blue.ch/tv.blue.ch.channels.xml b/sites/tv.blue.ch/tv.blue.ch.channels.xml index 439ac0c15..79b390230 100644 --- a/sites/tv.blue.ch/tv.blue.ch.channels.xml +++ b/sites/tv.blue.ch/tv.blue.ch.channels.xml @@ -17,7 +17,7 @@ Al Jazeera English ALMA TV Deluxe Music - Alpenland TV + AW1 TV Canal Sur Andalucía Animal Planet D Animal Planet I @@ -31,6 +31,7 @@ ATV ATV Avrupa AXN Black + B1 TV BBC Entertainment BBC Four BBC News @@ -38,7 +39,7 @@ BBC Three BBC Two BBC World News - Teleswizz + CARAC 5 BFM Business BFM TV Bibel TV @@ -56,14 +57,14 @@ CANAL+ CANAL+ Cinema(s) Ciné+ Classic - Ciné+ Club + Ciné+ festival CANAL+ Décalé Cine+ Emotion Canal+ en clair CANAL+ Kids - Ciné+ Famiz + Ciné+ family Cine+ Frisson - Ciné + Premier + OCS CANAL+ Series CANAL+ Sport Canal 24 Horas @@ -83,8 +84,10 @@ CGTN CCTV4 Channel 4 + Channel 1 Russia + Trace Hits Chasse et Peche - Chérie 25 + RMC Life Now Rock CHTV Cielo @@ -105,17 +108,17 @@ Croatian Music Channel Cuisine+ CSTAR - C8 + CSTAR F Info TV Davos Klosters De Pelicula NOVE Deepam TV Deluxe_Music - Deutsches Musik Fernsehen + DMF Discovery Channel D Discovery F Discovery Channel I - Science Channel F + TLC F Science Channel I Discovery Travel + Living I Disney Channel D @@ -133,13 +136,15 @@ Duna World DW Englisch E! Entertainment Deutschland + E! Entertainment France + E! Entertainment Europe E4 One Eins Plus Energy TV Equidia Life Equidia Live - ERT World + ERT Cosmos Al Masriya Euro D Euro Star @@ -173,9 +178,10 @@ Giallo Golf Channel GOLF+ + gotv Gulli - Hayat FOLK - Hayat PLUS + Hayat FOLK BOX + Hayat 2 TF1 Séries Films Heart TV Box Upfront @@ -199,11 +205,13 @@ ITV4 joiz ELLE GIRL + Junior K2 Kabel eins Kanal 9 KiKa Kinomir + Kiss TV Klan Kosova KTO K-TV @@ -211,15 +219,16 @@ Kurdistan TV Kurdsat La 7 - La 7d - La Chaine Info + La7 Cinema + La Chaine Info - LCI La Télé La5 Léman Bleu Télévision - L'Equipe + L'Equipe CARAC 3 M6 Boutique M6 + RMC Sport Access 2 Maison+ Mangas Max TV @@ -246,14 +255,16 @@ WELT National Geographic D National Geographic F + National Geographic I Nat Geo People I National Geographic Wild D National Geographic Wild F + National Geographic Wild I Nautical Channel NDR - NHK World + NHK World Japan 7+ / Nickelodeon - Nickelodeon Junior + Nick Jr. Nickelodeon NRJ12 NRTV @@ -300,6 +311,7 @@ Rai Premium Rai Scuola Rai Sport + + Rai Sport Rai Storia Rai Yoyo RBB @@ -313,9 +325,9 @@ RMC Découverte Romance TV CARAC 1 - RSI La 1 + RSI LA 1 RSI LA 2 - RTK1 + RTK 1 RTL ZWEI RTL RTL Crime @@ -330,6 +342,7 @@ RTV 21 RTVi Rudaw TV + RT S1 SAT.1 Sat.1 emotions @@ -339,13 +352,14 @@ Seasons Servus TV SHf - Schaffhauser Fernsehen - Show + Show Türk SIC Internacional sixx Sky Atlantic Sky Bundesliga Sport 1 Sky Krimi Sky News International + Kerrang! Sky Sport 2 sky TG 24 360 @@ -367,8 +381,8 @@ Super! K::CN 3 SWR - Syfy D - Syfy F + Sky Sci-Fi + Scifi Tagesschau24 TC Flash D blue Zoom F @@ -454,6 +468,7 @@ TeleZüri Telebasel TeleBom - TeleDom + blue Prime blue Stars blue Sport F blue Action @@ -464,6 +479,8 @@ Test Italia TF1 TGRT EU + Thai TV Global Network + The Box Tiji TLC Tlnovelas @@ -473,7 +490,7 @@ Warner TV Serie Top Crime Top News - Toute l'Histoire + Toute l'Histoire Trace Caribbean Trace Urban Trek @@ -492,7 +509,7 @@ TV2000 TV24 TV5 MONDE EUROPE - TV5 Monde FBS + TV5 Monde FBSM TV8 Mont Blanc TV8 Int. TVE Internacional @@ -527,7 +544,7 @@ Hot Bird 4K1 Fransat UHD Demo Digiturk - Drama + U&Drama regioTVplus blue Vision TV Toggo Plus @@ -580,6 +597,7 @@ Zee One Sky Sport News Lancy TV + RMC Sport Access 1 SFR Sport 4K RMC Sport Access 3 Helvetia One TV @@ -607,11 +625,17 @@ Universal TV Crime District Auftanken TV + Ultra Nature blue Zoom D ORF 3 SWISS1 Game TV + blue City blue Retro + OCS Max + OCS City génération HBO + OCS Choc + OCS Géants blue Sport Extra MUTV Chelsea TV @@ -624,10 +648,12 @@ blue Sport 3 Live D blue Sport 2 direct F blue Sport 3 direct F + VH1 Italy More Than Sports TV Fun Box Ultra Stingray Festival 4K 4K Universe + TV4TNG Sky 1+ 1 Wetter.TV Polar+ @@ -640,17 +666,19 @@ OCS App TGCom24 Paramount Network I + Canal Extremadura Sat. Food Network E Showmax Session National Council Session Council Of States - Grand Genève TV + ici TV Romandie Warner TV WarnerTV Next TV Onex GEO Television Crime + Investigation D - my Canal + CANAL+ App + LATINOS 1 Focus Spike Food Network IT @@ -683,10 +711,10 @@ Cine Sony Italia Channel Marco Polo TV - Motor Trend + Discovery Turbo SuperTennis TV SPORTITALIA - Telecity 7 Gold + Telecity kabel eins CLASSICS La Télé - Fribourg BBC Parliament @@ -734,12 +762,13 @@ Enjoy St. Moritz TV RTS Svet TV Dukagjini + DW Deutsch DAZN Ajoie TV - The Israeli Network + Israel+ Pink Reality Rheinwelten TV - Vernier Visions + ICI MEDIA SPORTS Televista 6+ TRT Çocuk @@ -749,16 +778,18 @@ OBN TV SIC Noticias TVI Internacional - RTP 3 - TVI Ficção + RTP Notícias + V+TVI Eurosport 1 E RTL 102.5 TV + Smithsonian Channel UK Radionorba TV KBS World Hayat Music SR Fernsehen Arirang - Dave + TV Central + U&Dave Fox News Home & Garden TV MyMTV Music @@ -773,9 +804,18 @@ Mezzo Live MySports Preview D MySports Eins - SPORT1+ - eSports1 + MySports 2 D + MySports 3 D + MySports 4 D + MySports 5 D + MySports 6 D + MySports 7 D + MySports 8 D + MySports 9 D + Sportdigital1+ + eSportsONE SPORTDIGITAL FUSSBALL + Extreme Sports MySports Preview F MySports Un MySports 2 F @@ -787,15 +827,28 @@ MySports 8 F MySports 9 F BonGusto + Sky Bundesliga 2 + Sky Bundesliga 3 + Sky Bundesliga 4 + Sky Bundesliga 5 + Sky Bundesliga 6 + Sky Bundesliga 7 + Sky Bundesliga 8 + Sky Bundesliga 9 + Sky Bundesliga 10 + Sky Bundesliga 1 + Sky Sport 1 D Retro Movies Swiss Sport TV Puls 24 + viaplay Xtra Quest Nicktoons Stingray djazz pro 7 fun + Sky Sport 2 D Disney Junior Italia - World Economic Forum TV + World Economic Forum TV Channel 1 VOXup auto motor und sport ducktv @@ -819,6 +872,7 @@ Digi 24 Vox Africa 5Star + CITV DMAX UK Dubai Sports CNN Türk @@ -836,28 +890,32 @@ 5SELECT Senato TV Tunisie Nationale - Yesterday + U&Yesterday Trace Latina UK - Pick + Karusel Int. + Sky Mix 4Seven Zico TV RTSH 3 Challenge RTS 1 (Sénégal) TPA Internacional - ORTB + Benin TV Sky Show First Channel T7 + Pink World Pink Serije History IT + BFM Alsace + Teledeporte Home & Garden TV UK Oman TV CT24 Schlager Deluxe Now 80s Now 70s - CBS Reality + True Crime ATV (TR) San Marino RTV MySports EDGE @@ -866,6 +924,7 @@ Lionsgate+ (Logo VOD) Inhouse Channel Olympia TV + BET Novelas MySports Eins Event MySports 2 D Event @@ -885,6 +944,7 @@ MySports 7 F Event MySports 8 F Event MySports 9 F Event + Clique TV GVAX Latino TV Amazon Prime Video Twitch @@ -893,7 +953,7 @@ Non Stop People J-One Volksmusik.TV - Nickelodeon Teen + Nicktoons F RTL Game One Maintime @@ -919,13 +979,15 @@ Camera dei Deputati Great! movies Great! movies action + GO-TV Canale 63 GB News - HitExpress TV + AW2 TV Sky Cinema (Logo VOD) ARD Plus (Logo VOD) ARD Plus Kids (Logo VOD) ZDF select (Logo VOD) ZDFtivi select (Logo VOD) + Bild Sky Documentaries Sky Nature BärnSPORT @@ -954,9 +1016,10 @@ FreeDOM Diaspora TV Switzerland ALTAMEGA Plus + Nickelodeon Ukraine Pluto TV MySports 10 F MySports 10 F Event - MySports 10 D + MySports Uno I MySports 10 D Event MySports EDGE Event CANAL+ PREMIER LEAGUE @@ -966,6 +1029,8 @@ Parole di Vita Antena 3 Int. Atreseries + Sky Sport Golf + Sky Sport Bundesliga Hayatovci Canal+ Docs Comedy Central F @@ -982,8 +1047,8 @@ Trace Latina OCS Pulp Sky Showcase - EU Parlament - EU Parlament+ + EU Parliament + EU Parliament+ blue Music D 2 blue Music D 3 blue Music F 2 @@ -1000,13 +1065,15 @@ oneplus blue Event D 1 blue Event F 1 + RAI Italia + Inter TV Disney+ Paramount+ Canal+ Box Office Canal+ Grand Ecran Xplore Crime Time - Hip Trip + Hip Trips Just Cooking One Terra Trace Vault @@ -1022,12 +1089,63 @@ Stimmungsgarten TV CGTN Documentary Telenuovo + BOM Cine + RTVS 24 Trentino TV TeleCapri Sport Cubavisión Int. Telecupole Radio Italia TV + TVCG MNE TVP Info + RTSH 24 HRT 4 - 1+1 Int. + I-TV + Pixel + 1+1 Ukraine + Una TV + Enter-Film + Epic Drama + Nova BH + Network-TV + Rhône TV + Kanali Voulis + Just.fishing + Espreso TV + SPORTDIGITAL FUSSBALL 2 + myZenTV 4K + Deutscher Bundestag + Juwelo TV + Rete 55 + DF1 + SYLT1 + travelxp + DOKUSAT + TELEGOLD + TV Monaco + RTL GEO Wild (Logo VOD) + Höhenrausch + Session Council Of States WEB + Session National Council WEB + Best of ESC + RTS Eurovision + Best of ESC I + Museum TV 4K + Info Channel + The Filmclub + Sky Bundesliga + Daystar + CANAL+ Sport Event 1 + CANAL+ Sport Event 2 + T18 + Radio 24 - Il Sole 24 Ore TV + ITV Quiz + HBO Max App + World Economic Forum TV Channel 2 + Canal B D + Canal B F + Novo 19 + M6 Music + Great! Mystery + wedotv Movies IT From cda1e6c21bd285ae42236e0f59e93f4b82bedec1 Mon Sep 17 00:00:00 2001 From: "iptv-bot[bot]" <84861620+iptv-bot[bot]@users.noreply.github.com> Date: Thu, 30 Jul 2026 01:47:36 +0000 Subject: [PATCH 4/4] [Bot] Update GUIDES.md Committed by [iptv-bot](https://github.com/apps/iptv-bot) via [update](https://github.com/iptv-org/epg/actions/runs/30506609380) workflow. --- GUIDES.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/GUIDES.md b/GUIDES.md index c96da57a1..1f020f5c9 100644 --- a/GUIDES.md +++ b/GUIDES.md @@ -5,9 +5,8 @@ HostStatusChannelsLast UpdatedLinks - worker-9dd4.onrender.com -raw.githubusercontent.com/StrangeDrVN/epg/public/output -🔴0-- + worker-9dd4.onrender.com🟢2a day agoXML | GZIP | JSON + raw.githubusercontent.com/StrangeDrVN/epg/public/output🟢468a day agoXML | GZIP | JSON