Abstract
ListenBrainz — свободная альтернатива Last.fm. Собирает историю прослушиваний (скробблы), отдаёт статистику, рекомендации. В отличие от Last.fm — полностью открытая, база метаданных общедоступна.
Зачем
Радио крутит 671 трек 24/7. Без скробблинга — никаких метрик. Со скробблингом:
- История эфира — что играло, когда, сколько раз
- Статистика — топ артистов, треков, жанров за неделю/месяц/год
- Рекомендации — ListenBrainz рекомендует похожее на то что играет
- Публичная история — слушатели могут видеть что прозвучало
Интеграция с Маргинал
Маргинал имеет нативную поддержку ListenBrainz — внешний скробблер не нужен. Настраивается через Admin API:
docker exec sub-wave-controller curl -s -X POST \
-u admin:<password> \
-H "Content-Type: application/json" \
-d '{"scrobble":{"listenbrainz":{"enabled":true,"userToken":"<token>","username":"","baseUrl":""}}}' \
http://localhost:7701/settingsПосле этого Маргинал сам отправляет:
playing_now— когда трек начинаетсяsinglelisten — когда трек доиграл (минимум 30 секунд)
Регистрация
- Создать аккаунт на MusicBrainz
- Зайти на listenbrainz.org/login — авторизация через MusicBrainz
- В Settings получить API token
Архитектура
Маргинал (Icecast метаданные: artist + title)
↓
Controller (встроенный скробблер)
↓
ListenBrainz API (api.listenbrainz.org/1/submit-listens)
↓
Профиль: listenbrainz.org/user/<username>
Внешний скробблер (альтернатива)
Если Маргинал не поддерживает ListenBrainz нативно, можно использовать внешний скрипт. Icecast отдаёт now-playing через status-json.xsl:
{
"artist": "ssshhhiiittt!",
"title": "Восемь",
"listenurl": "http://localhost:7702/stream.mp3"
}Скрипт опрашивает Icecast каждые 10 секунд и отправляет playing_now + single listen в ListenBrainz API.
Icecast порт не проброшен
Порт 7702 доступен только внутри Docker-контейнера
sub-wave-broadcast. Скрипт используетdocker execдля доступа к status-json.xsl.