четверг, 20 ноября 2014 г.

Google play music & vk.

     Эта заметка будет интересна в первую очередь владельцам платной подписки Google Play Music, у меня такая подписка есть. Тысячи треков доступны бесплатно только в браузере на дексктопе или на андроид устройстве, но что делать если хочется послушать музыку на простеньком mp3 плеере? Сначала я думал купить плеер на андроид, посмотрев цены на яндекс маркете, сразу откинул эту мысль, тем более проще купить дешевый смартфон, т.к. ничего кроме музыки мне на нем не надо. Вот казалось бы и выход - дешевый смартфон, но хочется же хардварные кнопки, а не сенсорное управление. Выход нашелся.

     Сначала смотрим, есть ли у Google Music официальный API, как оказалось его нет, но есть неофициальный. Также есть несколько проектов, использующие его. Мне больше понравился GMusicProxy. Так как скачать треки не получится даже при помощи неофициального API, план будет следующий. Получаем названия треков и ищем где их скачать. Названия мы получим при помощи GMusicProxy.
Установка сводится к паре команд:

# aptitude install python-pip
# pip install https://github.com/diraimondo/gmusicproxy/tarball/master

Перед первым запуском нужно узнать id одного из android устройств. Для этого запускаем:

$ GMusicProxy --email user@gmail.com --password SUpeRpa$$ -L

Выбираем наиболее понравившийся id и подставляем в следующую команду:

$ GMusicProxy --email user@gmail.com --password SUpeRpa$$ --device-id c11d222d333f444 --daemon

Почту, пароль и id можно указать в конфигурационном файле, чтобы не вводить каждый раз. Список всех опций можно посмотреть на сайте проекта или введя в терминале:

$ GMusicProxy --help

Допустим у вас есть плейлист который вы хотели бы скачать. Получаем список всех плейлистов:

$ curl -s 'http://localhost:9999/get_all_playlists'

У меня такой вывод:


#EXTM3U
#EXTINF:-1,Retro
http://192.168.0.62:9999/get_playlist?id=b697933f-8d3f-qwer-qwer-bddf785dcd67

#EXTINF:-1, 11.09.2014
http://192.168.0.62:9999/get_playlist?id=e672b381-qwer-4286-qwer-2ee60fd2b0a2
#EXTINF:-1,Roy Buchanan
http://192.168.0.62:9999/get_playlist?id=5947d71d-3c83-qwre-qwer-dd4f59ca4d92
#EXTINF:-1,Спид-метал/трэш-метал
http://192.168.0.62:9999/get_playlist?id=2d941d8f-qwer-4186-qwer-ce305da0813e

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

$ curl -s 'http://192.168.0.62:9999/get_playlist?id=b437231f-qwer-1146-99b3-bddf785dcd67' | head

#EXTM3U
#EXTINF:144,Perry Como - Hot Diggity
http://192.168.0.62:9999/get_song?id=T3xqqwerbtoqobj3ftiwp6bnxl4
#EXTINF:177,Claude King - Wolverton Mountain
http://192.168.0.62:9999/get_song?id=Thmufuqwertyidmfvz2jq2i2fje
#EXTINF:177,Claude King - Wolverton Mountain
http://192.168.0.62:9999/get_song?id=Thmufuauy5qwermfvz2jq2i2fje
#EXTINF:111,Roger Miller - England Swings (Single Version)
http://192.168.0.62:9999/get_song?id=Tsijbqwerr2eomwq2yhvlw4p65q
#EXTINF:144,Ferlin Husky - Gone

То есть подставляем адрес плейлиста полученный из предыдущей команды. Осталось убрать мусор и оставить только названия треков и исполнителей.

$ curl -s 'http://192.168.0.62:9999/get_playlist?id=b437231f-qwer-1146-99b3-bddf785dcd67'  | egrep ^#.*  | sed 's/^#EXTINF:[0-9]*,//g' | sed '/^#.*/d' | head
Perry Como - Hot Diggity
Claude King - Wolverton Mountain
Claude King - Wolverton Mountain
Roger Miller - England Swings (Single Version)
Ferlin Husky - Gone
Vaughn Monroe - Riders In The Sky
Tennessee Ernie Ford - Sixteen Tons
Don Gibson - Oh, Lonesome Me
Lefty Frizzell - Saginaw, Michigan

Red Foley - Chattanoogie Shoe Shine Boy

Вот и все. Теперь думаем откуда их скачать. В vk пока у нас самый большой архив с музыкой. Опять после непродолжительного гуглинга находим этот скрипт. Он работает без авторизации и не запрашивает ваш логин и пароль. Сохраняем его:

$git clone https://github.com/snoopcatt/vksearch.git ~/.src/vksearch/

Чтобы каждый раз не писать ~/./.src/vksearch/vksearch для запуска, добавим алиас:

$ alias vksearch="/home/stas/.src/vksearch/vksearch"
$ echo 'alias vksearch="/home/stas/.src/vksearch/vksearch"' >> ~/.bashrc

Список опций можно посмотреть запуском без параметров:

$ vksearch

Для его работы нужно получить токен перейдя по этой ссылке, нажимаем "разрешить" и наc переводят на страницу в адресе которой указан токен. Копируем его в текст самого скрипта напротив vkapi_token=.

Теперь собираем все вместе в отдельном таком скриптике:

#!/bin/bash
curl -s "$1" | egrep ^#.* | sed 's/^#EXTINF:[0-9]*,//g' | sed '/^#.*/d' > /tmp/playlist
while read line
do
vksearch --count=1 --get-one --save-to=/home/stas/Музыка/ --search "$line"
done < /tmp/playlist

Скрипт (назовем его gmusic-vk.sh) сохраняет список треков и исполнителей в /tmp/playlist, построчно читает его и передает vksearch. Адрес плейлиста надо передать в первом параметре. Запускаем и ждем:

$ ./gmusic-vk.sh "http://192.168.0.62:9999/get_playlist?id=b437231f-qwer-1146-99b3-bddf785dcd67"

По моему плейлисту американской ретро музыки скачалось 92 трека из 196, результат не очень хороший, но с современной музыкой он должен существенно улучшиться.


Чтобы поддержать автора, кликните на рекламу.