From 447f328b6e37397c956b8e301e421d78b8f6065a Mon Sep 17 00:00:00 2001 From: Free TV <82442641+freetv332@users.noreply.github.com> Date: Tue, 13 Apr 2021 13:16:51 +0100 Subject: [PATCH] Add playlist generator and playlist --- make_playlist.py | 39 +++++++++++++++++++++++++++++++++++++++ playlist.m3u8 | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 make_playlist.py create mode 100644 playlist.m3u8 diff --git a/make_playlist.py b/make_playlist.py new file mode 100644 index 0000000..630a4c6 --- /dev/null +++ b/make_playlist.py @@ -0,0 +1,39 @@ +#!/usr/bin/python3 + +import os +import re + +class Channel(): + + def __init__(self, group, md_line): + self.group = group + md_line = md_line.strip() + (before, number, name, url, logo, after) = md_line.split("|") + self.number = number.strip() + self.name = name.strip() + self.url = url.strip() + self.url = self.url[self.url.find("(")+1:self.url.rfind(")")] + self.logo = logo.strip() + self.logo = self.logo[self.logo.find('src="')+5:self.logo.rfind('"')] + + def to_m3u_line(self): + return('#EXTINF:-1 tvg-name="%(name)s" tvg-logo="%(logo)s" group-title="%(group)s",%(name)s\n%(url)s' \ + % {'name':self.name, 'logo':self.logo, 'group':self.group, 'url':self.url}) + + +if __name__ == "__main__": + with open("playlist.m3u8", "w") as playlist: + print("#EXTM3U", file=playlist) + for filename in sorted(os.listdir(".")): + if filename == "README.md" or not filename.endswith(".md"): + continue + with open(filename) as markup_file: + group = filename.replace(".md", "").title() + for line in markup_file: + if "

" in line.lower() and "

" in line.lower(): + group = re.sub('<[^<>]+>', '', line.strip()) + if not "[>]" in line: + continue + channel = Channel(group, line) + print(channel.to_m3u_line(), file=playlist) + diff --git a/playlist.m3u8 b/playlist.m3u8 new file mode 100644 index 0000000..a63d101 --- /dev/null +++ b/playlist.m3u8 @@ -0,0 +1,37 @@ +#EXTM3U +#EXTINF:-1 tvg-name="TF1" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/d/dc/TF1_logo_2013.png/62px-TF1_logo_2013.png" group-title="France",TF1 +https://tf1-hls-live-ssl.tf1.fr/tf1/1/hls/live_2328.m3u8 +#EXTINF:-1 tvg-name="France 2" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/France_2_2018.svg/35px-France_2_2018.svg.png" group-title="France",France 2 +http://cdn.webtv4.cdnfr.orange.fr/hs/HALO3/hls/france2live-12471/hls/index.m3u8 +#EXTINF:-1 tvg-name="France 3" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/France_3_2018.svg/35px-France_3_2018.svg.png" group-title="France",France 3 +https://mmsiptv.com/live/france3/playlist.m3u8 +#EXTINF:-1 tvg-name="France 5" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/France_5_2018.svg/35px-France_5_2018.svg.png" group-title="France",France 5 +https://mmsiptv.com/live/france5/playlist.m3u8 +#EXTINF:-1 tvg-name="M6" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Logo_M6_%282020%2C_fond_clair%29.svg/49px-Logo_M6_%282020%2C_fond_clair%29.svg.png" group-title="France",M6 +http://cdn.webtv4.cdnfr.orange.fr/hs/HALO4/hls/m6-23835/hls/index.m3u8 +#EXTINF:-1 tvg-name="C8" tvg-logo="https://upload.wikimedia.org/wikipedia/fr/thumb/7/7d/Logo_C8.svg/49px-Logo_C8.svg.png" group-title="France",C8 +https://mmsiptv.com/live/c8/playlist.m3u8 +#EXTINF:-1 tvg-name="W9" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/4/40/W9_2018.svg/56px-W9_2018.svg.png" group-title="France",W9 +http://cdn.webtv4.cdnfr.orange.fr/hs/HALO4/hls/w9live-37153/hls/05.m3u8 +#EXTINF:-1 tvg-name="TMC" tvg-logo="https://upload.wikimedia.org/wikipedia/fr/thumb/a/a8/TMC_logo_2016.svg/62px-TMC_logo_2016.svg.png" group-title="France",TMC +https://tmc-hls-live-ssl.tf1.fr/tmc/1/hls/live_2328.m3u8 +#EXTINF:-1 tvg-name="TFX" tvg-logo="https://upload.wikimedia.org/wikipedia/fr/thumb/8/83/TFX_logo_2018.svg/62px-TFX_logo_2018.svg.png" group-title="France",TFX +https://tfx-hls-live-ssl.tf1.fr/tfx/1/hls/live_2328.m3u8 +#EXTINF:-1 tvg-name="NRJ 12" tvg-logo="https://upload.wikimedia.org/wikipedia/fr/thumb/9/93/NRJ_12_logo_2015.svg/45px-NRJ_12_logo_2015.svg.png" group-title="France",NRJ 12 +https://mmsiptv.com/live/nrj12/playlist.m3u8 +#EXTINF:-1 tvg-name="Gulli" tvg-logo="https://upload.wikimedia.org/wikipedia/fr/thumb/4/43/18._Gulli.png/57px-18._Gulli.png" group-title="France",Gulli +https://d13anarbtxy8c5.cloudfront.net/6play/short/clr/gulli/sdindex.m3u8 +#EXTINF:-1 tvg-name="TF1 Séries Films" tvg-logo="https://upload.wikimedia.org/wikipedia/fr/thumb/4/4b/TF1_S%C3%A9ries_Films_logo_2020.svg/81px-TF1_S%C3%A9ries_Films_logo_2020.svg.png" group-title="France",TF1 Séries Films +https://tsf-hls-live-ssl.tf1.fr/tsf/1/hls/live_2328.m3u8 +#EXTINF:-1 tvg-name="6ter" tvg-logo="https://upload.wikimedia.org/wikipedia/fr/thumb/a/a9/6ter_2012.png/73px-6ter_2012.png" group-title="France",6ter +http://cdn.webtv4.cdnfr.orange.fr/hs/HALO4/hls/6ter-850445/hls/index.m3u8 +#EXTINF:-1 tvg-name="LCI" tvg-logo="https://upload.wikimedia.org/wikipedia/fr/thumb/3/38/LCI_-_Logo_%28Ao%C3%BBt_2017%29.svg/62px-LCI_-_Logo_%28Ao%C3%BBt_2017%29.svg.png" group-title="France",LCI +https://lci-hls-live-ssl.tf1.fr/lci/1/hls/live_2328.m3u8 +#EXTINF:-1 tvg-name="France 24" tvg-logo="https://raw.githubusercontent.com/Tapiosinn/tv-logos/master/countries/france/france-24-fr.png" group-title="France",France 24 +https://static.france24.com/live/F24_FR_HI_HLS/live_tv.m3u8 +#EXTINF:-1 tvg-name="TV5 Monde Info" tvg-logo="https://i.imgur.com/NcysrWH.png" group-title="France",TV5 Monde Info +https://v3plusinfo247hls-i.akamaihd.net/hls/live/218877/v3plusinfo247hls/index.m3u8 +#EXTINF:-1 tvg-name="TV5 Monde Europe" tvg-logo="https://i.imgur.com/uPmwTo9.png" group-title="France",TV5 Monde Europe +https://tv5europe-i.akamaihd.net/hls/live/729480/tv5europehls/master.m3u8 +#EXTINF:-1 tvg-name="Euronews" tvg-logo="https://i.imgur.com/3Lr5iAj.png" group-title="France",Euronews +https://alchimie-euronews-1-fr.samsung.wurl.com/manifest/playlist.m3u8