|
import requests |
|
import gradio as gr |
|
import tempfile |
|
import os |
|
|
|
API_URL = "https://de1.api.radio-browser.info/json/stations" |
|
|
|
|
|
|
|
def fetch_and_save_m3u(): |
|
try: |
|
|
|
response = requests.get(API_URL) |
|
response.raise_for_status() |
|
stations = response.json() |
|
|
|
|
|
tmp_dir = tempfile.mkdtemp() |
|
file_path = os.path.join(tmp_dir, "radio_stations.m3u") |
|
|
|
|
|
with open(file_path, "w", encoding="utf-8") as f: |
|
f.write("#EXTM3U\n") |
|
for station in stations: |
|
name = station.get("name", "Unknown") |
|
url = station.get("url_resolved", station.get("url","")) |
|
|
|
f.write(f"#EXTINF:-1,{name}\n") |
|
f.write(f"{url}\n") |
|
|
|
return file_path, "✔️ Экспорт завершен." |
|
|
|
except Exception as e: |
|
return None, f"❌ Ошибка: {str(e)}" |
|
|
|
|
|
def create_app(): |
|
with gr.Blocks() as demo: |
|
gr.Markdown("## Экспорт базы радиостанций в M3U\nНажмите кнопку, чтобы скачать полный список радиостанций из radio-browser.info в формате .m3u.") |
|
download_button = gr.Button("Экспортировать в M3U") |
|
output_file = gr.File(label="Скачать файл .m3u") |
|
status = gr.Textbox(label="Статус") |
|
|
|
def on_click(): |
|
file_path, msg = fetch_and_save_m3u() |
|
if file_path: |
|
return file_path, msg |
|
else: |
|
return None, msg |
|
|
|
download_button.click(fn=on_click, outputs=[output_file, status]) |
|
|
|
return demo |
|
|
|
|
|
if __name__ == "__main__": |
|
app = create_app() |
|
app.launch(share=False) |
|
|