[JavaScript, API] Конструктор плейлистов для Spotify
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Статья о том, как Spotify Web API (SWA) и платформа Google Apps Script (GAS) позволили превратить библиотеку в гибкий конструктор плейлистов с бесплатным исполнением по расписанию.Под конструктором плейлистов понимаем механизм сбора, фильтрации, сортировки и добавления треков.Ссылки на исходный код и документацию в конце статьи.Проблема Наличие официального API породило для Spotify множество интересных инструментов. В нашем контексте рассмотрим Smarter Playlists. Графический интерфейс в виде графов, множество управляющих блоков делают его довольно дружелюбным для обычного пользователя. Плотное использование сервиса выявило ряд недостатков: отсутствие истории прослушиваний, лимитированное добавление треков, ограниченное количество запусков по расписанию, некорректная работа с кириллицей. С течением времени сюда добавляется желание новых источников треков, более сложных алгоритмов фильтрации. Сервис перестал развиваться с точки зрения новых функций.В связи с этим появилось желание альтернативы, устраняющей данные недостатки.РешениеВ результате была разработана библиотека для GAS на JavaScript - Goofy. Конструктором её делает возможность запуска на платформе в редакторе или по расписанию (триггерам) без стороннего ПО.Естественно GAS накладывает свои ограничения, но другого порядка. Например, время исполнения не более 6 минут; количество запросов к внешним API не более 20 тысяч в день. С другой стороны, круг возможностей существенно расширился. Реализованы все функции Smarter Playlists, устранены его недостатки. Появились новые функции. АлгоритмНесколько простых примеров, которые можно реализовать с помощью Goofy
- Объединение личных миксов с удалением ранее прослушанных треков
- Выявление давно непрослушиваемых треков
- Сбор новинок отслеживаемых исполнителей
- Накопление треков обновляемого источника в плейлисте с удалением уже прослушанных
- Рекомендации Last.fm любого пользователя, топ за период и прочее
Новые возможностиОсобое внимание уделю истории прослушиваний. Частое прослушивание музыки без особо активных действий приводят стриминг платформы к повторам. Одни и те же треки приходят изо дня в день. Goofy позволяет удалить ранее прослушанные треки. Однако это сложнее, чем казалось на первых взгляд.
- SWA дает возможность получить только 50 последних прослушанных треков. Появление 51-ого делает недоступным 1-й. GAS имеет выход к Google Drive. Библиотека создает повторяющийся триггер и опрашивает SWA на предмет новых прослушиваний. Если они есть, сохраняет в файл. Таким образом, появляется локальная полная история прослушиваний.
- Есть другая проблема. Трек считается прослушанным только после 30 секунд. Причем зачастую недавние треки обновляются не сразу или вовсе теряются. Списываю это на "качество" SWA. Решение есть и здесь - использовать Last.fm. Реализовано два подхода. Во первых, можно просто запросить недавние прослушивания и удалять совпадения по названию трека. Во вторых, можно выполнить поиск трека в Spotify и сохранить его в файл на Google Drive. Тем самым получая историю прослушиваний от Last.fm готовую к работе со Spotify.
Кроме того, Last.fm API используется и для получения других источников. Например, рекомендации, треки соседей по музыкальным вкусам, любимые треки, топ за разный период.ПримерНужно выполнить установку (копирование в GAS) и настройку (выдача разрешений, ключи доступа). Все подробно есть в документации.1) Простой пример: получить любимые треки, взять пять случайных и добавить в плейлист.Далее графическими средствами GAS создаем триггер. В результате, например, раз в минуту плейлист будет обновляться пятью случайными треками.
function createHelloPlaylist() {
let tracks = Source.getSavedTracks();
Selector.keepRandom(tracks, 5);
Playlist.saveWithReplace({
name: 'Hello, playlist',
tracks: tracks,
});
}
2) Выявить любимые треки, которые не были прослушаны более чем месяц.
function templateSavedAndForgot(){
let recentTracks = Source.getRecentTracks(2500);
let savedTracks = Source.getSavedTracks();
Filter.removeTracks(savedTracks, recentTracks);
let startDate = new Date('2006-01-01');
let endDate = Filter.getDateRel(30, 'endDay');
Filter.rangeDateAbs(savedTracks, startDate, endDate);
Selector.keepRandom(savedTracks, 20);
Order.sort(savedTracks, 'meta.added_at', 'asc');
Playlist.saveWithReplace({
name: 'Любимо и забыто',
tracks: savedTracks,
randomCover: 'update', // установить случайную обложку плейлиста
});
}
3) Получить треки альбомов и синглов отслеживаемых исполнителей за неделю.
function createNewRelease() {
const playlistId = 'abc';
let tracks = Source.getArtistsTracks({
artist: {
followed_include: true
},
album: {
groups: 'album,single',
release_date: { sinceDays: 7, beforeDays: 0 }
},
});
Order.shuffle(tracks);
Combiner.push(tracks, Source.getPlaylistTracks('name', playlistId));
Filter.removeTracks(tracks, RecentTracks.get(3000));
Filter.matchOriginalOnly(tracks);
Playlist.saveWithReplace({
id: playlistId,
name: 'Новые релизы',
tracks: tracks,
randomCover: 'update',
});
}
СсылкиДокументация писалась с ориентиром на пользователя, который не знаком с программированием. Чтобы дать возможность использовать Goofy через копипаст шаблонов и примеров.Исходный код на GitHub, включая форум.
===========
Источник:
habr.com
===========
Похожие новости:
- [Python, API, 1С-Битрикс] Как быстро получить много данных от Битрикс24 через REST API
- [Периферия] Доступные «мониторы» для домашней студии и обычного прослушивания музыки — делимся обзорами акустики
- Google запретил использование Google API в сторонних браузерах а основе Chromium
- [JavaScript] Приглашаем на DINS JS EVENING: разбираем Chrome DevTools и Cypress
- [Звук, Видеоконференцсвязь] Музыкальные школы попросили улучшить качество звука в Zoom; у приложения появился новый режим
- [Разработка веб-сайтов, JavaScript, Интерфейсы, Big Data, TypeScript] Автоматическая виртуализация рендеринга произвольной вёрстки
- [Python, API, Браузеры, Веб-аналитика] Скрапинг современных веб-сайтов без headless-браузеров (перевод)
- [Информационная безопасность, Open source, JavaScript, Node.JS] CRUD для NMAP’а: решение для мониторинга открытых портов на хостах
- [Занимательные задачки, Программирование] Beep, Beep, I'm a sheep (перевод)
- [JavaScript, Программирование] Эффектное программирование. Часть 2: генераторы в полевых условиях
Теги для поиска: #_javascript, #_api, #_spotify, #_api, #_muzyka (музыка), #_last.fm, #_javascript, #_google_apps_script, #_gas, #_javascript, #_api
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:39
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Статья о том, как Spotify Web API (SWA) и платформа Google Apps Script (GAS) позволили превратить библиотеку в гибкий конструктор плейлистов с бесплатным исполнением по расписанию.Под конструктором плейлистов понимаем механизм сбора, фильтрации, сортировки и добавления треков.Ссылки на исходный код и документацию в конце статьи.Проблема Наличие официального API породило для Spotify множество интересных инструментов. В нашем контексте рассмотрим Smarter Playlists. Графический интерфейс в виде графов, множество управляющих блоков делают его довольно дружелюбным для обычного пользователя. Плотное использование сервиса выявило ряд недостатков: отсутствие истории прослушиваний, лимитированное добавление треков, ограниченное количество запусков по расписанию, некорректная работа с кириллицей. С течением времени сюда добавляется желание новых источников треков, более сложных алгоритмов фильтрации. Сервис перестал развиваться с точки зрения новых функций.В связи с этим появилось желание альтернативы, устраняющей данные недостатки.РешениеВ результате была разработана библиотека для GAS на JavaScript - Goofy. Конструктором её делает возможность запуска на платформе в редакторе или по расписанию (триггерам) без стороннего ПО.Естественно GAS накладывает свои ограничения, но другого порядка. Например, время исполнения не более 6 минут; количество запросов к внешним API не более 20 тысяч в день. С другой стороны, круг возможностей существенно расширился. Реализованы все функции Smarter Playlists, устранены его недостатки. Появились новые функции. АлгоритмНесколько простых примеров, которые можно реализовать с помощью Goofy
function createHelloPlaylist() {
let tracks = Source.getSavedTracks(); Selector.keepRandom(tracks, 5); Playlist.saveWithReplace({ name: 'Hello, playlist', tracks: tracks, }); } function templateSavedAndForgot(){
let recentTracks = Source.getRecentTracks(2500); let savedTracks = Source.getSavedTracks(); Filter.removeTracks(savedTracks, recentTracks); let startDate = new Date('2006-01-01'); let endDate = Filter.getDateRel(30, 'endDay'); Filter.rangeDateAbs(savedTracks, startDate, endDate); Selector.keepRandom(savedTracks, 20); Order.sort(savedTracks, 'meta.added_at', 'asc'); Playlist.saveWithReplace({ name: 'Любимо и забыто', tracks: savedTracks, randomCover: 'update', // установить случайную обложку плейлиста }); } function createNewRelease() {
const playlistId = 'abc'; let tracks = Source.getArtistsTracks({ artist: { followed_include: true }, album: { groups: 'album,single', release_date: { sinceDays: 7, beforeDays: 0 } }, }); Order.shuffle(tracks); Combiner.push(tracks, Source.getPlaylistTracks('name', playlistId)); Filter.removeTracks(tracks, RecentTracks.get(3000)); Filter.matchOriginalOnly(tracks); Playlist.saveWithReplace({ id: playlistId, name: 'Новые релизы', tracks: tracks, randomCover: 'update', }); } =========== Источник: habr.com =========== Похожие новости:
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 18:39
Часовой пояс: UTC + 5