Музыка

15 февраля 2015

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

Интересно то, что подобный плейлист можно открыть плеером, который поддерживает потоковое воспроизведение и слушать музыку из вк в нём, а не в браузере. Я попробовал запустить плейлист в Spider Player, которым пользовался оффлайн, пока не переехал вк и Яндекс.Музыку, и всё заработало. То есть можно не открывать вкладку в браузере и пользоваться его интерфейсом, а по-человечески переключать треки, включать и выключать перемешивание нажатиями горячих клавиш.

Я часто открываю записи с музыкой из своей ленты новостей в новых вкладках, чтобы послушать что-то новое или переслушать знакомые треки. Этих вкладок у меня очень много. Кроме открытых в браузере (и раскиданных по жанрам и другим критериям в разные группы вкладок) у меня есть ещё текстовый файл с тысячью ссылок. По всем этим ссылкам открываются различные посты из вк с прикреплённой музыкой, где-то по одному треку, где-то по девять-десять, с подборками по жанрам, группам или ещё чему-нибудь. Некоторые посты были удалены, некоторые аудиозаписи были удалены, множество записей в разных постах совпадают, а я уже и сам не помню, какие группы и треки я слушал, а какие нет.

К сожалению, тот сайт не предназначен для создания плейлистов из прикреплений в постах. Поэтому я решил написать собственную утилиту. Я начал было писать iframe-приложение на javascript, но вк хотел открыть мой сайт по https-ссылке, а у меня нет SSL-сертификата, и потому приложение просто не загружалось. Я написал ещё несколько версий на javascript и php, использующих различные методы работы с VK API, но несмотря на то, что они работали, им приходили неправильные ссылки. Как заметили в комментарии на хабре, вк может отдавать ссылки на vk-cdn.net или на vk.me. Моим скриптам сервер возвращал ссылки на vk-cdn.net. Они выдавали 404, когда я их открывал, и не работали в плеере. Я пробовал менять настройки приложения, получать другие права и бессрочный токен, но это не помогало.

Честно говоря, я так и не понял, как же на том сайте такие же методы VK API, вызываемые через PHP, получают ссылки, которые нормально работают для нужного пользователя, но в конце-концов я просто попробовал написать Desktop-приложение, и оно получило необходимые ссылки.

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

Правда, он предпочитает отображать в качестве названия записи имя файла, а не прописанное в плейлисте название, поэтому при переключении на трек из вк отображается что-то такое:

Тем не менее, теперь можно использовать горячие клавиши в любимом плеере. А ещё можно анализировать сгенерированные плейлисты и удалять повторяющиеся треки или сортировать их по какому-либо принципу (например, все треки одной группы собирать вместе), вместо того, чтобы слушать небольшие подборки в одной из сотен вкладок.