Update .forgejo/scripts/radio.py

This commit is contained in:
Vlastimil Novotny / Ch-last / mxnticek 2025-10-27 21:26:36 +01:00
parent 9cbf2d7abb
commit 8e3bf4cdda

View file

@ -4,6 +4,7 @@ Multi-Country Radio M3U Playlist Generator (resilient + dynamic mirrors)
-----------------------------------------------------------------------
Generuje M3U playlist s radii z více zemí pomocí radio-browser.info API.
Automaticky detekuje dostupné servery přes DNS a přepíná mezi nimi.
Podporuje --tvh-compatible formát pro Tvheadend.
"""
import sys
@ -119,8 +120,9 @@ def fetch_stations_with_retry(rb, country_code, max_retries=5, initial_backoff=1
# === Hlavní logika ===
def create_multi_country_playlist(country_codes, output_file=None, group_title="Radio Stations",
default_logo_url="https://amz.odjezdy.online/xbackbone/VUne9/HilOMeka75.png/raw",
use_country_as_group=False):
default_logo_url="https://amz.odjezdy.online/xbackbone/VUne9/HilOMeka75.png/raw",
use_country_as_group=False,
tvh_compatible=False): # <<< ZMĚNA: Přidán nový argument
rb = init_radio_browser() # použije autodetekovaný mirror
output_file = generate_safe_output_path(output_file, country_codes)
@ -182,8 +184,25 @@ def create_multi_country_playlist(country_codes, output_file=None, group_title="
if not logo or logo == "null":
logo = default_logo_url
group = s['country_name'] if use_country_as_group else group_title
stream_url = s['url']
# <<< ZMĚNA: Blok pro formátování URL pro Tvheadend
if tvh_compatible:
# Připravíme metadata - odstraníme mezery a problematické znaky
service_name = name.replace(" ", "_").replace('"', "'").replace("=", "-").replace(":", "-")
provider_name = stream_url # Poskytovatel je URL, jak je v textu
url_to_write = (
f"pipe://ffmpeg -loglevel fatal -i {stream_url} -vn -acodec copy -flags +global_header "
f"-strict -2 -metadata service_provider={provider_name} "
f"-metadata service_name={service_name} -f mpegts -mpegts_service_type digital_radio pipe:1"
)
else:
url_to_write = stream_url
# <<< KONEC ZMĚNY
f.write(f'#EXTINF:-1 group-title="{group}" tvg-logo="{logo}",{s["country_code"]} | {name}\n')
f.write(f"{s['url']}\n")
f.write(f"{url_to_write}\n") # Použijeme upravenou nebo původní URL
print(f"🎧 Playlist vytvořen: {output_file} ({len(unique_stations)} stanic)")
return output_file
@ -201,6 +220,12 @@ def main():
help="Default logo URL")
parser.add_argument("--use-country-as-group", "-ucag", action="store_true",
help="Use full country name as group-title")
# <<< ZMĚNA: Přidán argument pro TVH kompatibilitu
parser.add_argument("--tvh-compatible", "-tvh", action="store_true",
help="Generovat M3U kompatibilní s Tvheadend (pipe://ffmpeg)")
# <<< KONEC ZMĚNY
args = parser.parse_args()
if args.countries:
@ -212,7 +237,9 @@ def main():
sys.exit(1)
try:
create_multi_country_playlist(codes, args.output, args.group, args.logo, args.use_country_as_group)
# <<< ZMĚNA: Předání nového argumentu
create_multi_country_playlist(codes, args.output, args.group, args.logo,
args.use_country_as_group, args.tvh_compatible)
except KeyboardInterrupt:
print("\n🛑 Přerušeno uživatelem.")
sys.exit(1)