Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[Script] Telecharger les fichiers d'une playlist
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
bob1977
Guru
Guru


Joined: 16 Mar 2004
Posts: 387

PostPosted: Mon May 01, 2006 2:21 pm    Post subject: [Script] Telecharger les fichiers d'une playlist Reply with quote

salut à tous,

Etant addict de jamendo ( http://www.jamendo.com/fr/ ), j'ai fait un petit script qui me permette de telecharger les fichiers d'une playlist puis de les jouer dans xmms. Ca m'évite d'ecouter puis de retelecharger à chaque nouvelle écoute et en plus, je peux sauter des passages dans la musique.
Il y a en fait 2 scripts:
- Le script principal qui telecharge la playlist(m3u ou pls) ou un fichier quelconque dans un repertoire precisé dans le script. Si ce repertoire depasse une certaine taille, les fichiers les plux vieux sont supprimés. Ce script utilise wget et mplayer pour recuperer les fichiers.
- Le script specifique xmms que j'appelle dans firefox pour ouvrir les playlists. Voici ce script:
~/bin/playlist/xmms_download.sh
Code:

#! /bin/sh

# Telecharge  le fichier ou l'ensemble des fichiers de la playlist passée en paramètre et les ouvre avec xmms des qu'ils sont telecharges

#arg 1 : la playlist ou le fichier

~/bin/playlist/download.sh "${1}" "xmms  -e";



Et maintenant le script principal:
~/bin/playlist/download.sh
Code:

#! /bin/bash

# Telecharge un mp3 ou une playlist de type m3u ou pls dans le repertoire de destination precise par la variable "dir".

#arg 1 : la playlist ou le fichier
#arg 2 optionnel: la commande pour ouvrir ce(s) fichier(s)  à chaque fois qu'un est fini de telecharger

# Taille maximale du répertoire en Mega Octets. Si elle est dépassée, les fichiers sont supprimés à la fin du script. max_size=1000 par defaut (1 Giga octet)
#les sous repertoires ne sont pas pris en compte dans le decompte de la taille
max_size=1000;

# Repertoire ou sont stockés les fichiers téléchargés
dir="/opt/download/net/download";

# fichier pour ecrire temporairement la liste des fichiers à telecharger
tmp="/home/bob/download_tmp`date '+%s'`";
#echo ${tmp};
dir="/opt/download/net/download";


# écrit la liste des fichiers d'une playlist m3u
#arg 1 : la playlist
#arg 2 optionnel: écrit dans le fichier passé en argument 2
function m3u ()
{
    if [ $# == 2 ];
   then
   {
       #echo "On ecrira dans ${2}";
       cat ${1} | grep -v "#" > ${2};
   }
    else
   {
       #echo "On affichera";
       cat ${1} | grep -v "#";
   }
    fi

}

# écrit la liste des fichiers d'une playlist pls
#arg 1 : la playlist
#arg 2 optionnel: écrit dans le fichier passé en argument 2
function  pls ()
{
    if [ $# == 2 ];
   then
   {
       #echo "On ecrira dans ${2}";
       cat ${1} | grep File|cut -d= -f 2  > ${2};
   }
    else
   {
            #echo "On affichera";
       cat ${1} | grep File|cut -d= -f 2;
   }
    fi
}




#on veut recuperer le nom du fichier
l=(`dirname "${1}"|wc -c`); #nb de caracteres de l'adresse
#echo ${l};
l=$(expr $l + 1);
#echo ${l};
nom=`echo ${1}|cut -b ${l}-`;
#echo ${nom};

ext=`echo ${nom} | cut -d. -f 2`;
#echo ${ext};

case  "${ext}"  in
    "m3u")
   #~/bin/playlist/m3u.sh "${1}" ${tmp};;
   m3u "${1}" ${tmp};;
    "pls")
   #~/bin/playlist/pls.sh "${1}" ${tmp};;
   pls "${1}" ${tmp};;
    *) #on suppose que ce n'est pas une playlist
   #echo "fichier simple";
   echo "${1}"> ${tmp};;
esac

#cat ${tmp};

#maintenant on telecharge les fichiers un par un ( pas simultanement)
n=`cat ${tmp}|wc -l`; #nb de fichiers à telecharger

for ((i=1; i<=n;i++)) do
{
    fic=`cat ${tmp} | head -n ${i} |tail -1 `; # le i-eme fichier à telecharger
    l=(`dirname "${fic}"|wc -c`); #nb de caracteres de l'adresse
    l=$(expr $l + 1);
    nom=`echo ${fic}|cut -b ${l}-`; #nom du fichier sans l'adresse
    dest="${dir}/${nom}"; #chemin complet du fichier de destination
    #on verifie si le fichier existe
    if [ -a ${dest} ];
   then
   { #On indexe le fichier par le nb de secondes écoulées depuis 1970
       dest="${dir}/`date '+%s'-`${nom}";
       #echo ${dest};
   }
    fi
    #echo "On lance wget";
    #`wget -nv -o ${dir}/wget.log -O ${dest} ${fic}`;
    taille_avant=`du  --max-depth=0 ${dir} | cut  -f 1`;
    protocole=`echo ${fic} | cut -d/ -f 1`;
    echo "protocole=${protocole}";
    case "${protocole}" in
   "http:")
       echo "on utilise wget";
       wget -q  -O ${dest} ${fic};;
      
   "mms:")
       echo "on utilise mplayer"
       mplayer -dumpstream -dumpfile "${dest}" "${fic}";;
      
   *) echo "Le protocole ${protocole} est inconnu";;
    esac
    taille_apres=`du  --max-depth=0 ${dir} | cut  -f 1`;
    #echo "C'est fait";
    if [ $taille_avant -eq $taille_apres ];
   then
   {
       echo "erreur dans le telechargement";
      
   }
    else
   {
       echo "telechargement OK";      
            #on lance la commande passée en argument
       if [ $# == 2 ];
      then
      ${2} "${dest}";
       fi
   }
    fi
}
done

rm ${tmp};

#taille=`du -m --max-depth=0 ${dir} | cut  -f 1`;
#taille=$(expr $taille );
#echo ${taille};

# on supprime les fichiers les + vieux si la taille du repertoire sans ses sous-repertoires depasse max_size defini au debut du script
while [ `du -m --max-depth=0 ${dir} |cut  -f 1` -ge $max_size ]; do
  {
     
      f=`ls ${dir} -t -u |tail -1`;
      echo "on supprime ${f}";
      rm ${f};
  }
done;
#echo "fini";



Si vous voulez des précision ou voyez des améliorations possibles, n'hesitez pas a m'en faire part.

PS: C'est mon premier vrai script, il y a donc certainement pas mal de choses qui auraient pu etre faites de maniere plus elegante ou plus rapide :wink:
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum