Journal scrobblerserver

Posté par (page perso) . Licence CC by-sa
17
1
mai
2013
Ce journal a été promu en dépêche : ScrobblerServer, un serveur de « scrobbles ».

Un serveur de Scrobbles

J'ai commencé il y a quelque temps l'écriture d'un petit serveur [scserver] me permettant d'enregistrer mes habitudes d'écoute de la musique. Dans le jargon de last.fm on appelle cela un serveur de scrobble (cf. audioscrobbler pour plus d'information), un scrobble étant simplement l'unité atomique d'information enregistrée par le serveur, à savoir un titre (nom, artiste, album, etc…) associé une date et un auditeur.

Historique

Avant que je débute ce serveur le projet gnu.fm [gnufm] (l'applicatif derrière libre.fm [librefm]) est apparu, se voulant une alternative libre à last.fm, cependant, outre le fait que le projet semble au point mort, les différents choix techniques initiaux et l'évolution du projet ne convenaient pas vraiment à mon besoin ou à ce que j'attendais d'une alternative FLOSS à last.fm.
Libre.fm s'est clairement positionné comme alternative à last.fm; entres autres, même API et la possibilité d'écouter et de découvrir de la musique. Le frontal web Nixtape et le serveur GNUkebox qui forment la solution gnu.fm n'étaient pas vraiment dissociables (la dernière fois que je me suis documenté sur le sujet). Le choix de PHP comme langage était justifié pour faciliter le déploiement de la solution.

ScrobblerServer

Mon besoin dans un premier temps était bien plus simple, je voulais pouvoir enregistrer un historique de mes écoutes de musique et produire des statistiques à partir de cette base. La partie "réseautage social" de last.fm/libre.fm n'est pas un objectif prioritaire, je voulais cependant une solution multi-utilisateur. Au delà des polémiques quant à php, je n'ai pas d'expertise dans ce langage et pas l'envie d'en développer une, je préférais partir sur une solution python, langage que je maîtrise mieux, grâce à un autre projet lié à last.fm lui aussi ‑ un client utilitaire pour MPD [mpdsima].

J'ai donc débuté l'écriture de ScrobblerServer [scserver] avec Django 1.4. Il s'agissait dans un premier temps de faire une preuve de concept simple et de me familiariser avec le web et l'écriture d'une API.

Les spécifications sont les suivantes :

  • Un interface REST avec le serveur
  • Authentification HTTP de base, pas de compatibilité avec l'API last.fm
  • Multi-utilisateur et indépendance vis à vis du lecteur utilisé
  • Servir les statistiques rudimentaires, c'.à.d. artistes|titres les plus joués sur une période de temps définie

En l'état le serveur expose une API complète [scapi] permettant de soumettre ses scrobbles, récupérer son historique d'écoutes et quelques statistiques. Le choix de l'authentification HTTP simple impose bien évidement le déploiement du serveur sur une connexion chiffrée SSL pour éviter de voir vos identifiants circuler en clair (non critique sur un lan domestique cependant).

L'interface web (navigable) est rudimentaire et non stylée, elle permet simplement de contrôler que le serveur fonctionne, de consulter ses derniers scrobbles ou de changer de mot de passe. La création des utilisateurs se fait via l'interface d'administration de django par l'administrateur de l'application.

Ce projet est artisanal, n'étant pas développeur et connaissant assez peu le web (ie. soyez indulgents avec le code), vous ne trouverez pas là un joyau de technologie web x.y, mais un simple petit serveur permettant de jouer avec ses habitudes d'écoute. Je n'ai pas de feuille de route précise sur ce projet, je voulais cependant le confronter à la communauté. Dans un premier temps pour avoir des retours mais aussi pour partager l'application avec d'autres personnes qui comme moi auraient en vain cherchées un serveur du genre sans trouver de projet à leur goût.

Puisse scrobblerserver être utile à d'autres.

Les possibles futurs:

  • utiliser Tastypie pour construire l'API (et potentiellement supporté l'API last.fm afin d'hériter simplement des clients existants).
  • faire des affichages des statistique du type streamgraph
  • écrire de simple client web html/javascript pour l'affichage des statistiques
  • pas de futur est aussi une possibilité…

Liens

  • # Gestion des éléments dupliqués

    Posté par (page perso) . Évalué à  5 .

    J'ai écrit un petit script en Python qui va récupérer mon historique sur Libre.fm et les enregistre dans un fichier Sqlite afin de pouvoir faire quelques stats: https://github.com/Fabiensk/LfmPy

    Le problème le plus embêtant (que je n'ai pas vraiment résolu) est d'arriver à voir comme une chanson unique plusieurs entrées. Par exemple:
    - si une chanson était taggée sans album, puis l'album a été ensuite rajouté
    - si une chanson est à la fois présente dans un album et une compilation
    - si un artiste a plusieurs noms, comme «Kenji Kawai», «Kawai Kenji» et «川井憲次», ou «Prince» et «Love symbol»
    Ça a tendance a fausser les stats.

    Par chance, dans ma collection je n'ai pas d'artistes homonymes!

    • [^] # Re: Gestion des éléments dupliqués

      Posté par (page perso) . Évalué à  2 .

      En effet, c'est un problème. Il y a aussi les artistes différents qui ont le même nom "John Williams" par exemple.
      C'est pour cette raison que je privilégie l'utilisation des id MusicBrainz.

      Dans tous les cas, si on veut commencer à jouer avec ça médiathèque (par ex. MPD_sima ou d'autres gestionnaires de playlist dynamique), la base est d'avoir son contenu taggué le plus précisément possible. En ce qui concerne la musique je n'ai encore rien trouvé de mieux que la base de donnée de MusicBrainz pour renseigner les tags de ma musique.

      https://musicbrainz.org/

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.