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