File size: 2,295 Bytes
eeae908
734bffb
eeae908
734bffb
6ca2249
88da9f3
6ca2249
96682d9
88da9f3
 
 
 
 
 
 
 
734bffb
88da9f3
 
 
 
 
 
eeae908
88da9f3
 
 
734bffb
6ca2249
88da9f3
734bffb
88da9f3
 
 
6ca2249
88da9f3
 
 
 
 
 
 
 
 
734bffb
88da9f3
 
734bffb
88da9f3
 
 
6ca2249
734bffb
88da9f3
734bffb
88da9f3
 
 
 
 
734bffb
88da9f3
 
 
 
 
 
 
11fd592
88da9f3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import gradio as gr
import requests
from bs4 import BeautifulSoup
import os
import zipfile
import tempfile
from urllib.parse import urljoin

def process_url(url):
    try:
        response = requests.get(url)
        response.raise_for_status()
    except requests.RequestException as e:
        return None, f"Erreur lors de la récupération de la page : {e}"

    soup = BeautifulSoup(response.text, 'html.parser')

    mp3_links = []
    for link in soup.find_all('a', href=True):
        href = link['href']
        if href.lower().endswith('.mp3'):
            absolute_url = urljoin(response.url, href)
            mp3_links.append(absolute_url)

    # Supprimer les doublons en conservant l'ordre
    seen = set()
    mp3_links = [x for x in mp3_links if not (x in seen or seen.add(x))]

    if not mp3_links:
        return None, "Aucun lien MP3 trouvé sur la page."

    temp_dir = tempfile.mkdtemp()
    filenames = []
    for idx, mp3_url in enumerate(mp3_links, start=1):
        try:
            mp3_response = requests.get(mp3_url)
            mp3_response.raise_for_status()
            filename = os.path.join(temp_dir, f"{idx:02d}_{os.path.basename(mp3_url)}")
            with open(filename, 'wb') as f:
                f.write(mp3_response.content)
            filenames.append(filename)
        except requests.RequestException as e:
            print(f"Erreur de téléchargement {mp3_url}: {e}")
            continue

    if not filenames:
        return None, "Aucun épisode téléchargé."

    zip_filename = os.path.join(temp_dir, 'podcast_episodes.zip')
    with zipfile.ZipFile(zip_filename, 'w') as zipf:
        for file in filenames:
            zipf.write(file, arcname=os.path.basename(file))

    return zip_filename, None

def download_podcast(url):
    zip_path, error = process_url(url)
    if error:
        raise gr.Error(error)
    return zip_path

iface = gr.Interface(
    fn=download_podcast,
    inputs=gr.Textbox(label="URL de la page du podcast", placeholder="https://www.radiofrance.fr/..."),
    outputs=gr.File(label="Télécharger le ZIP des épisodes"),
    title="Téléchargeur de Podcast",
    description="Entrez l'URL d'une page contenant des épisodes de podcast pour télécharger tous les MP3 dans un ZIP ordonné."
)

iface.launch()