VLC (2.2.1 в этом примере) имеет HTTP-интерфейс, где вы можете запросить текущую воспроизводимую дорожку Вы можете включить его из командной строки:
vlc --extraintf=http --http-host 0.0.0.0:8080 --http-password 'watpasswd'
или через графический интерфейс (эти настройки сохраняются при перезагрузке):
- Инструменты> Настройки, Показать настройки: Все
- Интерфейс> Основные интерфейсы, проверьте "Веб"
- Интерфейс> Основные интерфейсы> Lua> Lua HTTP> Пароль
Вы можете зайти на http://localhost:8080/requests/status.xml
в браузере, ввести пароль, и вы получите XML, содержащий раздел, подобный этому:
<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>
Осталось только настроить задание cron на периодическое сохранение воспроизводимой дорожки.
#!/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