Radiotray : récupération des titres
14/01/2012 - 2 commentaires
Ces derniers jours, j'aime bien écouter la radio sur mon ordi. Au début, j'allais sur le site de ma radio favorite, je téléchargeais le fichier.pls que j'ouvrais avec vlc. Ok, pas mal mais on peut faire plus simple. En cherchant un peu, je suis tombé sur Radio Tray, un logiciel libre pour Linux qui est très léger et facile à prendre en main. Bref, tout ce qu'il faut pour faire un bon lecteur radio. Au fil de mes écoutes, j'ai créé un fichier pour noter les chansons qui me plaisaient pour pouvoir les réécouter plus tard. Mais bon, c'est assez saoulant à faire à la longue... Y a aurait pas moyen de coder un programme qui ferait ça automatiquement ?
Vous l'aurez sans doute deviné, la réponse est oui et je l'ai fait. L'avantage, c'est que Radio Tray permet l'intégration de plugins en Python qui laisse l'utilisateur faire un peu ce qu'il veut. Quel type de plugin pourrais-je bien coder ? J'ai décidé d'en coder un qui stocke chaque titre de chanson dans un fichier (/tmp/radio). Ensuite, il me suffira de coder un programme qui récupère la dernière ligne de ce fichier quand j'en ai envie, je lui assigne un raccourci et le tour est joué.
Tout d'abord, jetons un oeil au fonctionnement des plugins déjà présents (dans /usr/share/radiotray/plugins). Oh, il y a une méthode "on_song_changed". Sans doute qu'elle s'exécute lors d'un changement de chanson (oui, j'ai un sens de la déduction hors du commun). On lui passe un argument appelé "data". Que contient-il ? Affichons-en un au hasard.
{'station': 'Covers', 'homepage': u'http://somafm.com/logos/512/covers512.png', 'title': u'Radiohead - Wish You Were Here'}
Oh, il y a une clé "title". Voilà qui me simplifie la vie ! Ainsi, lors de chaque changement de chanson, il me suffit de récupérer le champ 'title' et de le stocker dans mon fichier. Comme c'est simple, parfois, la programmation.
def on_song_changed(self, data):
if('title' in data.keys()):
title = data['title'] + "\n"
filename = "/tmp/radio"
FILE = open(filename, 'a')
FILE.write(title)
FILE.close()
print "song changed"
Voilà, maintenant, à chaque changement de chanson, ce plugin écrira le titre de la nouvelle chanson dans le fichier /tmp/radio. Il me reste à récupérer cette ligne lorsque la chanson me plait. Ca, je vais le coder en bash. Un petit fichier radio.sh qui donne ceci :
#!/bin/bash
tail --lines=1 /tmp/radio >> /home/migwel/radio
tail est une commande qui permet d'afficher la fin du fichier donné en argument. --lines=1 veut dire qu'on ne veut afficher qu'une ligne (la dernière). Les chevrons redirigent les données vers le fichier /home/miguel/radio. Pour plus de simplicité, j'ai assigné ce programme à un raccourci et voilà qui est terminé ! En espérant que de nombreuses bonnes chansons passeront à la radio, sinon, ce travail aura été inutile.
En espérant que ça puisse vous servir, un jour ou l'autre. Je ne prétends pas que c'est la meilleure méthode pour effectuer ce genre de travail mais elle fonctionne et elle est rapidement codée dans ça me plait.


J'en parlais dans un 

Vous l'avez sans doute remarqué, mon blog a quelque peu été déserté ces derniers temps. Au début, c'était normal, j'avais pas mal d'occupations (la rentrée, tout ça) mais après, j'ai pas d'excuses. J'avais plein d'idées d'articles à poster mais je sais pas pourquoi, j'avais la flemme de le faire.
Depuis la fameuse affaire de Chaldeen et du bac français, je me pose une question simple et complexe à la fois : comment j'aurais fait, moi, à la place de Chaldeen pour publier cette épreuve sur Internet ? Elle est simple dans son énonciation mais devient relativement complexe quand on se plonge dans sa résolution. En effet, être anonyme, 
