Pull to refresh

Скробблим музыку из mpd, используя официальный клиент Last.FM

Reading time 2 min
Views 893
Lumber room
В состав большинства дистрибутивов Linux входит родной клиент last.fm, который умеет отлично скробблить музыку и показывать информацию о текущей композиции. Но авторы плееров его упорно игнорируют, каждый раз изобретая свой велосипед.

Единственное найденное решение было в виде патча для 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.

У меня оно уже крутится с месяц, основные баги устранены.



Tags:
Hubs:
Total votes 5: ↑4 and ↓1 +3
Comments 6
Comments Comments 6

Articles