Advertisement
Guest User

discopolis-rock-sinfonico

a guest
Jun 30th, 2013
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.15 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # discopolis-rock-sinfonico : descarga los audios de los programas especiales
  4. #                             sobre Rock Sinfónico en Discópolis, pero podría
  5. #                             adaptarse fácilmente a otros programas de radio
  6. #                             de RNE modificando las variables de más abajo...
  7. # por Rodia en daltonico.net
  8.  
  9. httpcli=$(which curl)
  10.  
  11. if [ -z "$httpcli" ]; then
  12.     httpcli='wget'
  13.     httpout='-O -'
  14.     httpref='--referer='
  15.     httpopts='-nv'
  16. else
  17.     httpref='--referer '
  18.     httpopts='-L -s -S'
  19. fi
  20.  
  21. useragent="-A 'Mozilla/5.0'"
  22.  
  23. script=$(basename $0)
  24. server="http://www.rtve.es"
  25. query='alacarta/interno/contenttable.shtml?pbq=1&modl=TOC&locale=es&pageSize=150&ctx=1936'
  26.  
  27. prog_pattern="a href.*[Rr]ock [Ss]inf.nico"
  28. prog_prefix="Discópolis"
  29.  
  30. tmp_file=/tmp/$script.$$
  31. log_file=$script.log
  32. prog_list=/tmp/prog_list.$$
  33. prog_file=/tmp/prog_html.$$
  34.  
  35. $httpcli $httpopts $useragent $server/$query $httpout > $tmp_file 2> $log_file
  36.  
  37. if [ $? -ne 0 ]; then
  38.     echo "$script: error: no se pudo contactar con $server"
  39.     exit 1
  40. else
  41.     echo "$script: info: servidor $server contactado..."
  42. fi
  43.  
  44. grep "$prog_pattern" $tmp_file | cut -d'"' -f4 | sort -u > $prog_list
  45. sed -i '/^$/d' $prog_list
  46.  
  47. num_programas=$(wc -l $prog_list | cut -d' ' -f1)
  48.  
  49. if [ $num_programas -eq 0 ]; then
  50.     echo "$script: error: no se encontró ningún programa..."
  51.     exit 1
  52. else
  53.     echo -e "$script: info: encontrados $num_programas programas...\n"
  54. fi
  55.  
  56. while read program
  57. do
  58.     $httpcli $httpopts $useragent $server$program $httpout > $prog_file \
  59.                                                            2>>$log_file
  60.     if [ $? -ne 0 ]; then
  61.         echo "$script: error: no se pudo acceder a $program"
  62.         exit 1
  63.     else
  64.         echo "$script: info: accediendo al programa $program..."
  65.     fi
  66.  
  67.     title=$(grep -m1 '<title>' $prog_file | sed 's/<[^>]*>//g' \
  68.                                | cut -d'-' -f2 | sed 's/ \([0-9]\) / 0\1/')
  69.     if [ -z "$title" ]; then
  70.         echo -e "$script: error: no se pudo obtener título de $program\n"
  71.         continue
  72.     else
  73.         echo "$script: info: encontrado título: $title..."
  74.     fi
  75.  
  76.     audio_file="$prog_prefix-$(echo $title | tr ' ' '_').mp3"
  77.     audio_link=$(grep 'audio_src' $prog_file | cut -d'=' -f3 | cut -d'"' -f2)
  78.  
  79.     if [ -z "$audio_link" ]; then
  80.         echo -e "$script: error: no se pudo obtener link de audio de $program\n"
  81.         continue
  82.     fi
  83.  
  84.     if [ -f "$audio_file" ]; then
  85.         echo -e "$script: aviso: ya existe el archivo $audio_file\n"
  86.         sleep 1
  87.         continue
  88.     fi
  89.  
  90.     echo "$script: info: descargando $audio_link..."
  91.  
  92.     $httpcli $httpopts $useragent $audio_link $httpout $httpref$server$program \
  93.                                               > $audio_file 2>> $log_file
  94.     if [ $? -ne 0 ]; then
  95.         echo -e "$script: error: no se pudo descargar $audio_link\n"
  96.         continue
  97.     fi
  98.  
  99.     echo "$script: info: descargado como $(ls $audio_file)"
  100.  
  101.     delay=$((RANDOM%7))
  102.  
  103.     echo -e "\n$script: info: esperando $delay segundo(s)...\n"
  104.  
  105.     sleep $delay
  106.  
  107. done < $prog_list
  108.  
  109. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement