Яндекс музыка API

С конца июня 2013 записи из ВКонтакте можно было превратить в плейлист аналогичного содержания внутри Яндекс.Музыки. Перенести коллекцию. По данным Яндекса импортом из Вконтакте пользователи Яндекс.Музыки воспользовались 548 тысяч раз. Синхронизация плейлистов ВКонтакте с Яндекс.Музыкой отключена.

Яндекс объяснил причину:

Вконтакте попросила прекратить использовать API.

На порядки меньшая аудитория, лишь 100 человек к 5 февраля 2015 года, успели установить себе ВК-приложение Яндекс.Музыки. Новое на тот момент приложение давало рекомендации и позволяло искать по базе Яндекс.Музыки. Прямой функции воспроизведения музыки в нём не было. Это статистически невидимое приложение тоже отключено.

Яндекс повторился:

Связано с настоятельной просьбой Вконтакте.

В соцсети подтвердили разрыв соединения с Яндекс.Музыкой:

Да, отключили. По своим внутренним соображениям,

— рассказал пресс-секретарь ВК Георгий Лобушкин. Отключение произошло около 2 месяцев назад. Приблизительно в те же сроки, в феврале 2015, ВКонтакте убрал музыку из собственного iOS-приложения. Речь шла о прослушивании записей с серверов ВК.

Коррекция софта ВКонтакте под платформу Apple традиционно происходит 11 февраля. Так в феврале прошлого, 2014 года, AppStore впервые стёр само приложение ВК, а 11 февраля 2015 года пропала встроенная в ВК-приложение музыка. Параллельно, как выяснилось сейчас, пропало API подключение Яндекса к ВК.

Спустя 10 дней, 21 февраля 2015 года, Яндекс.Музыка завела себе страничку в Facebook. Яндекс собирает пользовательские Facebook «лайки» с момента обновления сервиса в сентябре 2014. «Лайки» помогают стрмингу строить индивидуальные рекомендаций, но никаких приложений для конечного слушателя на Facebook-платформе Яндекс не делал. Маркетинговой Facebook-активности Яндекс долгие годы не вёл и начал её только в 2015 году.

Музыкальные новости и ссылки на записи Яндекса публиковались (и продолжают публиковаться, как ссылки) в главной для России соцсети ВКонтакте. Свежие обновления каталога, свежие технические функции — естественно воспринимались именно в контексте ВК. Вся российская аудитория Facebook сопоставима с аудиторией лишь самой Яндекс.Музыки (10 млн в месяц всего, 1 млн слушателей на мобильных), а аудитория ВКонтакте — в разы больше и аудитории музыкального сервиса, и охвата Facebook.

Одна из городских легенд о ВК гласит, что прошлый глава ВКонтакте Павел Дуров проводил переговоры с музыкальными стримингами с доминирующей позиции. Если на западе стриминг Spotify договаривался о подключении, прежде всего, к Facebook — в России разговаривать надо с ВКонтакте.

Когда Дэниэл Эк из музыкального сервиса Spotify, легально проигрывавшего песни и бравшего с пользователя абонентскую плату, приехал к Дурову договариваться о сотрудничестве, то получил от ворот поворот. «У нас в разы больше песен, чем у вас, нам невыгодно», — отрезал Дуров. Эк понял, что крыть нечем, распрощался и шагнул в позолоченный лифт.

Анекдот о том, что понял Дэниэл Эк, опубликован в книге Николая Кононова «Код Дурова» в конце 2012 года.

В 2010—2012 годах в базе Spotify было 10−15 миллионов треков. В мае 2009 — 3,5 миллиона. 7 октября 2008, на старте проекта, основатели говорили просто «миллионы». Когда именно Эк катался на лифте неизвестно. Теоретически разница в «разы» когда-то существовать могла, хотя в прошлом даже ВК был меньше сегодняшнего.

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

Официальных данных о числе треков в ВК не публикуется. Прямое сравнение ВК и стримингов невозможно. Однако косвенно сопоставить ВК и другие источники труда не составляет. На рынке скачиваемых mp3 файлов продаётся около 34−35 миллионов треков. Если предположить, что все они попали во ВКонтакте (а это не так, массы музыки в ВК нет) — сегодня уже нет превосходства ВКонтакте над стримингами «в разы». Максимум в полтора раза.

Иными словами базы стримингов и ВКонтакте сопоставимы — значит, при наличии инструментов, возможна лёгкая миграция пользователей с одного музыкального сервиса на альтернативный.

P. S. Сокращение музыкального функционала и отключение API для третьей стороны — это тренд 2015 года сразу для двух компаний, так или иначе, связанных с Юрием Мильнером и Алишером Усмановым. Пара предпринимателей, через фонды семейства DST выступают инвесторами вышеупомянутого Spotify. Холдинговая для ВКонтакте компания Mail.ru Group основана при участии всё тех же Мильнера—Усманова.

В феврале ВКонтакте отключил API Яндекс.Музыке и музыку в мобильных клиентах. Позавчера соцсеть выключила загрузку mp3-музыки в «Документы». Spotify пошёл намного дальше.

В мартовском обновлении Spotify пропали десятки функций. Начиная с того, что Ctrl+F больше не взывает поиск, кончая (но не ограничиваясь) отключением, Spotify-приложений. Среди последних были службы рекомендации, забавный софт лейблов, встроенные в Spotify-клиент музыкальные журналы. Пропал встроенный мессенджер, работа с локальными файлами…

Вкратце стратегию 2015 можно описать формулой «слушай что дали, никуда не подключайся и ничего не делай». Слушателю остаётся мечтать только о том, чтобы опыт Spotify не повторял никто, особенно главные игроки Рунета.

Обнаружил сегодня в Windows 10 одну интересную функцию. Точнее в браузере Microsoft Edge. Называется она «Передать мультимедиа на устройство». Сам сначала не понял, что за пункт такой в настройках. Нажал на него, и браузер начал искать какое-то устройство, чтобы вывести на него изображение. Я включил телевизор, Edge его сразу увидел, и на телевизоре появилась картинка с сайта. Затем я зашел на YouTube, и без проблем вывел с ноутбука видео на телевизор по Wi-Fi сети. Сейчас расскажу об этой функции более подробно.

Обновление от 21.07.2017: как оказалось, после установки обновления Windows 10 версии 1703 (сборка 15063.13) браузер Microsoft Edge перестал выводить мультимедиа контент через DLNA. Теперь только Miracast/WiDi.

Есть комментарий от поддержки Microsoft. Как оказалось, проблему эту не решить, функция отсутствует в обновлении. Возможно, в следующих обновлениях все исправят. Подробнее об этом читайте здесь: https://help-wifi.com/voprosy-otvety/brauzer-edge-vmesto-dlna-ishhet-miracast-ne-naxodit-televizor/

Недавно я писал статью, в которой рассказывал о настройке DLNA в Windows 10. Там мы выводили на телевизор видео, фото и музыку, которая хранится на компьютере. А встроенная функция в браузере Edge позволяет выводить мультимедиа контент прямо с сайтов. Например, отлично выводится видео с YouTube, музыка с Яндекс.Музика. Не проверял, но есть информация что можно транслировать фото с Facebook и фильмы с ivi. Возможно, есть поддержка и других сайтов.

Все работает по технологии DLNA, или Miracast. Если ваш телевизор поддерживает одну из этих технологий, то можно без проблем передать видео с браузера Microsoft Edge на большой экран телевизора. Или музыку с фото.

Главное, чтобы компьютер (с которого вы хотите транслировать), и телевизор были подключены к одной Wi-Fi сети. Точнее, к одному роутеру. Так как подключение может быть не только по Wi-Fi, но и по сетевому кабелю.

Как передать мультимедиа на устройство из браузера Edge

Все очень просто. Открываем браузер Edge, переходим например на YouTube и запускаем какое-то видео. Затем открываем меню и выбираем «Передать мультимедиа на устройство».

Появится окно с поиском устройств, где должен появится ваш телевизор (или другое устройство с поддержкой DLNA, которое есть в вашей локальной сети). У меня телевизор Philips. Выбираем его.

Начнется подключение, и видео будет воспроизводится на телевизоре. В браузере будет черное окно.

Управлять воспроизведением можно как с браузера, так и с телевизора. Жаль, что в самом браузере нет никакой информации по подключению и воспроизведению. Если перейти на другое видео, то оно автоматически начнет воспроизводится на телевизоре.

Трансляция музыки

Я проверял на сервисе Яндекс.Музика. Заходим на сайт, запускаем какую-то песню, и передаем мультимедиа на устройство.

Музыка будет играть с динамиков телевизора.

Неизвестная ошибка

При попытке включить эту функцию на других сайтах, чаще всего появлялась ошибка: «Возникла неизвестная ошибка».

Если, например, запустить данную функцию на этом сайте, то на телевизоре появится произвольная картинка.

Чтобы все хорошо работало и выводилось, браузер Microsoft Edge должен «дружить» с конкретным сайтом. Понятно, что это будут только большие и известные сервисы типа YouTube. Но на YouTube все хорошо работает, можно без проблем смотреть видео на телевизоре, если там нет встроенного приложения YouTube, или оно не работает.

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

Итак, в июле жизнь в стране наконец стала меняться к лучшему, ведь произошло то, чего многие жители с нетерпением ждали: Spotify запущен в России и ряде других стран.

Но потоковая музыка появилась не вчера и наверняка есть такие, кто подсел на иглу Яндекса и пользуется подпиской на Яндекс.Музыку, которая впоследствии стала Яндекс.Плюсом.

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

Eсли хочется попробовать, но вам тоже лень, то я расскажу как перенести пожитки быстро, бесплатно. Нужно всего лишь немного питонов с батарейками.

Внимание! Некоторым может быть не очевидно, почему такая задача могла возникнуть.

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

У Spotify есть свои плюсы и минусы, как и у других сервисов. Есть функционал, которого нигде нет. Нет функций, которые есть где-то ещё.

Необходимость тех или иных фич — это вопрос субъективый, как субъективны музыкальные вкусы. Кому-то больше подходит библиотека в Яндекс.Музыке, кому-то в Spotify. Некоторые любят хранить библиотеку во флаке, кто-то любит винил, но некоторым подходит 144 кбит/с в Ogg Vorbis.
Алгоритмы подбора тоже могут в одном случае работать, а другие не работать лично для вас.

Поэтому вопрос о нужно/не нужно к тематике статьи имеет опосредованное отношение.

С помощью нехитрых приспособлений за пару дней у меня получилось сделать импортёр треков в Spotify и не потратить денег на soundiiz, на который почему-то внезапно возросла нагрузка.

Но есть нюансы.

API

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

В свою очередь у Яндекс.Музыки публичного API нет, но возможно конкуренция подстегнёт их предоставить доступ для сторонних разработчиков, потому что это нужно, удобно и полезно.
Поэтому здесь мы немного пройдём по кривой дорожке, и воспользуемся приёмами с сомнительной репутацией.

А что Deezer?

У Deezer, к слову, публичный API управления библиотекой музыки тоже есть. Но нет готовой библиотеки для Python, которой можно было бы быстро и удобно воспользоваться.

Spotify

Здесь всё просто. Чтобы стать разработчиком, нужно получить ключ приложения в консоли.
Там предложат добавить Redirect URI для OAuth, который можно установить любым, т.к. он нужен только для сервисов, обслуживающих сразу кучу людей, а в нашем случае всё происходит локально.

Яндекс.Музыка

Нужен логин и пароль для аккаунта, но если включена двухфакторная аутентификация, указывать надо Яндекс.Пароль из Яндекс.Ключа.

Работа приложения

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

Треки из API всех платформ приходят в разном формате, поэтому они приводятся к одинаковому представлению с минимально необходимым набором свойств:

class Track: title = property(lambda self: self.__title) album = property(lambda self: self.__albums if len(self.__albums) > 0 else None) artist = property(lambda self: self.__artists if len(self.__artists) > 0 else None) albums = property(lambda self: self.__albums) artists = property(lambda self: self.__artists)

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

class Playlist: class __iterator: def __init__(self, playlist): pass # заглушка для компактности def __next__(self): pass # заглушка для компактности title = property(lambda self: self.__title) tracks = property(lambda self: self.__tracks) is_public = property(lambda self: self.__is_public) def __len__(self): return len(self.__tracks) def __iter__(self): return Playlist.__iterator(self) def __getitem__(self, index): return self.__tracks

За взаимодействие с сервисами отвечает класс MusicProvider:

class MusicProvider: favorites = property(lambda self: self.__favorites) playlists = property(lambda self: self.__playlists)

Класс YandexMusic (MusicProvider) при инициализации загружает информацию по всем плейлистам и всем трекам в плейлисте «Мне понравилось».

Spotify (MusicProvider) этого не делает, но содержит методы для импорта:

class Spotify(MusicProvider): def import_playlist(self, playlist): pass # заглушка для компактности def import_favorites(self, playlist): pass # заглушка для компактности

Внутри происходит поиск треков в базе Spotify с использованием данных о песнях, полученных из Яндекс.Музыки.
После того, как все треки плейлиста найдены, он создаётся (если это не «Liked Songs») с тем же названием и в него добавляются все найденные мелодии.

Для плейлистов и сохранённых треков требуются разные разрешения:

  • playlist-modify-private — для создания/модификации плейлистов
  • user-library-modify — для добавления звуковых дорожек в избранное

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

Метод search из API Spotify поддерживает ключевые слова для поиска по альбомам/исполнителям/названиям, чем и будем беззастенчиво пользоваться.

Поиск в Spotify

У Spotify большая база треков, но там есть не вся музыка. Можно легко догадаться, что множество отсутствующей в Spotify музыки пересекается с множеством базы композиций Яндекс.Музыки. Часть музыкальных дорожек может быть каверами/ремиксами и прочими извращениями, а часть просто внесёнными неправильно: не тот альбом, или порядок музыкантов разный.

Ещё проблем добавляет разный подход к составлению информации о треках: у Spotify альбом может быть только один, а Яндекс.Музыка отправляет массив альбомов. Исполнителей уже может быть несколько и там, и там.
Deezer предоставляет один альбом и одного исполнителя, но это уже другая история.

Поэтому используется следующий подход, чтобы и рыбку съесть, и на стул присесть:

  • Для всех альбомов выполняется поиск по точному совпадению ключевых слов track:, artist:, album:.
    Чаще всего этого достаточно.
  • Если трек не найден (или альбом у Яндекс.Музыки не указан), происходит попытка поиска без альбома.
  • Если трек не не найден, происходит поиск со следующим исполнителем.

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

Примечание

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

Однако, при разработке практики PEP8 более-менее пытались соблюдаться, и общий размер программы довольно мал.

Исходные тексты программы

Актуальная версия Python на момент написания: 3.8.4

Использованные материалы:

  • Иллюстрация Поросёнка Петра: Книга «Поросёнок Пётр и машина», Петрушевская Людмила
  • Логотип Яндекс.Музыки: ООО «ЯНДЕКС»
  • Логотип Spotify: Spotify AB