Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
fip (3098B)
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 # Mise à jour des informations du morceau 56 enjoy() { 57 # local ne marche pas en shell POSIX !!! 58 for it; do read -r "${it?}"; done 59 60 # On vérifie que l'api ait bien renvoyé une chanson 61 if [ ! "$title" ];then 62 # Si non on attend 4 secondes puis on quitte la fonction 63 # pour requêter l'api une nouvelle fois 64 sleep 4 65 return 0 66 fi 67 68 # On affiche les infos 69 echo "$title" 70 # On les ajoute dans le fichier de session 71 echo "$title $(date)" >> ~/git/fip/session 72 # on attend la fin du morceau 73 # sleep $(( $pause + 1 )) 2>/dev/null 74 75 # Puisque la barre de progression fait 58 "-" de long 76 # on calcul combien de secondes doivent faire les $length incréments 77 # de temps entre le début et la fin de la chanson 78 inc=$(echo "($end - $(date +%s))/$length" | bc -l) 79 for i in $(seq 1 $length);do 80 # Pour chacun de ces incrément on affiche la barre de progression et 81 # on attend le nombre de secondes 82 echo "$barlines" | sed -E "1,$i s/$before/$after/g" | tr -d '\n' 83 sleep $inc 84 # Puis on efface la barre pour affichier la nouvelle 85 eraseline 86 done 87 sleep 1 88 89 # Affichage de la couverture, supprimer si on s'en fiche 90 # Ou si l'on veut économiser des ressources 91 # Malheureusement les couverture ne sont plus dispos ? :( 92 # curl -Ls "$cover" --output - | catimg -w 80 - 93 } 94 95 ( while :; do 96 from_fip | 97 current_track | 98 enjoy title end 99 done; ) & 100 set $! 101 mpv --volume=50 --really-quiet "https://icecast.radiofrance.fr/$(echo $radio | tr -d '_' | tr '[A-Z]' '[a-z]')-midfi.mp3" 102 kill $1 103 killall fip &> /dev/null