O VLC (2.2.1 neste exemplo) tem uma interface HTTP onde você pode consultar a faixa atualmente sendo reproduzida. Você pode ativá-lo na linha de comando :
vlc --extraintf=http --http-host 0.0.0.0:8080 --http-password 'watpasswd'
ou através da GUI (essas configurações persistem por meio de reinicializações):
- Ferramentas > Preferências, Mostrar configurações: todas
- Interface > Interfaces principais, verifique "Web"
- Interface > Interfaces principais > Lua > Lua HTTP > Senha
Você pode visitar http://localhost:8080/requests/status.xml
em um navegador, digitar a senha e receber um XML contendo uma seção como esta:
<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>
Tudo o que resta é configurar um cron job para salvar periodicamente a faixa de reprodução.
#!/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