Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 03/01/2008, à 14:24

compte supprimé

script de dl radio/émission

Salut

Je suis fan de France Inter et en particulier de 2000 ans d'histoire.

J'aimerais récupérer automatiquement le streaming quotidien, diffusé en .ram
Mini cahier des charges :
[*] dans ~/radio/2000-ans-d-histoire/ enregistrer le ram
[*] éventuellement le transformer en format libre dans un format restreamable
[*] récupérer le nom de l'émission suivi de la date (exemple pour aujourd'hui : Van-Gogh(jeudi-3-janvier-2008).ogg

Je me propose de créer, avec qui le veut, ce script :

# !/bin/bash
# ----------------------------
# url de l origine du script :
# http://forum.ubuntu-fr.org/viewtopic.php?pid=1432335#p1432335
# merci de compléter de votre contribution à  cette url
# (le lien de la contribution peut devenir externe à  ubuntu-fr bien entendu)
# participant par ordre alpha :
# vlade_imir, wlourf, Halike, Michel38, [...], et weenu
# ----------------------------
# Nécessite wget,mplayer et soundconverter
# Voir les dépà´ts officiels au besoin
# ----------------------------

# Variables :
dirradio=~/radio
emission="$dirradio/2000-ans-dhistoire"
urlemission="http://www.radiofrance.fr/franceinter/em/2000ansdhistoire/"
ftempHtml=index.html
ftempRm=audiodump.rm

# Teste si le répertoire de dl n'existe pas sans quoi on le créé
if [ ! -d $emission ]; then
    mkdir -p $emission
fi
# on se met dans le dossier temporaire du système
cd /tmp
# on télécharge la page internet
echo 'Téléchargement des informations en cours. Veuillez patienter...'
wget -q -N $urlemission -O $ftempHtml
echo 'Téléchargement terminé.'
# on récupère le titre de l'émission
titre=$(sed -n -e 's/.*<h1 class="interColor1">\(.*\)<\/h1>.*/\1/p' $ftempHtml | sed -n '1p') ; echo $titre
# on récupère la date
date=$(sed -n -e 's/.*<h3>\(.*\)<\/h3>.*/\1/p' $ftempHtml | sed -n '1p') ; echo $date
#on récupere l'adresse du fichier .ram
nomFichier=$(grep -m 1 -o 'http://.\+[0-9]\{6\}\.ram' $ftempHtml ) ; echo $nomFichier

#on télécharge le flux, a l'aide de mplayer
echo 'Téléchargement du flux audio en cours. Cela peut être *TRES* long...'
mplayer -playlist $nomFichier -dumpstream -dumpfile $ftempRm -really-quiet
echo 'Flux récupéré.'

#on extrait un fichier wav du flux téléchargé
mplayer -vc null -vo null -ao pcm:fast $ftempRm -really-quiet
#on convertit le flux en ogg avec soundconverter (on peut utiliser un peu n'importe quoi qui convertit du wav en ogg)
echo 'Conversion du fichier en ogg...'
soundconverter -b -q audiodump.wav
echo 'Conversion terminée.'

#on déplace le fichier ogg nouvellement créé vers le bon emplacement
#provoque une erreur...
mv audiodump.ogg $emission/$titre$date.ogg

#reste a supprimer les fichiers temporaires éventuels.

Merci de votre contribution

Dernière modification par weenu (Le 07/01/2008, à 11:22)

#2 Le 03/01/2008, à 20:56

wlourf

Re : script de dl radio/émission

salut,

Ce script pour récupérer le titre de l'émission m'interesse aussi et pas seulement pour cette émission ... mais pourquoi n'utilises tu pas le podcast qui , même converti à  un débit moindre aura un son meilleur que le Real, ou si tu veux enregistrer en direct utiliser le flux mp3 de france inter.

Bref pour récupérer le titre comme je suis archi débutant et en attendant de trouver mieux : telecharger la page de 2000 ans (wget) puis lire le fichier et repérer la ligne du titre comme tu as dit. Bon c'est un début amateur mais je n'ai pas trop le temps de creuser ce soir. Bon courage!

# !/bin/bash

wget http://www.radiofrance.fr/franceinter/em/2000ansdhistoire/ 

while read line
do 
	echo -e "$line\n"

done < index.html

Dernière modification par wlourf (Le 03/01/2008, à 20:57)

Hors ligne

#3 Le 03/01/2008, à 23:49

compte supprimé

Re : script de dl radio/émission

J'ai mis à  jour le script, encore un petit effort ce soir ou demain ?
Merci à  tous

#4 Le 03/01/2008, à 23:51

Halike

Re : script de dl radio/émission

Bonsoir,
Il semblerait que l'adresse du fichier .ram dépende uniquement de la date.
Ce serait quelque chose du genre:
http://www.tv-radio.com/ondemand/france_inter/HISTOIRE/HISTOIREAAAAMMJJ.ram

Ce fichier ram est en fait un simple fichier texte contenant l'adresse du flux (utilisant le protocole rtsp).
Du coup, la ligne de commande suivante doit pouvoir permettre de télécharger l'emission du jour:

mplayer -playlist http://www.tv-radio.com/ondemand/france_inter/HISTOIRE/HISTOIRE`date +%Y%m%d`.ram -dumpstream -dumpfile ~/radio/2000_ans_dhistoire_`date +%d_%b_%y`.ram

L'option -dumpstream de mplayer permet de sauvegarder le flux.
L'option dumpfile permet de specifier le fichier de sortie (par défaut, le fichier est stream.dump si je me souviens bien).
Telle que j'ai écrit la ligne, ca sauvegarde le fichier sous la forme "2000_ans_dhistoire_JJ_Mois_AA".

Par contre, c'est relativement lent chez moi (je pense que c'est du au serveur qui limite le debit), et mplayer n'a pas d'indication d'avancement (on peut voir que le fichier grossit sur le disque, mais c'est tout).
Une autre limitation est que la ligne que j'ai donné tente de récupérer l'émission du jour. Du coup, le weekend cela risque de ne pas fonctionner. De même, entre 00:01 et la date de mise en ligne du fichier, il y aura un problème.

Pour ce qui est de la récupération du nom de l'emission, il faut effectivement récupérer le code source de la page (wget me semble etre une bonne solution), et le   "parser". Pour cela, j'utiliserai une expression rationelle qui pourrait ressembler a ceci:

<h1 class="interColor1">([^<]+)</h1>

Par contre, je ne sais pas trop comment utliser les expressions rationelles avec bash (probablement avec l'outil grep, mais je ne sais pas trop comment).

Enfin, pour transcoder le fichier vers un format libre, j'imagine qu'on pourrait le faire avec mencoder (que je connais un tout petit peu), ou peut etre xcfa (que je ne connais pas du tout).

Ca m'a l'air tout a fait faisable, et pas forcément compliqué.

[edit]En fouillant un peu sur le net, j'ai découvert qu'on peut extraire le flux directement en wav, en utlisant l'option -ao pcm de mplayer.
Par contre, quand j'utilise cette option sur le flux, c'est très très long (j'ai laissé mplayer tourner presque 1h, jusqu'a arriver a un fichier de 130Mo et de 25minutes). La solution que j'ai trouvée, c'est d'utiliser cette option en lisant le flux téléchargé:

mplayer -ao pcm flux_telecharge.ram

Cette ligne génere un fichier audiodump.wav qui est assez gros (environ 1Mo/minute).
Ensuite, en utlilisant par exemple le logiciel soundconverter (disponible dans les dépots), il suffit de faire:

soundconverter -b audiodump.wav

Et on se retrouve quand tout est fini avec un beau fichier audiodump.ogg qui contient l'émission smile
Elle est pas belle la vie?

Dernière modification par Halike (Le 04/01/2008, à 01:26)

Hors ligne

#5 Le 04/01/2008, à 01:00

vlade_imir

Re : script de dl radio/émission

Tiens Weenu, c'est la version plus académique pour avoir que la première occurence :

# http://forum.ubuntu-fr.org/viewtopic.php?pid=1432335#p1432335
# merci de compléter de votre contribution à  cette url
# (le lien de la contribution peut devenir externe à  ubuntu-fr bien entendu)
# participant par ordre alpha :
# vlade_imir, wlourf, [...], et weenu
# ----------------------------

# Variables :
dirradio=~/radio
emission="$dirradio/2000-ans-dhistoire"
urlemission="http://www.radiofrance.fr/franceinter/em/2000ansdhistoire/"

# Teste si le répertoire de dl n'existe pas sans quoi on le créé
if [ ! -d $emission ]; then
    mkdir -p $emission
fi
# on se met dans le dossier
cd $emission
# on récupère le titre de l'émission
titre=$(wget -q -O - http://www.radiofrance.fr/franceinter/em/2000ansdhistoire | sed -n -e 's/.*<h1 class="interColor1">\(.*\)<\/h1>.*/\1/p' | head -n 1) ; echo $titre


# puis je récupére juste avant la classe donnant la date
# hmmm... la suite sera pour demain... à  moins que qqn rajoute son pseudo au script en nous donnant la suite ?

Dernière modification par vlade_imir (Le 04/01/2008, à 01:02)

Hors ligne

#6 Le 04/01/2008, à 21:57

wlourf

Re : script de dl radio/émission

Bonsoir,

Récupérer le texte de la description de l'émission avec le nom de l'invité et les références pour le placer dans le tag "Commentaire" du mp3, est-ce utopique avec un script?
L'intérêt d'avoir ce "Commentaire" est qu'il permet d'avoir des mots-clés par défaut dans le fichier et ces mots-clés sont utiles lors de recherches dans un catalogue.

De même, insérer directement "Artist"=2000 ans et "Album"=Histoire, est-ce plus facilement envisageable? Si oui, vers quelle fonction se tourner pour écrire dans un fichier binaire si c'est comme ça que ça s'appelle (http://www.id3.org/id3v2.3.0)

Merci de vos avis éclairés!

Hors ligne

#7 Le 04/01/2008, à 23:37

Halike

Re : script de dl radio/émission

Bonsoir,
Effectivement, c'est une idée intéressante.
Apres une rapide recherche, il existe une floppée de logiciels qui permettent d'editer les tags de fichiers audio.
J'ai essayé avec le premier que j'ai trouvé : eyed3 (disponible dans les depots).
Le code suivant:

eyeD3 -a ARTISTE fichier_audio.ogg

Permet par exemple de renseigner le champ "artiste" des métadonnées. Il existe un option pour chaque type de donnée (voir le manuel pour ça).
Du coup, en utilisant ce logiciel, il est relativement aisé d'écrire des informations dans le fichier final.

On avance, on avance smile

Hors ligne

#8 Le 05/01/2008, à 14:21

compte supprimé

Re : script de dl radio/émission

J'ai mis à  jour le script dans le premier billet (mais j'ai une erreur pour le moment encore).
(avec la coloration c'est par ici)
(je suis nioubi devant l'éternel en script, n'hésitez pas à  reprendre le code et rajouter votre/vos lignes)

Dernière modification par weenu (Le 05/01/2008, à 14:23)

#9 Le 06/01/2008, à 12:39

Halike

Re : script de dl radio/émission

Bonjour,
Aucune erreur ne me saute aux yeux dans le script.
Quel est le message d'erreur?
Est-il possible que mplayer ne soit pas installé ? (je demande, on ne sait jamais... roll ).

Hors ligne

#10 Le 06/01/2008, à 14:59

vlade_imir

Re : script de dl radio/émission

J'ai modifié la version qu'il y a sur paste.ca, pour quelle soit plus correcte, car téléchargé 2 fois une page pour en récupérer 2 petits bouts de lignes, c'est pas vraiment bien.

# !/bin/bash
# ----------------------------
# url de l origine du script :
# http://forum.ubuntu-fr.org/viewtopic.php?pid=1432335#p1432335
# merci de compléter de votre contribution à cette url
# (le lien de la contribution peut devenir externe à ubuntu-fr bien entendu)
# participant par ordre alpha :
# vlade_imir, [...], et weenu
# ----------------------------

# Variables :
dirradio=~/radio
emission="$dirradio/2000-ans-dhistoire"
urlemission="http://www.radiofrance.fr/franceinter/em/2000ansdhistoire/"
ftemp=/tmp/index.html

# Teste si le répertoire de dl n'existe pas sans quoi on le créé
if [ ! -d $emission ]; then
	mkdir -p $emission
fi
# on se met dans le dossier
cd $emission
# on télécharge la page internet dans /tmp
wget -q -N $urlemission -O $ftemp
# on récupère le titre de l'émission
titre=$(sed -n -e 's/.*<h1 class="interColor1">\(.*\)<\/h1>.*/\1/p' $ftemp | sed -n '1p') ; echo $titre
# on récupère la date
date=$(sed -n -e 's/.*<h3>\(.*\)<\/h3>.*/\1/p' $ftemp | sed -n '1p') ; echo $date

# la ligne qui plante... hmmm
#mplayer -playlist http://www.tv-radio.com/ondemand/france_inter/HISTOIRE/HISTOIRE`date +%Y%m%d`.ram -dumpstream -dumpfile ~/2000-ans-dhistoire/`$titre$date`.ram

J'ai commenté la ligne avec mplayer car j'ai pas encore bien saisi ce que tu voulais faire exactement. Sinon sur la parti que j'ai modifier il reste juste à rajouter un

rm $ftemp

une fois qu'on a plus besoin du fichier temporaire.

Hors ligne

#11 Le 06/01/2008, à 16:13

wlourf

Re : script de dl radio/émission

Sur cette page :
http://abs.traduc.org/abs-5.1-fr/ch09s02.html

l'exemple "Exemple 9.13. Convertir des fichiers audio en ogg" ressemble fortement à  ce que tu veux faire

Hors ligne

#12 Le 06/01/2008, à 16:20

Michel38

Re : script de dl radio/émission

weenu a écrit :

Salut
Je suis fan de France Inter et en particulier de 2000 ans d'histoire.
J'aimerais récupérer automatiquement le streaming quotidien, diffusé en .ram

Bonjour aussi,
Je récupère ce podcast avec Rhythmbox tous les jours sans passer par un script smile
Adresse du podcast http://radiofrance-podcast.net/podcast/rss_14864.xml

Dernière modification par Michel38 (Le 06/01/2008, à 16:20)


LM18.3 - Kernel: 4.4.0-53-generic i686 (32 bit gcc: 5.4.0) - Cinnamon 3.4.6 (Gtk 3.18.9-1ubuntu3.3)
System: CLEVO (portable)
CPU    : Dual core Intel Core i5-3230M
Card    : Intel 3rd Gen Core processor Graphics Controller

Hors ligne

#13 Le 06/01/2008, à 16:43

wlourf

Re : script de dl radio/émission

Michel38 a écrit :
weenu a écrit :

Salut
Je suis fan de France Inter et en particulier de 2000 ans d'histoire.
J'aimerais récupérer automatiquement le streaming quotidien, diffusé en .ram

Bonjour aussi,
Je récupère ce podcast avec Rhythmbox tous les jours sans passer par un script smile
Adresse du podcast http://radiofrance-podcast.net/podcast/rss_14864.xml

oui mais l'avantage du script est de renommer les fichiers automatiquements, après il peut être adapté pour une source ram ou mp3

Hors ligne

#14 Le 06/01/2008, à 17:20

wlourf

Re : script de dl radio/émission

J'essaye d'adapter le wget pour des émissions de France Culture pour récupérer les titres et ça marche presque :

$url="http://www.radiofrance.fr/chaines/france-culture2/emissions/fabriquenew/fiche.php?diffusion_id=58773"
titre=$(wget -q -O - $url | sed -n -e 's/.*<font class="c_titre"><b>\(.*\)<\/b><\/font>.*/\1/p' | head -n 1) 
	echo $titre

Il y a certaines pages comme celle de la Fabrique de l'histoire http://www.radiofrance.fr/chaines/franc … n_id=58773 o๠le script ne retourne aucun titre. Je suppose que celà  provient des caractères / et : qui se trouvent dans le titre.

Peut-on contourner ce problème facilement?

Edit : c'est sûrement le : qui pose problème car sur d'autres pages le / passe sans problème...

Edit2: marche pas non plus avec à  é è ... mais là  ça dépasse mes capacités hmm

Dernière modification par wlourf (Le 06/01/2008, à 19:06)

Hors ligne

#15 Le 06/01/2008, à 17:45

Halike

Re : script de dl radio/émission

Bonjour,
J'ai un peu adapté le script. Ca devrait maintenant permettre le téléchargement et la conversion en ogg.

# !/bin/bash
# ----------------------------
# url de l origine du script :
# http://forum.ubuntu-fr.org/viewtopic.php?pid=1432335#p1432335
# merci de compléter de votre contribution à  cette url
# (le lien de la contribution peut devenir externe à  ubuntu-fr bien entendu)
# participant par ordre alpha :
# vlade_imir, [...], et weenu
# ----------------------------

#Nécessite wget,mplayer et soundconverter

# Variables :
dirradio=~/radio
emission="$dirradio/2000-ans-dhistoire"
urlemission="http://www.radiofrance.fr/franceinter/em/2000ansdhistoire/"
ftempHtml=index.html
ftempRm=audiodump.rm

# Teste si le répertoire de dl n'existe pas sans quoi on le créé
if [ ! -d $emission ]; then
    mkdir -p $emission
fi
# on se met dans le dossier temporaire du système
cd /tmp
# on télécharge la page internet
echo 'Téléchargement des informations en cours. Veuillez patienter...'
wget -q -N $urlemission -O $ftempHtml
echo 'Téléchargement terminé.'
# on récupère le titre de l'émission
titre=$(sed -n -e 's/.*<h1 class="interColor1">\(.*\)<\/h1>.*/\1/p' $ftempHtml | sed -n '1p') ; echo $titre
# on récupère la date
date=$(sed -n -e 's/.*<h3>\(.*\)<\/h3>.*/\1/p' $ftempHtml | sed -n '1p') ; echo $date
#on récupere l'adresse du fichier .ram
nomFichier=$(grep -m 1 -o 'http://.\+[0-9]\{6\}\.ram' $ftempHtml ) ; echo $nomFichier

#on télécharge le flux, a l'aide de mplayer
echo 'Téléchargement du flux audio en cours. Cela peut être *TRES* long...'
mplayer -playlist $nomFichier -dumpstream -dumpfile $ftempRm -really-quiet
echo 'Flux récupéré.'

#on extrait un fichier wav du flux téléchargé
mplayer -vc null -vo null -ao pcm:fast $ftempRm -really-quiet
#on convertit le flux en ogg avec soundconverter (on peut utiliser un peu n'importe quoi qui convertit du wav en ogg)
echo 'Conversion du fichier en ogg...'
soundconverter -b -q audiodump.wav
echo 'Conversion terminée.'

#on déplace le fichier ogg nouvellement créé vers le bon emplacement
#provoque une erreur...
mv audiodump.ogg $emission/$titre$date.ogg

#reste a supprimer les fichiers temporaires éventuels.

Je lance un test après ce post (c'est assez long en général), et je reviens editer si il y a des erreurs.
En parlant d'erreurs, on peut probablement améliorer la gestion de celles-ci, pour éventuellement arrêter le script si une erreur se déclenche. Par contre, je ne sais pas trop comment faire ça...

[edit]ajout de l'option -really-quiet de mplayer pour limiter l'encombrement de la console.
[edit2]Le script lance une erreur à  la fin, pour la commande mv. C'est peut etre du au slash, et c'est surement trivial à  résoudre, mais j'avoue que je ne sais pas quelle est l'écriture correcte...
D'autre part, c'est très très long. Le fichier rm fait 4Mo, et pourtant, il est très long à  télécharger (presque 45min, alors que j'ai l'ADSL). Peut être existe-t-il des options à  passer à  mplayer pour réduire ce temps.
Ensuite, le fichier temporaire wav fait 132 Mo, et le ogg 13Mo . La encore, il y a probablement des optimisations à  apporter : si un expert en encodage audio passe par là ...

Dernière modification par Halike (Le 06/01/2008, à 18:30)

Hors ligne

#16 Le 06/01/2008, à 19:13

wlourf

Re : script de dl radio/émission

Halike a écrit :

Le fichier rm fait 4Mo, et pourtant, il est très long à  télécharger (presque 45min, alors que j'ai l'ADSL). Peut être existe-t-il des options à  passer à  mplayer pour réduire ce temps.

c'est normal ce temps, c'est du streaming, mplayer ne va pas plus vite que la durée du fichier.
Pourquoi ne prends tu pas le podcast 128 kbps, quitte à  le convertir dans un bitrate plus faible?

Halike a écrit :

Ensuite, le fichier temporaire wav fait 132 Mo, et le ogg 13Mo . La encore, il y a probablement des optimisations à  apporter : si un expert en encodage audio passe par là ...

13 Mo pour 30 minutes, c'est correct non? l'ogg est plus lourd que le real, il faudrait que tu le convertisse au même format (bitrate) et en mono pour ne pas alourdir inutilement le fichier.

Hors ligne

#17 Le 07/01/2008, à 11:15

compte supprimé

Re : script de dl radio/émission

Michel38 a écrit :
weenu a écrit :

Salut
Je suis fan de France Inter et en particulier de 2000 ans d'histoire.
J'aimerais récupérer automatiquement le streaming quotidien, diffusé en .ram

Bonjour aussi,
Je récupère ce podcast avec Rhythmbox tous les jours sans passer par un script smile
Adresse du podcast  http://radiofrance-podcast.net/podcast/rss_14864.xml

Oui j'ai mis le podcast dans mon Amarok (mp3, bien plus gros que le ram), je peux les enregistrer en mp3 via un clic droit dans Amarok. Mais il n'y a pas le nom de l'émission dans le xml.
Donc ça répond que partiellement à  ma requête. Mais merci de l'astuce tout de même.

Le script avec une tà¢che cron me semble plus poussé. Et indépendant d'intervention humaine wink

@Halike : bravo pour ta suite. Je teste tout ça dans la journée.

Dernière modification par weenu (Le 07/01/2008, à 13:41)

#18 Le 10/01/2008, à 00:20

wlourf

Re : script de dl radio/émission

Pour récupérer le nom de l'émission, il y a un petit problème avec les accents non ? Chez moi ils sont remplacés par un point d'interrogation dans un losange (si on remplace l'url de départ par celle-ci par exemple : http://www.radiofrance.fr/franceinter/em/2000ansdhistoire/index.php?id=62586). J'ai cherché du cà´té de iconv mais sans succès ...

edit wink: ah si ça marche (dans nautilus c'est ok mais dans le terminal j'obtenais 2 points d'interogation dans le nom final)

voici ce que j'ai utilisé

ftemp=/tmp/index.html
ftemp2=/tmp/index2.html
...
wget -q -N "$urlemission" -O $ftemp
iconv -f ISO-8859-1 -t utf8  $ftemp > $ftemp2
...
titre=$(sed -n -e 's/.*<h1 class="interColor1">\(.*\)<\/h1>.*/\1/p' $ftemp2 | sed -n '1p')

Dernière modification par wlourf (Le 10/01/2008, à 00:27)

Hors ligne