#! /bin/bash # # ------------------------------------------------------------------ # made by sputnick in da FreAkY lApPy lAb (c) 2008 # gilles.quenot gmail com # # This program is free software; you can redistribute it and/or # modify it under the terms of version 2 of the GNU General Public # License published by the Free Software Foundation. # (see http://www.gnu.org/licenses/gpl.html). # ------------------------------------------------------------------ # ,,_ # o" )@ # '''' # Ce script extrait les Flash de www.deezer.com en mp3. # # TODO # mettre function Xdisplay ( kde, gnome, ou console ) # last modification 05.10.2008 export DISPLAY=:0 SCRIPT=${0##*/} [ "$BASH" ] || { bash=$(which bash 2>/dev/null) echo "Hey dude ! You must call $0 with ${bash:-"bash"} ! Quitting." exit 2 } DP() { tput setaf $1 echo -e "$2" tput sgr0 [[ $3 == [0-9] ]] && exit $3 } TESTSYSTEM() { for app; do type "$app" &>/dev/null || DP 1 "${0##*/} need $app, quitting." 2 done } TESTSYSTEM mplayer ffmpeg zenity sha1sum if((UID==0)); then DP 1 "Pas en root !" 2 exit 2 fi HELP() { tput setaf 2 cat<<-HELP Syntaxe : $0 [-d --direct h] Aide : --direct -d ne demandent pas pour jouer le son avec mplayer, on assume qu'on recupere a la volee direct sur deezer et on ne quitte pas quand tous les tracks ont été encodés, mais on lance $SCRIPT en mode daemon. Dans ce dernier cas, il faut donc quitter avec ^C. -h ou --help affiche cette aide Divers : Le script n'extrait pas deux fois les memes tracks sauf si ~/.deezer-collector.bash.log est efface. HELP tput sgr0 } CLEAN() { mkdir -p ~/deezer-colector x=( $SCRIPT/*.mp3 ) if [[ ${x[@]} ]]; then tput setaf 2 cat<<-SHOW Deplacement des tracks dans ~/deezer-colector : $(printf '%s\n' ${x[@]}) SHOW tput sgr0 \mv ${x[@]} ~/deezer-colector 2>/dev/null \rm -rf /tmp/deezer-collector.bash exit 0 else DP 3 "Pas de tracks" 1 fi } DUNUM() { du $1 | awk '{print $1}' } SHANUM() { sha1sum $1 | awk '{print $1}' } trap 'CLEAN' 0 1 2 3 15 shopt -s nullglob case $1 in -d|--direct) direct=true ;; -h) HELP ;; esac cd /tmp mkdir -p /tmp/$SCRIPT MAIN() { SWF=( Flash* ) for track in ${SWF[@]}; do if [[ -f $track ]]; then CHAT=$(SHANUM $track) if grep -q $CHAT ~/.$SCRIPT.log; then \rm $track continue fi duav=$(DUNUM $track) sleep 1 duap=$(DUNUM $track) (( duav != duap )) && continue DP 2 "Muxing $track" # extraction : flash => mp3 ffmpeg -i $track -f mp3 -vn -acodec copy $SCRIPT/$track.mp3 2>/dev/null && DP 2 "Muxing $track done" if [[ $direct != true ]]; then if zenity --question --title=deezer-collertor --text="ecouter $track avec mplayer ?"; then mplayer 2>/dev/null -really-quiet $track & Pid=$! fi fi MP3="$(zenity --entry --title="deezer-collector" --text="Donner un nom pour $track ( eviter les caracteres chelous. ) Pas de nom => poubelle." && \ kill $Pid &>/dev/null)" if [[ $MP3 ]]; then MP3=$(tr ' ' '-' <<< "$MP3") else SHANUM $track >> ~/.$SCRIPT.log continue fi [[ "$MP3" != *mp3 ]] && MP3="$MP3.mp3" if mv $SCRIPT/$track.mp3 $SCRIPT/$MP3; then DP 5 "$MP3 created, done" SHANUM $track >> ~/.$SCRIPT.log rm $track fi fi done } if [[ $direct == true ]]; then while true; do MAIN sleep 4 done else MAIN fi