Ecouter fip dans un terminal - retour accueil
git clone git://bebou.netlib.re/fip
Log | Files | Refs | README |
commit b0707a0740ce1a934d2d92c0144cbb6281956a75 parent 100e4fbe6e4bc0ac631725437a448d0c76c6623d Auterice: arthur <arthur.pons@unistra.fr> Date: Wed, 15 Nov 2023 18:00:42 +0100 Migration de l'API Radio France Bouuuuuh faut un compte on aime paaaaas On perd les couvertures d'albums J'ai volontairement laissé mon token, servez-vous Code un peu plus propre ? Diffstat:
M | fip | | | 97 | ++++++++++++++++++++++++++++++++++++++++++------------------------------------- |
1 file changed, 51 insertions(+), 46 deletions(-)
diff --git a/fip b/fip @@ -2,79 +2,84 @@ # Sans argument on écoute fip if [ "$#" -eq 0 ]; then - radio="fip" -# Avec list on liste les stations dispo + radio="FIP" elif [ "$1" = "list" ]; then - curl -Ls https://www.radiofrance.fr/api/v1.9/stations/fip/webradios | jq -r '.[].slug' + # Avec list on liste les stations dispo + curl -Ls 'https://openapi.radiofrance.fr/v1/graphql' \ + -H 'Content-Type: application/json' \ + -H 'Accept: application/json' \ + -H 'x-token: 9720d513-a257-417a-9d05-0772dd40a7e5' + --data-binary '{"query":"{ brands { webRadios { id } }}"}' \ + --compressed | + jq | + grep -Eo 'FIP_[^\"]*' exit 0 -# Sinon on écoute celle passée en argument else - radio="$1" + # Sinon on écoute celle passée en argument + radio=$(echo "$1" | tr "[a-z]" "[A-Z]") fi -# On lance le stream de fip en qualité moyenne -# Il faut retirer le "_" du nom de la station - -# On récupère les infos via l'api de radiofrance from_fip() { - curl -Ls "https://www.radiofrance.fr/api/v1.9/stations/fip/webradios/$radio" + # On récupère les infos via l'api de radiofrance + curl -Ls 'https://openapi.radiofrance.fr/v1/graphql' \ + -H 'Content-Type: application/json' \ + -H 'x-token: 9720d513-a257-417a-9d05-0772dd40a7e5' \ + --data-binary '{"query":"{ live(station: '$radio') { song { end track { mainArtists title } } }}"}' \ + --compressed } -# On filtre pour récupérer les infos du morceau en 3 lignes : +# On filtre pour récupérer les infos du morceau en 2 lignes : # le titre -# l'url de la couverture +# l'url de la couverture (RIP) # l'heure de fin du morceau current_track() { - jq -r ' -( .now | - ( [ .secondLine, " - ", .firstLine]|join("") ) - , .cover.src), - .media.endTime -' + in=$(cat) + # Si y'a null dedans alors c'est ça qu'on passe en tant que titre + # Sinon on fait le coup de jq pour récupérer les infos + echo "$in" | + grep -q "null" && + echo "null" || + echo "$in" | + jq -r ' ( .data.live.song | ([.track.mainArtists[], " - ", .track.title]|join("")), .end)' } # Mise à jour des informations du morceau enjoy() { # local ne marche pas en shell POSIX !!! for it; do read -r "${it?}"; done - - # On vérifie que l'api ait bien renvoyé du temps et pas rien - if [ "$end" != "null" ]; then + + # On vérifie que l'api ait bien renvoyé une chanson sinon on vérifie que le temps + # de fin n'est pas dans le passé + if [ "$title" = "null" -o "$end" -le $(date +"%s") ] + then + # Si oui on dort 4 secondes + sleep 4 + else # On calcul la différence entre le moment où le morceau se termine et # maintenant - pause=$(date +"$end %s- p" | dc) + pause=$(date +"$end - %s" | bc) - # Si la différence est supérieure à 0 - # Vérification qui permet de gérer le fait que radiofrance ne met pas à - # jour les infos instantanément après la fin d'un morceau - if [ "$pause" -gt 0 ]; then - # On affiche les infos - echo "$title" - echo "$title $(date)" >> ~/git/fip/session - - # Affichage de la couverture, supprimer si on s'en fiche - # Ou si l'on veut économiser des ressources - # curl -Ls "$cover" --output - | catimg -w 80 - - - # on attend la fin du morceau - sleep "$pause" - else - # Sinon on évite de réquêter l'api comme des malades en attendant - # que ça revienne - sleep 4 - fi - else - # idem - sleep 4 + # On affiche les infos + echo "$title" + # On les ajoute dans le fichier de session + echo "$title $(date)" >> ~/git/fip/session + # on attend la fin du morceau + sleep "$pause" + + # Affichage de la couverture, supprimer si on s'en fiche + # Ou si l'on veut économiser des ressources + # Malheureusement les couverture ne sont plus dispos ? :( + # curl -Ls "$cover" --output - | catimg -w 80 - + fi } ( while :; do from_fip | current_track | - enjoy title cover end + enjoy title end done; ) & set $! -mpv --volume=50 --really-quiet "https://icecast.radiofrance.fr/$(echo $radio | sed 's/_//')-midfi.mp3" +mpv --volume=50 --really-quiet "https://icecast.radiofrance.fr/$(echo $radio | tr -d '_' | tr '[A-Z]' '[a-z]')-midfi.mp3" kill $1 killall fip &> /dev/null