fip

Ecouter fip dans un terminal - retour accueil

git clone git://bebou.netlib.re/fip
Log | Files | Refs | README |

fip (3111B)


      1 #!/bin/sh
      2 
      3 # Sans argument on écoute fip
      4 if [ "$#" -eq 0 ]; then
      5 	radio="FIP"
      6 elif [ "$1" = "list" ]; then
      7 	# Avec list on liste les stations dispo
      8 	curl -Ls 'https://openapi.radiofrance.fr/v1/graphql' \
      9 		  -H 'Content-Type: application/json' \
     10 		  -H 'Accept: application/json' \
     11 		  -H 'x-token: 9720d513-a257-417a-9d05-0772dd40a7e5' \
     12 		  --data-binary '{"query":"{ brands { webRadios { id } }}"}' \
     13 		  --compressed |
     14 	jq |
     15 	grep -Eo 'FIP_[^\"]*'
     16 	exit 0
     17 else
     18 	# Sinon on écoute celle passée en argument
     19 	radio=$(echo "$1" | tr "[a-z]" "[A-Z]")
     20 fi
     21 
     22 # La barre de progression
     23 length=60; delim='|'; before='-'; after='='
     24 barlines="$delim\n$(yes "$before" | head -n$length)\n$delim"
     25 
     26 # Pour supprimer la ligne courante et remettre le curseur au début
     27 eraseline(){
     28 	echo -n "\033[2K\033[0G"
     29 }
     30 
     31 from_fip() {
     32 	# On récupère les infos via l'api de radiofrance
     33 	curl -Ls 'https://openapi.radiofrance.fr/v1/graphql' \
     34 	-H 'Content-Type: application/json' \
     35 	-H 'x-token: 9720d513-a257-417a-9d05-0772dd40a7e5' \
     36 	--data-binary '{"query":"{ live(station: '$radio') { song { end track { mainArtists title } } }}"}' \
     37 	--compressed
     38 }
     39 
     40 # On filtre pour récupérer les infos du morceau en 2 lignes :
     41 # le titre
     42 # l'url de la couverture (RIP)
     43 # l'heure de fin du morceau
     44 current_track() {
     45 	in=$(cat)
     46 	# Si y'a null dedans alors c'est ça qu'on passe en tant que titre
     47 	# Sinon on fait le coup de jq pour récupérer les infos
     48 	echo "$in" |
     49 		grep -q "null" &&
     50 			echo "" ||
     51 			echo "$in" |
     52 				jq -r ' ( .data.live.song | ([.track.mainArtists[], " - ", .track.title]|join("")), .end)'
     53 }
     54 
     55 
     56 # Mise à jour des informations du morceau
     57 enjoy() {
     58 	# local ne marche pas en shell POSIX !!!
     59 	for it; do read -r "${it?}"; done
     60 
     61 	# On vérifie que l'api ait bien renvoyé une chanson
     62 	if [ ! "$title" ];then
     63 		# Si non on attend 4 secondes puis on quitte la fonction
     64 		# pour requêter l'api une nouvelle fois
     65 		sleep 4
     66 		return 0
     67 	fi
     68 
     69 	# On affiche les infos
     70 	echo "$title"
     71 	# On les ajoute dans le fichier de session
     72 	echo "$title	$(date)" >> ~/git/fip/session
     73 	# on attend la fin du morceau
     74 	# sleep $(( $pause + 1 )) 2>/dev/null
     75 
     76 	# Puisque la barre de progression fait 58 "-" de long
     77 	# on calcul combien de secondes doivent faire les $length incréments
     78 	# de temps entre le début et la fin de la chanson
     79 	inc=$(echo "($end - $(date +%s))/$length" | bc -l)
     80 	for i in $(seq 1 $length);do
     81 		# Pour chacun de ces incréments on affiche la barre de progression et
     82 		# on attend le nombre de secondes
     83 		echo "$barlines" | sed -E "1,$i s/$before/$after/g" | tr -d '\n'
     84 		sleep $inc
     85 		# Puis on efface la barre pour afficher la nouvelle
     86 		eraseline
     87 	done
     88 	sleep 1
     89 
     90 	# Affichage de la couverture, supprimer si on s'en fiche
     91 	# Ou si l'on veut économiser des ressources
     92 	# Malheureusement les couvertures ne sont plus dispos ? :(
     93 	# curl -Ls "$cover" --output - | catimg -w 80 -
     94 }
     95 
     96 ( while :; do
     97 	from_fip |
     98 	current_track |
     99 	enjoy title end
    100 done; ) &
    101 set $!
    102 mpv --volume=50 --really-quiet "https://icecast.radiofrance.fr/$(echo $radio | tr -d '_' | tr '[A-Z]' '[a-z]')-midfi.mp3" 2> /dev/null
    103 kill $1
    104 pkill fip &> /dev/null