VLC (2.2.1 dans cet exemple) possède une interface HTTP qui permet d'interroger la piste en cours de lecture. Vous pouvez l'activer à partir de la ligne de commande :
vlc --extraintf=http --http-host 0.0.0.0:8080 --http-password 'watpasswd'
ou via l'interface graphique (ces paramètres persistent lors des redémarrages) :
- Outils > Préférences, Afficher les paramètres : Tout
- Interface > Interfaces principales, cochez "Web".
- Interface > Interfaces principales > Lua > Lua HTTP > Mot de passe
Vous pouvez visiter http://localhost:8080/requests/status.xml
dans un navigateur, saisissez le mot de passe, et vous devriez recevoir un XML contenant une section comme celle-ci :
<category name="meta">
<info name="title">Jazz</info>
<info name="filename">http://example.com/station</info>
<info name="genre">smooth</info>
<info name="now_playing">Jimmy Sommers - Fly Me To The Moon</info>
</category>
Il ne reste plus qu'à configurer une tâche cron pour sauvegarder périodiquement la piste en cours de lecture.
#!/bin/bash
vlc_status="$(curl --connect-timeout 15 --silent -u :watpasswd http://localhost:8080/requests/status.xml)"
# Parse out now-playing track, escape named entities e.g. '&'
track=$(echo "${vlc_status}" | xmlstarlet sel -t -v ".//info[@name='now_playing']" | xmlstarlet unesc)
# Append new track to log file
echo "$track" >> vlc_log.txt
# Remove duplicates of new track if any
# http://stackoverflow.com/a/1444448/
gawk -i inplace '!x[$0]++' vlc_log.txt