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