Coding Overhead

Do the best with what you have

Google Play Music на Raspberry Pi

Не так давно сервис Google Play Music стал доступен в России. За 169 рублей в месяц можно получить полный доступ. Проблема в том, что Google предоставляет возможность слушать музыку только либо с мобильных устройств, либо через браузер.

Однако многим это не подходит, к примеру мне. Поэтому в данной статье рассмотрим возможные «неофициальные» способы прослушивания музыки из Google Play Music.

Итак, в наличии имеем Raspberry Pi с установленным сервером MPD. Хотим получить возможность проигрывать удалённо любую музыку из своей фонотеки в Google Play Music на этом Raspberry Pi.

Вариант с запуском vnc-сервера с запущенным браузером не рассматриваем. Пробовал запускать chromium и midori без X-сервера и оконного менеджера, всё равно это дело очень сильно тормозит. Веб-приложение music.google.com всё таки достаточно «тяжёлое».

Официальный API для Google Play Music отсутствует, но на github’е имеется Unofficial-Google-Music-API, написанный на Python. Автор этого API Simon Weber советует несколько проектов, использующих его API. Рассмотрим заинтересовавшие меня:

Помимо этих проектов можно также найти:

Стоит отметить, что все проекты написаны на Python. Ниже опишу свой опыт работы с каждым из них.

thunner

Curses-клиент. Запускает музыку через mplayer. Звучит здорово, однако не работает. Для начала пришлось переключиться на ветку, в которую внесены изменения для работы с последней версией API, версия из master неработоспособна. Но музыка всё равно играет лишь секунду, затем переключается на следующую песню. Собственно можем наблюдать следующую нерешённую проблему All-Access Songs Not Playing, значит это не только у меня.

image

GMusicFS

FUSE файловая система. При монтировании получаем иерархию директорий своей фонотеки из Google Play Music в формате

artists/<name of artist>/<albums>/<tracks>

плюс загружается cover.jpg. Что же, возможность иметь всю фонотеку в формате mp3 в директории – это просто отлично, но есть ряд печальных ограничений.

Как пишет автор, данное решение подходит только для копирования файлов себе на компьютер либо для воспроизведения простым проигрывателем, таким как mplayer. При попытке воспроизведения в более продвинутых проигрывателях могут возникать проблемы. И действительно, при попытке открыть коллекцию даже в простом mocp он начинает сильно подвисать, музыку слушать невозможно. При попытке указать директорию в качестве библиотеки для MPD получаем возможность слушать музыку, однако тэги у меня не загружались, а слушать песни с одинаковым названием “Unknown” конечно не вариант. Ещё автор отмечает отсутствие возможности воспроизвести песню с определённой позиции.

Установить GMusicFS можно при помощи pip, предварительно установив зависимости:

$ pip install https://github.com/terencehonles/fusepy/tarball/master
$ pip install https://github.com/simon-weber/Unofficial-Google-Music-API/tarball/develop
$ pip install https://github.com/EnigmaCurry/GMusicFS/tarball/master

Затем необходимо создать конфигурационный файл ~/.gmusicfs со следующим содержимым:

[credentials]
username = [email protected]
password = your_password

И можно монтировать:

$ mkdir -p $HOME/google_music
$ gmusicfs $HOME/google_music

Для размонтирования:

$ fusermount -u $HOME/google_music

При копировании музыки себе на компьютер все тэги корректно загружаются. Воспроизведение с помощью mplayer также работает отлично. После обновления фонотеки необходимо перемонтировать файловую систему.

GMusicProxy

В описании проекта говорится следующее: «Let’s stream Google Play Music using any media-player». Этот скрипт позволяет получать m3u-плейлисты либо mp3-файлы путём отправки специально сформированных GET-запросов.

Установить можно следующей командой:

$ pip install https://github.com/diraimondo/gmusicproxy/tarball/master

Для работы необходим device-id одного из зарегистрированных устройств. Получить список этих устройств можно следующим образом:

$ GMusicProxy --email <адрес> --password <пароль> --list-devices

Создаём конфиг ~/.config/gmusicproxy.cfg:

email = [email protected]
password = my-secret-password
device-id = your_device_id

Запускаем:

$ GMusicProxy
Примеры использования с помощью консольного клиента mpc curl -s 'http://localhost:9999/get_by_search?type=album&artist=Queen&title=Greatest%20Hits' > /var/lib/mpd/playlists/queen.m3u mpc load queen mpc play mpc clear curl -s 'http://localhost:9999/get_new_station_by_search?type=artist&artist=Queen&num_tracks=100' | grep -v ^# | while read url; do mpc add "$url"; done mpc play
Примеры использования с помощью VLC vlc 'http://localhost:9999/get_by_search?type=album&artist=Rolling%20Stones&title=tattoo&exact=no' curl -s 'http://localhost:9999/get_all_stations?format=text&only_url=yes' | sort -R | head -n1 | vlc -

Поддерживаются самые различные запросы: получение песен, радиостанций, плейлистов, …

Из минусов стоит отметить, что все эти запросы необходимо составлять самому, а также, что тэги загружаются только при воспроизведении конкретной песни.

play-pi

Web-фронтенд на Django для доступа к фонотеке с интеграцией в MPD. Скажу лишь, что у меня возникла такая же проблема, как и с thunner’ом – воспроизводится лишь секунда.

Mopidy

Mopidy представляет из себя музыкальный сервер, который умеет «притворяться» MPD. Но самое интересное – для него есть расширение Mopidy-GMusic.

Установить Mopidy можно с помощью пакетного менеджера, а расширение следующей командой:

$ pip install mopidy-gmusic

Для работы понадобится опять же device-id, который можно получить либо набрав *#*#8255#*#*, либо установив приложение.

В конфиг Mopidy необходимо дописать:

[gmusic]
username = alice
password = secret
deviceid = your_device_id

После дальнейшего конфигурирования (документация здесь) получим MPD-совместимый сервер с музыкой из Google Play Music, а также с локальной коллекцией. Из MPD-клиентов без проблем заработали GMPC, Ario и pympd. Мой любимый Cantata к сожалению не подключается.


Выводы

Для копирования музыки из Google Play Music в формате mp3 отлично подойдёт GMusicFS. Для воспроизведения можно использовать Mopidy с плагином.

Я остановился на том, что запускаю одновременно MPD и Mopidy на разных портах и подключаюсь разными клиентами (Cantata и GMPC). MPD для локальной коллекции, Mopidy для Google Play Music.

Не стоит забывать, что при использовании двухфакторной аутентификации необходимо создавать пароли приложений в настройках аккаунта Google.