IPB

Bienvenue invité ( Connexion | Inscription )

> Lecteur MP3 de natation : automatiser RSS + YouTube vers une clé USB (macOS)(TUTO)
Options
emma_xoxoxox
posté 16 Dec 2025, 11:52
Message #1


Adepte de Macbidouille
*

Groupe : Membres
Messages : 139
Inscrit : 22 Aug 2019
Membre no 208 767



🏊‍♂️ Tutoriel macOS (débutant)

Mettre automatiquement RSS + YouTube sur un lecteur MP3 de natation (clé USB)



🔹 À quoi ça sert (en clair)

Les lecteurs MP3 étanches pour la natation (Sony, Shokz, H2O Audio, Finis…) ont des limites :
• pas de Wi-Fi
• pas de streaming
• pas d’applications
• classement alphabétique uniquement

L’idée est donc de préparer à l’avance le contenu audio sur Mac.

Ce tutoriel explique comment :
• récupérer automatiquement
• un journal audio via RSS (radio/podcast)
• la dernière vidéo d’une chaîne YouTube (audio uniquement)
• convertir en MP3
• copier sur un lecteur MP3 de natation (clé USB)
• garantir que ces fichiers soient lus en premier



🔹 Résultat final

Sur la clé USB / lecteur MP3, on obtient par exemple :

01_2025-11-01_RSS_News.mp3
02_2025-11-01_YouTube_News.mp3

➡️ Le lecteur lit d’abord le journal radio, puis l’émission YouTube, puis le reste de la musique.



🔹 Étape 0 – Vérifier le nom de la clé USB
1. Branche ton lecteur MP3
2. Ouvre le Terminal
3. Tape :

Code
ls /Volumes


Note exactement le nom qui apparaît (ex. MP3 SWIM).



🔹 Étape 1 – Installer les outils (une seule fois)

Installer Homebrew (si nécessaire)

Code
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”


Puis :

Code
echo ‘eval “$(/opt/homebrew/bin/brew shellenv)”’ >> ~/.zprofile
eval “$(/opt/homebrew/bin/brew shellenv)”


Vérifier :

Code
brew –version




Installer les programmes nécessaires

Code
brew install python ffmpeg yt-dlp


Installer les bibliothèques Python :

Code
python3 -m pip install requests feedparser




🔹 Étape 2 – Créer le dossier des scripts

Code
mkdir -p ~/Scripts




🔹 Étape 3 – Créer le script
1. Ouvrir l’éditeur simple :

Code
nano ~/Scripts/swim_mp3_sync.py

2. Copier-coller tout le code ci-dessous :

Code
import os, time, shutil, subprocess, requests, feedparser, tempfile
from datetime import datetime

====== A MODIFIER ======

USB_NAME = “MP3 SWIM”  # Nom exact de la clé USB
RSS_URL = “https://feeds.megaphone.fm/RCS6570791877”
YOUTUBE_CHANNEL = “https://www.youtube.com/@tgla7/videos”

=======================

DOWNLOAD_DIR = os.path.expanduser(”~/Mp3 Swimming pool”)
CHECK_INTERVAL = 5

def ensure_folder(path):
os.makedirs(path, exist_ok=True)

def usb_path():
path = f”/Volumes/{USB_NAME}”
return path if os.path.isdir(path) else None

def download_rss():
print(“RSS : récupération du dernier épisode…”)
feed = feedparser.parse(RSS_URL)
entry = feed.entries[0]
url = entry.enclosures[0].href

tmp = tempfile.mktemp()
r = requests.get(url, stream=True)
with open(tmp, "wb") as f:
    for chunk in r.iter_content(256*1024):
        f.write(chunk)

mp3 = os.path.join(DOWNLOAD_DIR, "rss.mp3")
subprocess.run(["ffmpeg", "-y", "-i", tmp, mp3],
               stdout=subprocess.DEVNULL,
               stderr=subprocess.DEVNULL)
os.remove(tmp)
print("RSS : OK")
return mp3

def download_youtube():
print(“YouTube : récupération de la dernière vidéo (audio)…”)
output = os.path.join(DOWNLOAD_DIR, “yt.%(ext)s”)
subprocess.run([
“yt-dlp”,
“-x”,
“–audio-format”, “mp3”,
“–playlist-end”, “1”,
“-o”, output,
YOUTUBE_CHANNEL
], check=True)

print("YouTube : OK")
return os.path.join(DOWNLOAD_DIR, "yt.mp3")

def sync_files(rss_mp3, yt_mp3):
usb = usb_path()
if not usb:
print(“Clé USB non détectée, attente…”)
return False

today = datetime.now().strftime("%Y-%m-%d")
rss_dest = os.path.join(usb, f"01_{today}_RSS_News.mp3")
yt_dest  = os.path.join(usb, f"02_{today}_YouTube_News.mp3")

# Supprime uniquement les anciens fichiers news
for f in os.listdir(usb):
    if f.startswith(("01_", "02_")) and "News" in f:
        try:
            os.remove(os.path.join(usb, f))
        except:
            pass

shutil.copy2(rss_mp3, rss_dest)
shutil.copy2(yt_mp3, yt_dest)
print("Copie terminée sur la clé USB.")
return True

if name == “main”:
ensure_folder(DOWNLOAD_DIR)
print(“Téléchargement RSS + YouTube…”)
rss_mp3 = download_rss()
yt_mp3  = download_youtube()

print("Branche la clé MP3 si ce n’est pas déjà fait.")
while not sync_files(rss_mp3, yt_mp3):
    time.sleep(CHECK_INTERVAL)

3. Sauvegarder :

• CTRL + O → Entrée
• CTRL + X



🔹 Étape 4 – Lancer le script

Dans le Terminal :

Code
python3 ~/Scripts/swim_mp3_sync.py


Laisser le Terminal ouvert, puis brancher le lecteur MP3.



🔹 Ce que fait le script (important)
• ❌ ne supprime pas ta musique
• ✅ supprime uniquement les anciens fichiers 01_...News.mp3 et 02_...News.mp3
• ✅ garantit l’ordre de lecture sur un MP3 de natation
• ✅ fonctionne hors ligne une fois la clé préparée



🔹 Personnalisation rapide

Changer de chaîne YouTube :
Code
YOUTUBE_CHANNEL = “https://www.youtube.com/@AutreChaine”


Changer de flux RSS :
Code
RSS_URL = “https://exemple.com/flux_audio.xml”


Changer de lecteur MP3 :
Code
USB_NAME = “NOM_DE_LA_CLE”




🔹 Conclusion

Ce workflow est né d’un besoin très concret :
écouter de l’actualité parlée hors ligne sur un lecteur MP3 de natation.

Simple, robuste, sans cloud, sans appli inutile.
Une fois en place : on branche → on nage → on écoute.



--------------------
MBP 16 M1Max 64G 8T Qwerty APP+, Mac Studio M1 Ultra 20-core CPU 64GB 4TB SSD,
Go to the top of the page
 
+Quote Post
 
Start new topic
Réponse(s)
Fars
posté 18 Dec 2025, 20:16
Message #2


Macbidouilleur d'Or !
*****

Groupe : Membres
Messages : 10 523
Inscrit : 4 Nov 2002
Lieu : Carcassonne
Membre no 4 494



Excellent !
Ça c’est de la bidouille, ça change de toute la merde des news en première page.
Je me le garde sous le coude car avec un Raspberry, ça doit marcher aussi wink.gif


--------------------
Raspberry Pi5 8Go Ram / Dissipateur thermique et ventilo / PIMORONI NVMe BASE PCIe 3.0 / SSD NVMe M.2 Crucial P3 PLUS 500Go
Raspberry Pi4 B (Overclock 2.0 Ghz) / 4 Go Ram / SSD Samsung T5 500 Go Usb3 / Ventila Pi4 / Raspberry Pi OS (Buster) / boot SD Card / rootfs SSD (fait accessoirement office de serveur pour Apple TV 4K 128Go)
Raspberry Pi4 B / 2 Go Ram/ SD 16Go / RETROFLAG NESPI 4 Case / Recalbox 7.2 / Kodi 18 / 8BitDo SN30 Pro+ Pac Man et 1942
MacBook 6,1 2009 / 8 Go Ram Corsair /SSD Crucial 500MX 500 Go SATA / (Single boot) Ubuntu 18.04.4 LTS (Bionic Beaver) Support 10 ans
MacBook Pro 8,1 2011 / 8 Go Ram Corsair /SSD Crucial 500MX 500 Go SATA / (Single boot) Ubuntu 18.04.4 LTS (Bionic Beaver) Support 10 ans
HP X360 (LORdi) 2015 / 4 Go Ram / SSD 250 Go M2 / (Single boot) Ubuntu 20.04 LTS (Focal Fossa) Support 10 ans
HP Laptop 17 Core i3-11th gen 3.00GHz x 4 / 8 Go Ram / SSD 512 Go / (Single boot) Zorin 16.3
Apple TV 4K 128Go / 8BitDo SN30 Pro+
Trek Emonda SL6 pour le plaisir, pour s'amuser et se faire mal :) Ultegra 50x34/11x28, Corima 32WS Black, Keo Blade Carbon, Edge 520Plus, GP5000. S-Works 700-28
Go to the top of the page
 
+Quote Post

Les messages de ce sujet


Reply to this topicStart new topic
2 utilisateur(s) sur ce sujet (2 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 30th January 2026 - 07:54