Εφαρμογή για ράδιο (shell script) (Σενάριο κελύφους)  Το θέμα επιλύθηκε

...browsers, email, downloads, torrents, κλπ (όχι προβλήματα καρτών εδώ)

Συντονιστής: the_eye

Εφαρμογή για ράδιο (shell script) (Σενάριο κελύφους)

Δημοσίευσηαπό xXx » 12 Ιούλ 2023, 03:33

Εδώ και πολύ καιρό, παιδευόμουν χειροκίνητα να ακούσω ραδιόφωνο από το linux σύστημα μου,
ένα Raspberry Pi 3+, το οποίο έχω στην αποθήκη-συνεργείο, συνδεδεμένο με ενισχυτές - ηχεία κλπ.
Εννοείται πως έχω κάθε είδους μουσική που με ενδιαφέρει, σε μορφή mp3 και flac,
αλλά κάποιες φορές, δεν υπάρχει αντικαταστάτης ενός καλού ραδιοφωνικού σταθμού.
Έτσι λοιπόν, κάθισα και ζορίστηκα, κι έφτιαξα ένα bash script, που μου λύνει τα χέρια,
όταν πρόκειται να ακούσω ραδιόφωνο.
Και μιας και για εμένα, δουλεύει άριστα, είπα να σας το παραθέσω:
Spoiler: show
Κώδικας: Επιλογή όλων
#!/bin/bash

if [ "$(which whiptail)" == "" ]
then
  echo " Please install whiptail."
  exit 1
fi

if [ "$(which mpv)" == "" ]
then
  echo " Please install mpv."
  exit 1
fi

if [ "$(which killall)" == "" ]
then
  echo " Please install psmisc."
  exit 1
fi

if [ "$(which wget)" == "" ]
then
  echo " Please install wget."
  exit 1
fi

if [ "$(wget -qO- 1.1.1.1)" == "" ]
then
  echo " This script needs internet."
  exit 1
fi

URL='http://opml.radiotime.com/Tune.ashx?id=s'

while [ 1 ]
do
CHOICE=$(
whiptail --title "ΡΑΔΙΟΦΩΝΟ" --menu "Επέλεξε σταθμό:" --default-item "$CHOICE" 40 40 30 \
"1)" "1055 Rock (Ροκ Χέβι)" \
"2)" "ERT-3 (Ελληνικά)" \
"3)" "99FM / Radio1 (Ελληνικά)" \
"4)" "Breeze (Ξένα)" \
"5)" "Ακρόαμα (Ελληνικά)" \
"6)" "Άλφα (Ξένα Σέρρες)" \
"7)" "Άρτι (Ξένα Χαλαρά)" \
"8)" "Baraza (Ξένα Χαλαρά)" \
"9)" "Μπλέ (Ελληνικά)" \
"10)" "Boite (Ξένα Επιτυχίες)" \
"11)" "Cosmos (Ελληνικά)" \
"12)" "CosmosFm (Ελληνικά)" \
"13)" "Echoes.gr (Ξένα Χαλαρά)" \
"14)" "Epiloges (Ελληνικά)" \
"15)" "Fly (Ξένα Χαλαρά)" \
"16)" "Focus (Πολιτικά)" \
"17)" "Free (Δεν παίζει συνήθως)" \
"18)" "Imagine (Ξένα Επιτυχίες)" \
"19)" "Kalamaria (Ελληνικά)" \
"20)" "Λαϊκός (Λαϊκά)" \
"21)" "LIBERO (Σπορ)" \
"22)" "Metropolis (Διάφορα)" \
"23)" "Mood (Ξένα)" \
"24)" "More (Ξένα)" \
"25)" "MousiRadio (Ξένα Χαλαρά)" \
"26)" "Music Art Club (Ξένα Χαλαρά)" \
"27)" "Next (Ελληνικά Λαϊκά)" \
"28)" "North (Ελληνικά)" \
"29)" "OFFradio (Ξένα Χαλαρά)" \
"30)" "Paranoise (Ξένα Χαλαρά)" \
"31)" "Peek (Ξένα Επιτυχίες)" \
"32)" "Περίπου (Ξένα Χαλαρά)" \
"33)" "Plus (Ξένα)" \
"34)" "Χίλια Αστέρια (Ξένα)" \
"35)" "Aquarius (Ξένα)" \
"36)" "Bella (Βουλγαρία)" \
"37)" "Boo (Ξένα)" \
"38)" "Nowhere (Ξένα)" \
"39)" "Νυχτοπούλι (Ελληνικά)" \
"40)" "Thessaloniki (Ελληνικά)" \
"41)" "Ultra (Γύφτικα)" \
"42)" "Radio1d.gr (Ξένα)" \
"43)" "Radio708090 (Ξένα)" \
"44)" "RadioCosmo (Ελληνικά)" \
"45)" "Rainbow (Ξένα Επιτυχίες)" \
"46)" "Dancefloor (Ξένα)" \
"47)" "RockRadio (Ξένα Ροκ-Χέβι)" \
"48)" "RSO (Ξένα Επιτυχίες)" \
"49)" "Shook (Ξένα)" \
"50)" "Skyline (Ξένα)" \
"51)" "Smooth (Ξένα)" \
"52)" "Σοχός (Ελληνικά)" \
"53)" "Studio 3 (Δημοτικά)" \
"54)" "Studio Thess (Ελληνικά)" \
"55)" "Σύνορα (Ελληνικά)" \
"56)" "Free 1431 (Ξένα)" \
"57)" "ThessRadio (Ξένα)" \
"58)" "Πικάπ (Πιάνο Τζαζ)" \
"59)" "Velvet (Ξένα Επιτυχίες)" \
"60)" "Zoo (Ξένα Μοντέρνα)" \
"61)" "Κλείσιμο" 3>&2 2>&1 1>&3
)
case $CHOICE in
"1)") killall mpv ; mpv $URL"47804" &>/dev/null & ;;
"2)") killall mpv ; mpv $URL"288636" &>/dev/null & ;;
"3)") killall mpv ; mpv $URL"78164" &>/dev/null & ;;
"4)") killall mpv ; mpv $URL"228588" &>/dev/null & ;;
"5)") killall mpv ; mpv $URL"103654" &>/dev/null & ;;
"6)") killall mpv ; mpv $URL"103656" &>/dev/null & ;;
"7)") killall mpv ; mpv $URL"141847" &>/dev/null & ;;
"8)") killall mpv ; mpv $URL"228803" &>/dev/null & ;;
"9)") killall mpv ; mpv $URL"290707" &>/dev/null & ;;
"10)") killall mpv ; mpv $URL"168951" &>/dev/null & ;;
"11)") killall mpv ; mpv $URL"102619" &>/dev/null & ;;
"12)") killall mpv ; mpv $URL"250137" &>/dev/null & ;;
"13)") killall mpv ; mpv $URL"97218" &>/dev/null & ;;
"14)") killall mpv ; mpv $URL"103609" &>/dev/null & ;;
"15)") killall mpv ; mpv $URL"266902" &>/dev/null & ;;
"16)") killall mpv ; mpv $URL"102469" &>/dev/null & ;;
"17)") killall mpv ; mpv $URL"302900" &>/dev/null & ;;
"18)") killall mpv ; mpv $URL"79446" &>/dev/null & ;;
"19)") killall mpv ; mpv $URL"78191" &>/dev/null & ;;
"20)") killall mpv ; mpv $URL"102462" &>/dev/null & ;;
"21)") killall mpv ; mpv $URL"78742" &>/dev/null & ;;
"22)") killall mpv ; mpv $URL"3055" &>/dev/null & ;;
"23)") killall mpv ; mpv $URL"120770" &>/dev/null & ;;
"24)") killall mpv ; mpv $URL"102725" &>/dev/null & ;;
"25)") killall mpv ; mpv $URL"272715" &>/dev/null & ;;
"26)") killall mpv ; mpv $URL"103081" &>/dev/null & ;;
"27)") killall mpv ; mpv $URL"208532" &>/dev/null & ;;
"28)") killall mpv ; mpv $URL"133388" &>/dev/null & ;;
"29)") killall mpv ; mpv $URL"103078" &>/dev/null & ;;
"30)") killall mpv ; mpv $URL"104790" &>/dev/null & ;;
"31)") killall mpv ; mpv $URL"225374" &>/dev/null & ;;
"32)") killall mpv ; mpv $URL"177778" &>/dev/null & ;;
"33)") killall mpv ; mpv $URL"102465" &>/dev/null & ;;
"34)") killall mpv ; mpv $URL"269522" &>/dev/null & ;;
"35)") killall mpv ; mpv $URL"124706" &>/dev/null & ;;
"36)") killall mpv ; mpv $URL"54417" &>/dev/null & ;;
"37)") killall mpv ; mpv $URL"163039" &>/dev/null & ;;
"38)") killall mpv ; mpv $URL"155185" &>/dev/null & ;;
"39)") killall mpv ; mpv $URL"281728" &>/dev/null & ;;
"40)") killall mpv ; mpv $URL"3037" &>/dev/null & ;;
"41)") killall mpv ; mpv $URL"297782" &>/dev/null & ;;
"42)") killall mpv ; mpv $URL"191812" &>/dev/null & ;;
"43)") killall mpv ; mpv $URL"73197" &>/dev/null & ;;
"44)") killall mpv ; mpv $URL"6659" &>/dev/null & ;;
"45)") killall mpv ; mpv $URL"87077" &>/dev/null & ;;
"46)") killall mpv ; mpv $URL"246057" &>/dev/null & ;;
"47)") killall mpv ; mpv $URL"9406" &>/dev/null & ;;
"48)") killall mpv ; mpv $URL"54732" &>/dev/null & ;;
"49)") killall mpv ; mpv $URL"323926" &>/dev/null & ;;
"50)") killall mpv ; mpv $URL"297521" &>/dev/null & ;;
"51)") killall mpv ; mpv $URL"284614" &>/dev/null & ;;
"52)") killall mpv ; mpv $URL"102473" &>/dev/null & ;;
"53)") killall mpv ; mpv $URL"234505" &>/dev/null & ;;
"54)") killall mpv ; mpv $URL"153053" &>/dev/null & ;;
"55)") killall mpv ; mpv $URL"78185" &>/dev/null & ;;
"56)") killall mpv ; mpv $URL"78184" &>/dev/null & ;;
"57)") killall mpv ; mpv $URL"122794" &>/dev/null & ;;
"58)") killall mpv ; mpv $URL"303530" &>/dev/null & ;;
"59)") killall mpv ; mpv $URL"168619" &>/dev/null & ;;
"60)") killall mpv ; mpv $URL"78170" &>/dev/null & ;;
"61)") killall mpv ; exit ;;
esac
done

Περιέχει 60 σταθμούς της Θεσσαλονίκης και περιχώρων,
που θα αρέσουν σε όλους πιστεύω, αλλά μπορείτε να το επεξεργαστείτε,
ώστε να περιέχει τους δικούς σας αγαπημένους σταθμούς.
Κάνετε αντιγραφή και επικόλληση των περιεχομένων του script σε ένα νέο αρχείο (π.χ. /usr/local/bin/radio),
και κάνετε το script εκτελέσιμο (chmod +x /usr/local/bin/radio).
Μετά από αυτό, ανοίγετε ένα τερματικό, και απλά γράφετε "radio".
Εικόνα
Ελπίζω το script να μην παραβαίνει κάποιον όρο λειτουργίας του σάϊτ,
αλλά αν το κάνει, ας κατεβάσει την ανάρτηση μου αυτή ο διαχειριστής.
Όποιος το δοκιμάσει, ας μας πει την γνώμη του.
Τελευταία επεξεργασία από xXx και 04 Αύγ 2023, 05:56, έχει επεξεργασθεί 1 φορά/ες συνολικά
Κυρίως Desktop: MoBo: GA-MA78GM-S2H | CPU: AMD Phenom(tm) II X4 920 2.80 GHz | VGA: NVIDIA Corporation GF119 [GeForce GT 610] | RAM: 3GB DDR2 800 | Audio: Realtek ALC889A (ATI SB) | Audio: NVIDIA Corporation GF119 HDMI | OS: Debian jessie 64bit
Άβαταρ μέλους
xXx
punkTUX
punkTUX
 
Δημοσιεύσεις: 211
Εγγραφή: 05 Μάιος 2010, 16:12
Τοποθεσία: Ελλάδα, Θεσσαλονίκη, Άνω Πόλη
Εκτύπωση

Re: Εφαρμογή για ράδιο (shell script) (Σενάριο κελύφους)

Δημοσίευσηαπό the_eye » 12 Ιούλ 2023, 09:52

Πολύ ωραίο script !

Αν θες μπορείς να το βάλεις και στο github όπου θα το δει και άλλος κόσμος που ασχολείται με ανοιχτό λογισμικό.

Μια ιδέα που έχω, αν σκοπεύεις να ασχοληθείς, είναι να κρατάς τους σταθμούς σε ξεχωριστό αρχείο το οποίο να κάνεις download/ενημέρωση στο ξεκίνημα του script.
Με αυτό τον τρόπο θα μπορείς εύκολα να αλλάζεις/ενημερώνεις σε όλους που χρησιμοποιούν το script τους σταθμούς.
Όσο λιγότερο κλειστό λογισμικό έχεις, τόσα λιγότερα προβλήματα.
1 Γνώσεις ⇛ Linux: Καλό ┃ Προγραμματισμός: Ναι PHP, MySQL ┃ Αγγλικά: Καλά
2 Ubuntu 22.04 Jammy Jellyfish 5.15.0-58-generic 64bit (el_GR.UTF-8, ubuntu:GNOME ubuntu)
3 Intel Core i3-6100 CPU @ 3.70GHz ‖ RAM 7836 MiB ‖ Gigabyte B150M-HD3 DDR3-CF - Gigabyte B150M-HD3 DDR3
4 Intel HD Graphics 530 [8086:1912] {i915}
5 enp1s0: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller [10ec:8168] (rev 15)
Οδηγοί Ubuntu Βίντεο Οδηγοί
Άβαταρ μέλους
the_eye
Διαχειριστής
Διαχειριστής
 
Δημοσιεύσεις: 11679
Εγγραφή: 16 Μαρ 2010, 17:19
Launchpad: ntoulasd
IRC: the_eye_
Εκτύπωση

Re: Εφαρμογή για ράδιο (shell script) (Σενάριο κελύφους)

Δημοσίευσηαπό xXx » 12 Ιούλ 2023, 10:51

the_eye έγραψε:Μια ιδέα που έχω, αν σκοπεύεις να ασχοληθείς, είναι να κρατάς τους σταθμούς σε ξεχωριστό αρχείο το οποίο να κάνεις download/ενημέρωση στο ξεκίνημα του script.
Με αυτό τον τρόπο θα μπορείς εύκολα να αλλάζεις/ενημερώνεις σε όλους που χρησιμοποιούν το script τους σταθμούς.


Spoiler: show
Είμαι ήδη στην διαδικασία ενός "εξυπνότερου" σκρίπ, το οποίο θα παρέχει διαφορετικούς σταθμούς στον χρήστη,
ανάλογα με την τοποθεσία του. Το οποίο μάλιστα, είναι και αρκετά μικρότερο ως σκριπτ.
Δουλεύει καλά ήδη, το μόνο πρόβλημα που έχω ότι ακόμη δεν έχω ψαχτεί πως να το κάνω να τρέχει αυτόνομα,
και χωρίς προσωρινά αρχεία, έξτρα αρχεία, και λοιπά. Το παραθέτω:
Κώδικας: Επιλογή όλων
#!/bin/bash
if [ "$(which whiptail)" == "" ]
then
  echo " Please install whiptail."
  exit 1
fi
if [ "$(which mpv)" == "" ]
then
  echo " Please install mpv."
  exit 1
fi
if [ "$(which killall)" == "" ]
then
  echo " Please install psmisc."
  exit 1
fi
if [ "$(which wget)" == "" ]
then
  echo " Please install wget."
  exit 1
fi
if [ "$(wget -qO- 1.1.1.1)" == "" ]
then
  echo " This script needs internet."
  exit 1
fi
URL="http://opml.radiotime.com/Browse.ashx?c=local"
DATA="$(wget -qO- $URL | cut -f4,6 -d\" | grep 'Tune.ashx?id=' | sed "s/\&/\&/g" | sed "s/\'//g" | sed "s/ /_/g")"
NAME=($(echo "$DATA" | cut -f1 -d\"))
UURL=($(echo "$DATA" | cut -f2 -d\"))
X=0
echo '#!/bin/bash'
echo 'while [ 1 ]'
echo 'do'
echo 'CHOICE=$('
echo 'whiptail --title "ΡΑΔΙΟΦΩΝΟ" --menu "Επέλεξε σταθμό:" --default-item "$CHOICE" 30 60 22 \'
for i in "${NAME[@]}"
do
  echo "\"$X)\"" \"$(echo "${NAME[$X]}" | sed "s/_/ /g")\" "\\"
  let X+=1
done

echo "\"$X)\"" "Κλείσιμο" "3>&2 2>&1 1>&3"
echo ")"
echo 'case $CHOICE in'
X=0
for i in "${UURL[@]}"
do
  echo "\"$X)\")" "killall mpv 2>/dev/null ; mpv" ""${UURL[$X]}"" "&>/dev/null & ;;"
  let X+=1
done
echo "\"$X)\")" "killall mpv 2>/dev/null ; exit ;;"
echo "esac"
echo "done"

Οπότε, αναφορικά με το παραπάνω "μόνο πρόβλημα", είναι το ότι για να τρέξει το "ζωντανότερο" αυτό σκριπτ,
θα πρέπει κάποιος αφού το σώσει, και το κάνει εκτελέσιμο, να το καλέσει ως εξής:
Κώδικας: Επιλογή όλων
radio | bash

Μέχρι να βρω τρόπο (και χρόνο) να το κάνω πιό ευπαρουσίαστο.
Ως λύση πάντως, είναι σίγουρα πιό έξυπνη, και χωρίς τίποτα hardcoded στο σκρίπτ.
Αν κάποιος το δοκιμάσει από Αθήνα, ας μας πει πόσους σταθμούς του βγάζει.
Τελευταία επεξεργασία από xXx και 04 Αύγ 2023, 05:57, έχει επεξεργασθεί 1 φορά/ες συνολικά
Κυρίως Desktop: MoBo: GA-MA78GM-S2H | CPU: AMD Phenom(tm) II X4 920 2.80 GHz | VGA: NVIDIA Corporation GF119 [GeForce GT 610] | RAM: 3GB DDR2 800 | Audio: Realtek ALC889A (ATI SB) | Audio: NVIDIA Corporation GF119 HDMI | OS: Debian jessie 64bit
Άβαταρ μέλους
xXx
punkTUX
punkTUX
 
Δημοσιεύσεις: 211
Εγγραφή: 05 Μάιος 2010, 16:12
Τοποθεσία: Ελλάδα, Θεσσαλονίκη, Άνω Πόλη
Εκτύπωση

Re: Εφαρμογή για ράδιο (shell script) (Σενάριο κελύφους)  Το θέμα επιλύθηκε

Δημοσίευσηαπό xXx » 22 Ιούλ 2023, 15:08

Τελικά, βρήκα τον χρόνο και ασχολήθηκα λιγάκι, ώστε να γίνει το script του ράδιο,
αρκετά πιό ευπαρουσίαστο.
Τώρα τα μηνύματα όταν λείπει κάποια εξάρτηση δεν χάνονται στο υπερπέραν,
και το script δεν συνεχίζει ως το τέλος, αν δεν υπάρχουν οι εξαρτήσεις:
Κώδικας: Επιλογή όλων
root@pi3b[~]# Radio
Please install mpv.
root@pi3b[~]#

Επίσης το script τρέχει τώρα πλέον από τον εαυτό του, χωρίς να χρειάζεται να το κάνετε pipe εσείς.
Σας το παραθέτω:
Κώδικας: Επιλογή όλων
#!/bin/bash
if [ "$(which whiptail)" == "" ]
then
  echo " Please install whiptail."
  exit 1
fi
if [ "$(which mpv)" == "" ]
then
  echo " Please install mpv."
  exit 1
fi
if [ "$(which killall)" == "" ]
then
  echo " Please install psmisc."
  exit 1
fi
if [ "$(which wget)" == "" ]
then
  echo " Please install wget."
  exit 1
fi
if [ "$(wget -qO- 1.1.1.1)" == "" ]
then
  echo " This script needs internet."
  exit 1
fi
URL="http://opml.radiotime.com/Browse.ashx?c=local"
DATA="$(wget -qO- $URL | cut -f4,6 -d\" | grep 'Tune.ashx?id=' | sed "s/\&/\&/g" | sed "s/\'//g" | sed "s/ /_/g")"
NAME=($(echo "$DATA" | cut -f1 -d\"))
UURL=($(echo "$DATA" | cut -f2 -d\"))
X=0
RADIO () {
echo '#!/bin/bash'
echo 'while [ 1 ]'
echo 'do'
echo 'CHOICE=$('
echo 'whiptail --title "ΡΑΔΙΟΦΩΝΟ" --menu "Επέλεξε σταθμό:" --default-item "$CHOICE" 30 60 22 \'
for i in "${NAME[@]}"
do
  echo "\"$X)\"" \"$(echo "${NAME[$X]}" | sed "s/_/ /g")\" "\\"
  let X+=1
done

echo "\"$X)\"" "Κλείσιμο" "3>&2 2>&1 1>&3"
echo ")"
echo 'case $CHOICE in'
X=0
for i in "${UURL[@]}"
do
  echo "\"$X)\")" "killall mpv 2>/dev/null ; mpv" ""${UURL[$X]}"" "&>/dev/null & ;;"
  let X+=1
done
echo "\"$X)\")" "killall mpv 2>/dev/null ; exit ;;"
echo "esac"
echo "done"
}
RADIO | bash

Πως να το κάνετε δικό σας:
Κάνετε αντιγραφή τα περιεχόμενα του κώδικα, και επικόλληση σε ένα νέο αρχείο.
Παραδείγματος χάριν, /usr/local/bin/Radio
Κάνετε το νέο αρχείο Radio εκτελέσιμο:
Κώδικας: Επιλογή όλων
chmod +x /usr/local/bin/Radio

Μετά, απλά τρέχετε το script
Κώδικας: Επιλογή όλων
Radio

Όπως είπα και παραπάνω, αν τελικά το χρησιμοποιήσετε,
πείτε μας πόσους σταθμούς βγάζει στην περιοχή σας.
Καλές ακροάσεις!!!
Κυρίως Desktop: MoBo: GA-MA78GM-S2H | CPU: AMD Phenom(tm) II X4 920 2.80 GHz | VGA: NVIDIA Corporation GF119 [GeForce GT 610] | RAM: 3GB DDR2 800 | Audio: Realtek ALC889A (ATI SB) | Audio: NVIDIA Corporation GF119 HDMI | OS: Debian jessie 64bit
Άβαταρ μέλους
xXx
punkTUX
punkTUX
 
Δημοσιεύσεις: 211
Εγγραφή: 05 Μάιος 2010, 16:12
Τοποθεσία: Ελλάδα, Θεσσαλονίκη, Άνω Πόλη
Εκτύπωση


Επιστροφή στο Εφαρμογές για Internet

cron