Descubra cómo Spotify Web API (SWA) y Google Apps Script (GAS) convirtieron la biblioteca en un generador de listas de reproducción flexible con ejecución programada gratuita.
Por constructor de listas de reproducción, nos referimos a un mecanismo para recopilar, filtrar, ordenar y agregar pistas.
Vínculos al código fuente y documentación al final del artículo.
Problema
Tener una API oficial ha generado muchas herramientas interesantes para Spotify. En nuestro contexto, considere las listas de reproducción más inteligentes . La interfaz gráfica en forma de gráficos, una gran cantidad de bloques de control la hacen bastante amigable para el usuario promedio.
El uso intensivo del servicio reveló una serie de desventajas:
falta de historial de escucha
adición limitada de pistas
número limitado de salidas programadas
trabajo incorrecto con cirílico
Con el tiempo, se agrega aquí el deseo de nuevas fuentes de pistas; algoritmos de filtrado más complejos. El servicio ha dejado de desarrollarse en términos de nuevas funciones.
A este respecto, se deseaba una alternativa que eliminara estas desventajas.
Decisión
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.
( GAS) ( , ). .
1) : , .
A continuación, creamos un disparador utilizando medios gráficos de GAS. Como resultado, por ejemplo, una vez por minuto, la lista de reproducción se actualizará con cinco pistas aleatorias.
function createHelloPlaylist() {
let tracks = Source.getSavedTracks();
Selector.keepRandom(tracks, 5);
Playlist.saveWithReplace({
name: 'Hello, playlist',
tracks: tracks,
});
}
2) Revele sus pistas favoritas que no se hayan escuchado durante más de un mes.
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) Obtenga pistas de álbumes y singles de artistas rastreados por semana.
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',
});
}
Enlaces
La documentación fue escrita con un enfoque en el usuario que no está familiarizado con la programación. Hacer posible el uso de Goofy a través de ejemplos y plantillas de copiar y pegar.
Código fuente en GitHub , incluido el foro .