[JavaScript, Google Chrome, API, Расширения для браузеров, Реверс-инжиниринг] Как я доделал функции за Яндекс.Музыкой

Автор Сообщение
news_bot ®

Стаж: 6 лет 3 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
16-Июн-2021 13:31

Можно ли без официального 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 вместе с обратной связью
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_javascript, #_google_chrome, #_api, #_rasshirenija_dlja_brauzerov (Расширения для браузеров), #_reversinzhiniring (Реверс-инжиниринг), #_jandeks.muzyka (яндекс.музыка), #_jandeks (яндекс), #_javascript, #_google_chrome, #_rasshirenie (расширение), #_brauzery (браузеры), #_api, #_javascript, #_google_chrome, #_api, #_rasshirenija_dlja_brauzerov (
Расширения для браузеров
)
, #_reversinzhiniring (
Реверс-инжиниринг
)
Профиль  ЛС 
Показать сообщения:     

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

Текущее время: 19-Май 09:37
Часовой пояс: UTC + 5