Можно ли без официального API создавать плейлисты и удалять дубликаты? Статья описывает расширение для браузеров на Chromium. Преследуя цель добавить новые функции на сайт Яндекс.Музыки.
Мой первый крупный опыт работы с JavaScript и что из этого вышло. В решении не используется библиотека от MarshalX, не запрашивается логин/пароль.
Небольшая предыстория. Проект является просто хобби. Это должно прояснить мои решения и качество кода. На протяжении нескольких лет активно пользовался Яндекс.Музыкой, курировал тему на 4PDA. Отсюда мне известны некоторые больные точки сервиса, которые Яндекс либо игнорирует, либо не может позволить себе сделать ввиду гиковой направленности.
Функционал
Наибольшее количество функций связано с созданием плейлистов и работой с ними, в том числе модификации.
В качестве источника треков выступают:
Раздел новых релизов. Как правило, не новый пользователь, получает в этом разделе только персональный набор релизов от отслеживаемых исполнителей и близких к ним в виде синглов и альбомов. Расширение позволяет собрать все треки в один плейлист.
Last.fm. Расширение позволяет импортировать различные рекомендации сервиса. Например, плейлист "Соседи" будет содержать треки, которые слушают пользователи с похожим музыкальным вкусом. Плейлист "Микс" поделит треки как на ранее прослушиваемые, так и новые рекомендации. Кроме того, есть топ прослушиваний за период и любимые треки.
Стена рекомендаций. Ранее Яндекс.Музыка предлагала ленту рекомендаций по адресу /feed. На текущий момент страница недоступна. Но некоторые API по-прежнему отвечают. Среди источников: треки малоизвестных исполнителей, давно не прослушиваемое, недельный чарт и другое.Без категории. На страницы исполнителя доступна команда сбора дискографии за некоторый период. Например, все треки исполнителя за 2 года; Еще один плейлист "Мои дизлайки", собирает все известные дизлайки, но не в порядке добавления; Плейлист "Из истории" подбирает случайные треки из истории прослушиваний самого Яндекс.
Под работой и модификацией подразумевается:
Создать похожий плейлист. Текущий набор треков передается Last.fm, ответ фильтруется по заданному значению схожести, который также считает Last.fm.
Поиск дубликатов. Треки с одинаковым id удаляются, схожие названия перемещаются наверх списка на пользовательскую модерацию. Остальные треки остаются на своем месте.
Фильтр треков. Позволяет удалить: диз/лайки; неоригинальные версии треков (mix, radio, cover и прочее); недавно игравшее; названия с кириллицей; вычесть треки другого плейлиста.
Сортировка. Не временная, удаляет треки и вставляет заново с новым порядком по исполнителю или названию.
Лайкер. Массовая постановка/снятие диз/лайка на все треки плейлиста.
Экспортер. Формирует текстовый список в виде "исполнитель - трек", который можно отдать другого сервису. Например, перенести в Spotify.
Принцип работы
Текущая страница проверяется по url. Если для нее есть функционал, происходит поиск ключевого элемента страницы, к которому добавляется элемент от расширения (кнопка и выпадающий список). Реагируя на клик, обрабатывающий код, как правило, выводит уведомление (для длительных операций).
Операции, связанные с модификацией, требуют freshCsrf. Его можно получить выполнив GET-запрос на /api/v2.1/handlers/auth. Параметры для запроса можно узнать из консоли разработчика по фильтру XHR. Оттуда были получены и все прочие адреса. Буквально методов тыка, ручных кликов по сайту.
Постарался максимально сократить разрешения - это ограниченный набор адресов, связанный с Яндекс.Музыкой и last.fm, чтобы иметь возможность совершать запросы, а также picsum.photos для загрузки случайных обложек к плейлистам.
Все используемые данные пользователя никуда не передаются и никак не хранятся. За исключением передачи логина с запросами к last.fm.
Ссылки
Расширение доступно в Chrome Web Store
Исходный код на GitHub вместе с обратной связью
cruzo
Ох, вот бы им помочь доделать кнопку. А то они 1 трек волшебно умеют перемешивать уже 2 года (это столько лет назад я создал тикет 18092010235223119 в техподдержке у них)
fedorro
Перемотку то не могут починить уже, наверное тоже, несколько лет…, а также подбор треков, клики на кнопки, зависающие контекстные меню и ещё 100500 багов, которые я вначале репортил, а потом надоело записывать ролики с воспроизведением проблемы — нашли бесплатных тестеров (даже не бесплатных, я им ещё и за подписку плачу)… И даже Спотифай никак их не расшевелил, я уже на него потихоньку переезжаю.
daryastarkova
Привет! Я работаю в поддержке Яндекс Музыки, увидела ваш комментарий и не смогла пройти мимо.
Мы стараемся исправлять все баги, но некоторые задачи занимают дольше времени, чем хотелось бы. По поводу записи видео с воспроизведением ошибки: мы не хотели, чтобы ситуация вызвала у вас дискомфорт. Некоторые баги локальные, поэтому мы не можем воспроизвести их самостоятельно. В таких ситуациях и запрашиваем подробности, чтобы лучше понимать, с чем вам пришлось столкнуться. Будем работать над совершенствованием этой системы.
Приложение постоянно обновляется и модернизируется — надеюсь, вы оцените наши новые фишки (например, видеошоты и потоки, которые алгоритм собирает специально для вас), и всё-таки решите остаться с нами!
fedorro
Здравствуйте!
— с тех пор как в плейлисте избранных закончилось место и приложение начало без предупреждения вероломно удалять оттуда треки ваш алгоритм рекомендаций сломался и уже несколько месяцев гоняет мне одни и те же треки) Да, я писал в ТП, да чистил историю прослушивания и прочие рекомендации — нет, не помогло.Итого — хорошего приложения на десктоп нет, открытого АПИ нет, рекомендации не работают. Зато есть бесящее ограничение на 10 тыс. лайков, может я меломан, и хочу накопить большую коллекцию, чтобы можно было слушать её по кругу и не надоело, когда меня настигнет разрыв во вкусах поколений?!?)))
А по поводу видео:
— Перемотка у Вас не работает.
— Да ну, пришлите виде.
— Присылаю — а, да, известная проблема, работаем…
Не помню год назад это было, или когда… Но я тик подробно в тексте описываю проблемы типа съехавших масок на кнопках, для её воспроизведения достаточно мышью провести… — нет, давайте видео. Ещё у меня есть видео с произвольно исчезающими треками из плейлиста — записать его было не проблема т.к. повторяется со 100 % вероятностью, но отправит так и не собрался, и даже видео с теми самыми кнопками. Помнится думал как бы записать на видео клики кнопкой мыши чтобы продемонстрировать временами отгадывающее меню… но на этом и закончилось мое желание писать в поддержку.
daryastarkova
Кнопка «Перемешать» и правда странно смотрелась на синглах. В новых версиях приложения мы заменили её в альбомах на кнопку «Слушать». А режим перемешивания можно включить по желанию, развернув окно плеера.