В состав большинства дистрибутивов Linux входит родной клиент last.fm, который умеет отлично скробблить музыку и показывать информацию о текущей композиции. Но авторы плееров его упорно игнорируют, каждый раз изобретая свой велосипед.
Единственное найденное решение было в виде патча для Rhythmbox. Я тогда как раз искал плеер под GNOME и это в итоге повлияло на выбор плеера.
Но вермя идет и недавно я решил переехать на mpd и проблема возникла опять. Конечно для mpd тоже есть плагины для скробблинга, но чего мне всегда не хватает в этих реализациях: кнопки Love Track, чтобы можно было отмечать любимые композиции. Да и согласно идеологии Linux, объединять программы в цепочки — это ведь очень правильно.
На сайте Last.FM протокол между плеером и клиентом нигде не описан, так что пришлось подглядеть в исходники того самого патча для Rhythmbox и воспользоваться Google Code Search.
И все получилось.
Протокол обмена между плеером и клиентом очень простой. Клиент ожидает от плеера строчку вида
КОМАНДА параметр=значение&параметр=значение&...
Символы & экранируются собой же: &&. После получения команды клиент закрывает соединение и ждет нового соединения и новой команды.
Команды обнаружились следующие:
START с параметрами
Эта команда сообщает клиенту о том, что мы начинаем проигрывать новый трек. После получения этой команды клиент начинает отсчет времени сам. Сообщать ему о нашем продвижении не требуется.
PAUSE, RESUME, STOP — все с единственным параметром c (см. выше)
Их назначение очевидно и они соответствуют командам в самом плеере.
Дальнейшее не представляет никаких сложностей: регулярно опрашиваем mpd (Для связи с mpd используется стандартный (из репозитария) python-mpd.), и, если его состояние изменилось, то отсылаем соответствующую команду Last.FM клиенту. Еще в коде реализован лог, автозапуск клиента и реконнект к mpd, если вдруг он отвалится. Всё никак не доходят руки прикрутить нормальную демонизацию.
Настройки кушаются из /etc/mpdlastfm.conf или ~/.mpdlastfm.conf в таком формате:
Дефолтные значения (см. в коде) можно и не указывать
Код комментирован, так что здесь его приводить не буду, а ознакомится с ним можно на paste.bin.
У меня оно уже крутится с месяц, основные баги устранены.


Единственное найденное решение было в виде патча для Rhythmbox. Я тогда как раз искал плеер под GNOME и это в итоге повлияло на выбор плеера.
Но вермя идет и недавно я решил переехать на mpd и проблема возникла опять. Конечно для mpd тоже есть плагины для скробблинга, но чего мне всегда не хватает в этих реализациях: кнопки Love Track, чтобы можно было отмечать любимые композиции. Да и согласно идеологии Linux, объединять программы в цепочки — это ведь очень правильно.
На сайте Last.FM протокол между плеером и клиентом нигде не описан, так что пришлось подглядеть в исходники того самого патча для Rhythmbox и воспользоваться Google Code Search.
И все получилось.
Протокол
Протокол обмена между плеером и клиентом очень простой. Клиент ожидает от плеера строчку вида
КОМАНДА параметр=значение&параметр=значение&...
Символы & экранируются собой же: &&. После получения команды клиент закрывает соединение и ждет нового соединения и новой команды.
Команды обнаружились следующие:
START с параметрами
- c — id клиента
- a — исполнитель
- t — заголовок
- b = альбом
- m — MusicBrains ID
- l — продолжительность
- p — путь до файла
Эта команда сообщает клиенту о том, что мы начинаем проигрывать новый трек. После получения этой команды клиент начинает отсчет времени сам. Сообщать ему о нашем продвижении не требуется.
PAUSE, RESUME, STOP — все с единственным параметром c (см. выше)
Их назначение очевидно и они соответствуют командам в самом плеере.
Реализация
Дальнейшее не представляет никаких сложностей: регулярно опрашиваем mpd (Для связи с mpd используется стандартный (из репозитария) python-mpd.), и, если его состояние изменилось, то отсылаем соответствующую команду Last.FM клиенту. Еще в коде реализован лог, автозапуск клиента и реконнект к mpd, если вдруг он отвалится. Всё никак не доходят руки прикрутить нормальную демонизацию.
Настройки кушаются из /etc/mpdlastfm.conf или ~/.mpdlastfm.conf в таком формате:
mpd_host = localhost # хост, где запущен mpd
mpd_port = 6600 # порт
mpd_root = /media/sys-work/music #корень папки с музыкой. Нужно для определения полного пути
log_file = /tmp/mpdlfm.log #дублировать лог на диск
mpd_pass = secrepass #пароль
Дефолтные значения (см. в коде) можно и не указывать
Код комментирован, так что здесь его приводить не буду, а ознакомится с ним можно на paste.bin.
У меня оно уже крутится с месяц, основные баги устранены.

