arthur.bebou

Le site arthur.bebou.netlib.re - retour accueil

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

index.sh (8952B)


      1 #! page
      2 
      3 title: Ecoutez radio france dans votre console
      4 author: Arthur Pons
      5 description: Explorons comment écouter la radio en ligne de commande et les avantages que cela peut procurer
      6 publication: 2023-11-23
      7 
      8 sectionmd: main
      9 
     10 FIP n'est pas toujours disponible sur les ondes hertziennes. Il faut donc
     11 parfois se résoudre à l'écouter sur internet. Or, les interfaces web pour le
     12 faire sont :
     13 
     14   * très peu performantes, ne fonctionnent pas ou très mal sur du vieux matériel
     15   * absolument pas interopérables avec d'autres systèmes
     16 
     17 J'ai donc entrepris il y a longtemps d'écrire un script permettant
     18 d'écouter FIP dans la console et d'offrir une interface de sortie simple de
     19 façon à pouvoir la conjuguer avec d'autres systèmes.
     20 
     21 Si vous avez lu à peu près n'importe quel autre article de ma part sur ce site,
     22 c'est toujours la même rengaine. Tout ce que j'écris ici fonctionne pour
     23 FIP mais devrait pouvoir être adapté sans troooop d'effort pour n'importe
     24 quelle radio de radio france.
     25 
     26 ## Installation
     27 
     28 ### Dépendances
     29 
     30   * curl (pourrait être changé pour wget)
     31   * jq (pour parser ce que renvoie l'api de radio france)
     32   * mpv (pour lire le flux audio, remplaçable par n'importe quel lecteur audio qui sait lire un flux audio depuis internet)
     33 
     34 Pour faire fonctionner le programme il faudra soit installer ces programmes
     35 soit modifier le script pour y mettre des remplaçants.
     36 
     37 ### Télécharger le script
     38 
     39 Le code est dispo sur notre serveur git. Il vous suffit de le cloner :
     40 
     41 	git clone git://katzele.netlib.re/fip
     42 
     43 Alternativement, si vous n'avez pas git ou si vous ne voulez pas l'utiliser,
     44 le script tel qu'il est à l'heure où j'écris ces lignes se trouve [ici](./fip).
     45 Il suffit d'en copier le contenu dans un fichier sur votre pc.
     46 
     47 ### Préparer un dossier pour recevoir les infos
     48 
     49 Il vous faut ensuite choisir un dossier existant quelconque (ou en créer un)
     50 dans lequel le script enregistra un fichier texte contenant les infos des
     51 titres (pour des raisons que j'explique [ici](#interoprabilit) et
     52 [là](/musique/#astuces-dusage-)).
     53 
     54 Il faut ensuite modifier le `~/git/fip/session` de cette ligne du script 
     55 
     56 	echo "$title	$(date)" >> ~/git/fip/session
     57 
     58 par le chemin du dossier et du fichier dans lequel vous voulez inscrire les
     59 informations. Par exemple, si vous avez créé le dossier `fip` et que vous
     60 voulez nommer le fichier `data` :
     61 
     62 	echo "$title	$(date)" >> /home/utilisateurice/fip/data
     63 
     64 ## Usage
     65 
     66 Il suffit de lancer le script qui lira par défaut FIP :
     67 
     68 	./fip
     69 	Donna Blue - Fantasy girl
     70 	|======================================--------------------|
     71 
     72 Une fois le script lancé vous pouvez, du moins si vous utilisez `mpv`, revenir
     73 en arrière dans le flux audio, faire pause, le mutter etc avec les raccourcis
     74 clavier habituels. Voir le manuel d'mpv pour le connaître.
     75 
     76 > Si au lancement vous obtenez une erreur similaire à : `./fip: nn: cannot
     77 > create /home/blablabla/git/fip/session: Directory nonexistent`
     78 > 
     79 > c'est que vous n'avez pas effectué [cette
     80 > modification](#prparer-un-dossier-pour-recevoir-les-infos) ou que vous l'avez
     81 > faite mais qu'elle ne correspond pas au dossier que vous avez choisi pour
     82 > contenir le fichier. Assurez vous de bien renseigner le chemin d'un fichier
     83 > dont les dossiers parents existent sur votre machine.
     84 
     85 Avec pour argument `list` il affichera toutes les sous chaînes de fip :
     86 
     87 	./fip list
     88 	FIP_ROCK
     89 	FIP_JAZZ
     90 	FIP_GROOVE
     91 	FIP_WORLD
     92 	FIP_NOUVEAUTES
     93 	FIP_REGGAE
     94 	FIP_ELECTRO
     95 	FIP_METAL
     96 	FIP_POP
     97 	FIP_HIP_HOP
     98 
     99 Et avec pour argument l'une de ces webradios c'est celle-ci que vous écouterez :
    100 
    101 	./fip FIP_JAZZ
    102 	Dave Brubeck - Blue Shadows in the street
    103 	|=---------------------------------------------------------|
    104 
    105 ## Interopérabilité
    106 
    107 Par défaut la totalité des titres qui s'afficheront dans votre console
    108 seront également sauvegardés dans un fichier de votre choix comme expliqué [au
    109 dessus](#usage).
    110 
    111 Par défaut le contenu de ce fichier sera sous la forme :
    112 
    113 	Seb Wildblood - Slice (feat. Laraaji)           jeu. 23 nov. 2023 15:22:24 CET
    114 	Dennis Bovell - Bettah                          jeu. 23 nov. 2023 15:22:35 CET
    115 	Jam (Human Spirit) - Les portes du pénitencier  jeu. 23 nov. 2023 15:25:50 CET
    116 	Nana Adjoa - Throw stones                       jeu. 23 nov. 2023 15:30:15 CET
    117 	Maiiah & The Angels Of Libra - I wanna go       jeu. 23 nov. 2023 15:36:00 CET
    118 	David Bowie - Soul love                         jeu. 23 nov. 2023 15:39:32 CET
    119 
    120 La date est celle à laquelle le titre a commencé.
    121 
    122 Cela vous permet ensuite de faire ce que vous voulez avec ce contenu.
    123 Des statistiques, retrouver dans le futur une chanson qui vous a plu
    124 ou comme je le documente [là](/musique/#astuces-dusage-),
    125 ajouter automatiquement le titre écouté en direct à une playlist
    126 de votre choix.
    127 
    128 ## Modification
    129 
    130 Comme tous les petits scripts vite fait, il est moche et mal fait. Cela étant
    131 dit, ci-dessous un petit guide pour le modifier script si vous en ressentez le
    132 besoin. Je ne renseigne pas les numéros de lignes parce qu'elles
    133 risque de changer. Je donne le contenu de la ligne, vous pouvez faire
    134 une recherche dessus ou simplement "grepper avec les yeux", le script est court.
    135 
    136 Je pourrais mettre en place pleins d'options pour que vous n'ayez pas à
    137 regarder dans le code mais c'est pas trop l'esprit Katzele, du moins pas pour
    138 un script aussi simple et court. Si vous n'avez pas l'habitude d'écrire du code
    139 considérez cela comme une opportunité pour vous y mettre un tout petit peut, le
    140 désacraliser et exercez de manière très concrète au moins deux des quatre
    141 libertés que vous offrent les logiciels libres.
    142 
    143 Promis certaines de ces modifications sont à la portées de toustes.
    144 
    145 ### Changer la radio
    146 
    147 Si vous connaissez l'identifiant d'une autre radio de radio france vous
    148 pouvez l'écouter en faisant `./fip FRANCE_INTER` par exemple où la mettre
    149 par défaut en modifiant la ligne déclarant la variable `radio` :
    150 
    151 	radio="FRANCE_INTER"
    152 
    153 Attention, si la chaîne que vous choisissez ne passe pas de la musique vous
    154 obtiendrez des erreurs puisque le code actuel ne parse le résultat de l'API que
    155 pour obtenir des chansons. Dans le schéma de données de radio france, une chanson
    156 n'est pas la même chose qu'une émission de radio. Cette modification permet donc
    157 d'écouter n'importe quelle chaîne mais pas d'afficher les infos de l'émission
    158 à l'écran si ce n'est pas de la musique.[^1]
    159 
    160 ### Modifier la tête de la barre de progression
    161 
    162 Pour modifier sa longueur modifiez la valeur de `length` sur cette ligne :
    163 
    164 	length=60
    165 
    166 Pour modifier ses composants, modifiez les variables `delim`, `before` et `after`.
    167 Par exemple pour qu'elle soit initialement vide puis se remplisse de `#` :
    168 
    169 	length=60; delim='/'; before=' '; after='#'
    170 	# Qui donnera
    171 	/###########                                           /
    172 
    173 ### Modifier les données affichées dans la console
    174 
    175 Cela se passe sur cette ligne :
    176 
    177 	echo "$title"
    178 
    179 N'importe quoi d'envoyé dans STDOUT à cette endroit sera affiché dans la
    180 console.
    181 
    182 ### Modifier ce qui est enregistré dans le fichier de sauvegarde
    183 
    184 Comme indiqué précédemment cela se passe à cette ligne :
    185 
    186 	echo "$title	$(date)" >> ~/git/fip/session
    187 
    188 Par exemple si l'on voulait la date mais sous forme de timestamp
    189 UNIX pour plus de flexibilité :
    190 
    191 	echo "$title	$(date +%s)" >> ~/git/fip/session
    192 
    193 ### Si vous voulez supprimer la barre de progression
    194 
    195 Le plus direct est de commenter ou supprimer ces **deux** lignes :
    196 
    197 	echo "$barlines" | sed -E "1,$i s/$before/$after/g" | tr -d '\n'
    198 
    199 	...
    200 
    201 	eraseline
    202 
    203 Pour commenter il faut ajouter un `#` en début de ligne.
    204 Elles ne s'exécuteront plus.
    205 
    206 ### Si vous voulez utiliser un autre lecteur qu'mpv
    207 
    208 Mettez le nécessaire à la ligne ;
    209 
    210 	mpv --volume=50 --really-quiet "https://icecast.radiofrance.fr/$(echo $radio | tr -d '_' | tr '[A-Z]' '[a-z]')-midfi.mp3"
    211 
    212 La construction de l'url peut rester la même, c'est ce qui précède avant qu'il
    213 conviendra de changer. Par exemple ceci fonctionne :
    214 
    215 	vlc "https://icecast.radiofrance.fr/$(echo $radio | tr -d '_' | tr '[A-Z]' '[a-z]')-midfi.mp3"
    216 
    217 ### Si vous voulez récupérer d'autres infos de l'api
    218 
    219 C'est une modification plus délicate. Il faudra vous documenter. Elle se trouve
    220 [ici](https://developers.radiofrance.fr/).
    221 
    222 En tout cas la requête est celle-ci :
    223 
    224 	curl -Ls 'https://openapi.radiofrance.fr/v1/graphql' \
    225 	-H 'Content-Type: application/json' \
    226 	-H 'x-token: 9720d513-a257-417a-9d05-0772dd40a7e5' \
    227 	--data-binary '{"query":"{ live(station: '$radio') { song { end track { mainArtists title } } }}"}' \
    228 	--compressed
    229 
    230 C'est donc tout ce qui est passé en argument de `--data-binary` qu'il
    231 conviendra de modifier puis cette ligne qui parse le résultat pour le mettre
    232 sous la forme voulu :
    233 
    234 	jq -r ' ( .data.live.song | ([.track.mainArtists[], " - ", .track.title]|join("")), .end)'
    235 
    236 
    237 [^1]: J'ai testé ça fonctionne même pas avec france musique. Considérez donc que ça ne supporte que FIP pour l'instant.