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 — когда трек начинается
  • single listen — когда трек доиграл (минимум 30 секунд)

Регистрация

  1. Создать аккаунт на MusicBrainz
  2. Зайти на listenbrainz.org/login — авторизация через MusicBrainz
  3. В 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.


Связанные статьи

  • Маргинал — радио, которое скробблится
  • Beets — авто-тегирование треков через MusicBrainz
  • ИИбан-DJ — ИИ-диджей для радио