venerdì 10 gennaio 2014

Lo script radio.sh si aggiorna.

Salve!

Radio.sh è uno script che permette di gestire ed ascoltare le stazioni radio in streaming su Lubit.

Quello che vi stiamo presentando oggi è la versione 2 del "programma"; infatti sono state accolte le richieste di alcuni lettori.

In questa seconda versione sono state aggiunte nuove stazioni e, inoltre, quando si preme INVIO, non si esce più dallo script, come succedeva nella versione 1, ma si ritorna alla schermata principale.

Per quanto riguarda l'integrazione di "Radio v. 2.0" nel menu di Lubit, vi rimando al post precedente. Qui.

#!/bin/bash
#Radio.sh versione 2.0
#Bit&Squit ;)

function avviso(){
            clear
            echo -e "\nPer ritornare alla schermata principale premere INVIO\n"
            sleep 2
  }

#Rtl [1]
Stazione1="http://shoutcast.rtl.it:3010/" 
#Radio Deejay [2]
Stazione2="http://mp3.kataweb.it:8000/RadioDeejay" 
#Radio Kiss Kiss [3]
Stazione3="http://wma08.fluidstream.net:4610/" 
#Radio RDS [4]
Stazione4="http://www.rds.it:8000/stream" 
#Radio Capital [5]
Stazione5="mms://wm.streaming.kataweb.it/reflector:44434"
#Radio latte e miele [6]
Stazione6="mms://onair4.xdevel.com/LatteMiele"
#Radio 105 [7]
Stazione7="http://shoutcast.unitedradio.it:1101"
#RMC[8]
Stazione8="http://shoutcast.unitedradio.it:1103"

PLAYER=$(which mplayer 2>/dev/null)
opzione=0
uscita=9
 

while [ $opzione -ne $uscita ];do   

           opzione=$(zenity --title="Radio v. 2.0" \
                     --width=340 \
                     --height=315 \
                     --list --radiolist \
                     --text 'Seleziona una stazione' \
                     --column 'Seleziona' \
                     --column 'Menu' --column "Radio" FALSE "1" "RTL" FALSE "2" "Radio Deejay" FALSE "3" "Radio Kiss Kiss" \
                          FALSE "4" "RDS" FALSE "5" "Radio Capital" FALSE "6" "Radio latte e miele" \
                          FALSE "7" "Radio 105" FALSE "8" "RMC" FALSE "9" "Esci dal programma") 


          if [[ $opzione -ge 1 && $opzione -le 9 ]]; then 


                      case $opzione in
                          1)
                             avviso
                            "$PLAYER" 2>/dev/null "$Stazione1" ;;
                          2)
                             avviso
                            "$PLAYER" 2>/dev/null "$Stazione2" ;;
                          3)
                            avviso
                            "$PLAYER" 2>/dev/null "$Stazione3" ;;
                          4)
                            avviso
                           "$PLAYER" 2>/dev/null "$Stazione4" ;;
                          5)
                            avviso
                            "$PLAYER" 2>/dev/null "$Stazione5" ;;
                          6)
                            avviso
                           "$PLAYER" 2>/dev/null "$Stazione6" ;;
                          7)
                            avviso
                            "$PLAYER" 2>/dev/null "$Stazione7" ;;
                          8)
                            avviso
                            "$PLAYER" 2>/dev/null "$Stazione8" ;;
                          9)
                              clear
                              exit 0 ;;
               

                   esac
    
       else
            clear
            opzione=9
            echo -e "\nNon è stata trovata alcuna stazione.\n"
      fi

done

Alla prossima :)

17 commenti:

  1. Un suggerimento (appena testato): la variable indirection in bash. Ad esempio:
    $ a=1; b=2; st_1=ciao; st_2=pippo; c=st_$a; echo ${!c}
    $ ciao
    Nel vostro caso quindi: stazione_completa=stazione$opzione e poi "$PLAYER" 2>/dev/null "${!stazione_completa}"
    In questo modo basterebbe allungare la lista di radio senza dover aggiungere anche le corrispondenti voci al "case... esac" (che non serve più).
    Certo rimarrebbe da modificare a manina il menu di zenity ma penso che anche lì qualcosa si possa fare magari con un ciclo for che legga la coppia (Nome / url) opportunamente formattata per tutte le radio.

    RispondiElimina
    Risposte
    1. Non ho capito una cosa... Non servirebbe più il costrutto CASE?

      Elimina
    2. Esatto. Per esempio:
      #!/bin/bash
      read -p "Numero opzione > " optnum
      string="st"$optnum
      st1="RMC^URL_RMC"
      st2="Deejay^URL_Deejay"
      st3="R101^URL_R101"
      nomeradio=$(echo ${!string} | cut -d^ -f1)
      url_radio=$(echo ${!string} | cut -d^ -f2)
      echo "Stai ascoltando:" $nomeradio
      echo '$PLAYER' $url_radio
      exit
      ###
      Devi solo costruire la lista di radio (nel mio esempio formattata come Nomeradio^URL). Ancora più facile se hai la lista salvata in un file esterno che lo script legge sfruttando il parametro "optnum":
      string=$(sed -n ${optnum}p lista_radio) e poi con 'cut -d^ -fX' (o awk, mi pare impostando IFS=carattere_separatore) tiri fuori i due "pezzi" del nome e url radio da passare alla riga di comando $player.
      Rimane il "problema" di generare la lista visualizzata da zenity ma ad occhio direi che anche qui awk o sed applicati sul file lista_radio possono venirti in aiuto, magari in unione con un ciclo iterativo che legge tutti i nomi delle radio (field 1 delle righe). Una roba tipo:
      lista_zenity=""
      righe_file=$(wc -l lista_radio)
      for ((i=1; i<=$righe_file; i++)); do lista_zenity="$lista_zenity FALSE \"$i\" \"$nomeradio\"";done
      Ci penso con più calma e magari butto giù un esempio pratico, se vuoi considerare l'opportunità di "ristrutturare" un po' lo script. Altrimenti va bene così: "se hai codice che funziona non ti conviene toccarlo" mi ha scritto Juhan nel post precedente!

      Elimina
    3. Grazie per il contributo! ;)

      Elimina
  2. Non sò, se può essere utile.
    Se qualcuno vuole aggiungere e/o modificare con le stazioni RAI, questi sono i relativi indirizzi da inserire:

    Radio RAI 1
    http://www.radio.rai.it/live/radio1.pls

    Radio RAI 2
    http://www.radio.rai.it/live/radio2.pls

    Radio RAI 3
    http://www.radio.rai.it/live/radio3.pls

    Radio RAI Isoradio
    http://www.radio.rai.it/live/isoradio.pls

    RispondiElimina
  3. Datemi 5 minuti e vi propongo la versione 2.1 o 2.5 o come volete che vi piaccia :D

    RispondiElimina
    Risposte
    1. Daje Lightuono! update && upgrade a manetta!

      Elimina
  4. Come promesso eccovi lo script modificato. Radio v2.5 ottimizzata da me ;). Sto già provando a creare un menù dinamico per Zenity, tutto questo alla versione 3.0 ;).

    Godetevi il codice :)!





    #!/bin/bash
    #Radio.sh versione 2.5
    #Bit&Squit ;)

    #Versione 2.5 con ottimizzazione del codice. By Lightuono aka Toshidex

    function avviso(){
    clear
    echo -e "\nPer ritornare alla schermata principale premere INVIO\n"
    sleep 2
    "$PLAYER" 2>/dev/null $opzione
    }

    #Rtl [1]
    Stazione1="http://shoutcast.rtl.it:3010/"
    #Radio Deejay [2]
    Stazione2="http://mp3.kataweb.it:8000/RadioDeejay"
    #Radio Kiss Kiss [3]
    Stazione3="http://wma08.fluidstream.net:4610/"
    #Radio RDS [4]
    Stazione4="http://www.rds.it:8000/stream"
    #Radio Capital [5]
    Stazione5="mms://wm.streaming.kataweb.it/reflector:44434"
    #Radio latte e miele [6]
    Stazione6="mms://onair4.xdevel.com/LatteMiele"
    #Radio 105 [7]
    Stazione7="http://shoutcast.unitedradio.it:1101"
    #RMC[8]
    Stazione8="http://shoutcast.unitedradio.it:1103"

    PLAYER=$(which mplayer 2>/dev/null)
    opzione=0

    while [[ $opzione != "Esci" ]];do

    opzione=$(zenity --title="Radio v. 2.0" \
    --width=340 \
    --height=315 \
    --list \
    --text 'Seleziona una stazione' \
    --column 'Menu' --column "Radio" "$Stazione1" "RTL" "$Stazione2" "Radio Deejay" "$Stazione3" "Radio Kiss Kiss" \
    "$Stazione4" "RDS" "$Stazione5" "Radio Capital" "$Stazione6" "Radio latte e miele" \
    "$Stazione7" "Radio 105" "$Stazione8" "RMC" "" "Esci dal programma" --hide-column=1)


    if [[ $opzione != "" ]]; then

    avviso $opzione
    else
    clear
    opzione="Esci"
    echo -e "\nNon è stata trovata alcuna stazione.\n"
    fi

    done

    RispondiElimina
    Risposte
    1. We! Mi assento un attimo e trovo tante belle cose!! :D

      Elimina
  5. Sinergia e partecipazione... Siamo molto contenti :)

    RispondiElimina
  6. Anche io ho fatto uno script per le radio qualche tempo fa, funziona un po' diverso, non c'è la grafica e invece di richiedere la modifica dello script per inserire le radio consente di mettere i file di playlist in una directory e se li legge da solo. Inoltre i nomi delle dir possono essere usati per categorizzare le radio.
    Se vi interessa ve lo passo.

    RispondiElimina
  7. Grazie Vinnie, stiamo pensando di raccogliere gli script e i contributi proposti dalla nostra comunity e di utilizzare quelli più interessanti nei prossimi rilasci di Lubit. Se vuoi partecipare inviaci pure lo script all'indirizzo di posta elettronica del team:
    lubit.project@gmail.com
    Ti ringrazio e ti auguro una buona serata.
    Squitty - Lubit team

    RispondiElimina
  8. Ok ve l'ho inviato, spero possa tornarvi utile.
    Ciao :)

    RispondiElimina
  9. Grazie Vinnie, tutti gli script fanno comodo, non fosse altro per gli spunti che se ne possono trarre. E la condivisione genera appartenenza.
    Buona giornata e di nuovo grazie :-)
    Squitty - Lubit team

    RispondiElimina