fcbk
Conéctate con TwitterConéctate con Facebook
1

Cómo buscar música con la API Web de Spotify

29Puntos

hace 2 años

En el mundo de aplicaciones y servicios para reproducir música en línea, Spotify es una de las mejores. Y una de sus características principales es, precisamente, su catálogo. Además, es una herramienta útil para los desarrolladores; ya que les permite crear sus propios desarrollos utilizando su API. En este artículo te mostraré cómo hacer uso de la API Web de Spotify. En resumen, realizaremos los siguientes pasos:
  • Creación de nuestra API en Spotify Developers
  • Deployment de nuestra Aplicación
  • Creación de nuestra Vista Isomórfica con Handlebar JS
Antes de empezar, es aconsejable que revises las últimas actualizaciones en la página de Spotify Developers. En ocasiones hacen cambios en su Web API PHP; y esto se convierte en el principal motivo de fallos en el código.

Creación de nuestra API en Spotify Developers

Lo primero que debemos hacer es entrar a la página de Spotify Developers, iniciar sesión y crear nuestra aplicación. De esta manera generamos automáticamente el Client ID y el Client Secret. Donde dice Redirect URLs, ingresaremos la URL a la que redireccionaremos una vez que iniciemos sesión en nuestra aplicación.

Deployment de nuestra Aplicación

Para iniciar sesión con nuestra cuenta de Spotify crearemos el archivo login.js: [js] // Login con Spotify (function() { var stateKey = 'spotify_auth_state'; function getHashParams() { var hashParams = {}; var e, r = /([^&;=]+)=?([^&;]*)/g, q = window.location.hash.substring(1); while ( e = r.exec(q)) { hashParams[e[1]] = decodeURIComponent(e[2]); } return hashParams; } function generateRandomString(length) { var text = ''; var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; for (var i = 0; i < length; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); } return text; }; var userProfileSource = document.getElementById('user-profile-template').innerHTML, userProfileTemplate = Handlebars.compile(userProfileSource), userProfilePlaceholder = document.getElementById('user-profile'); oauthSource = document.getElementById('oauth-template').innerHTML, oauthTemplate = Handlebars.compile(oauthSource), oauthPlaceholder = document.getElementById('oauth'); var params = getHashParams(); var access_token = params.access_token, state = params.state, storedState = localStorage.getItem(stateKey); if (access_token && (state == null || state !== storedState)) { alert('Ocurrio un error durante la Autenticación'); } else { localStorage.removeItem(stateKey); if (access_token) { $.ajax({ url: 'https://api.spotify.com/v1/me', headers: { 'Authorization': 'Bearer ' + access_token }, success: function(response) { userProfilePlaceholder.innerHTML = userProfileTemplate(response); $('#login').hide(); $('#loggedin').show(); } }); } else { $('#login').show(); $('#loggedin').hide(); } document.getElementById('login-button').addEventListener('click', function() { var client_id = 'ACA COLOCAMOS EL CLIENTE ID'; // Tu Client ID var redirect_uri = 'http://www.midominio.com/buscar/'; // Tu Redirect URI (Dirección URL a donde quieres que redireccione luego de iniciar Sesión Con tu cuenta de Spotify.) var state = generateRandomString(16); localStorage.setItem(stateKey, state); var scope = 'user-read-private user-read-email'; var url = 'https://accounts.spotify.com/authorize'; url += '?response_type=token'; url += '&client_id=' + encodeURIComponent(client_id); url += '&scope=' + encodeURIComponent(scope); url += '&redirect_uri=' + encodeURIComponent(redirect_uri); url += '&state=' + encodeURIComponent(state); window.location = url; }, false); } })(); [/js] Ahora, usaremos JavaScript para buscar música. Para lograrlo, crearemos nuestro archivo buscar.js: [js] // Buscador var templateSource = document.getElementById('resultados-template').innerHTML, template = Handlebars.compile(templateSource), resultadosPlaceholder = document.getElementById('resultados'), playingCssClass = 'playing', audioObject = null; var fetchTracks = function (albumId, callback) { $.ajax({ url: 'https://api.spotify.com/v1/albums/' + albumId, success: function (response) { callback(response); } }); }; var searchAlbums = function (query) { $.ajax({ url: 'https://api.spotify.com/v1/search', data: { q: query, type: 'album' }, success: function (response) { resultadosPlaceholder.innerHTML = template(response); } }); }; resultados.addEventListener('click', function (e) { var target = e.target; if (target !== null && target.classList.contains('cover')) { if (target.classList.contains(playingCssClass)) { audioObject.pause(); } else { if (audioObject) { audioObject.pause(); } fetchTracks(target.getAttribute('data-album-id'), function (data) { audioObject = new Audio(data.tracks.items[0].preview_url); audioObject.play(); target.classList.add(playingCssClass); audioObject.addEventListener('ended', function () { target.classList.remove(playingCssClass); }); audioObject.addEventListener('pause', function () { target.classList.remove(playingCssClass); }); }); } } }); document.getElementById('search-form').addEventListener('submit', function (e) { e.preventDefault(); searchAlbums(document.getElementById('query').value); }, false); // Ocultamos nuestro acces token por seguridad if(typeof window.history.pushState == 'function') { window.history.pushState({}, "Hide", "http://www.midominio.com/buscar/"); } [/js]

Creación de nuestra Vista Isomórfica con Handlebar JS

Ahora vamos a crear 2 vistas, una para iniciar sesión y otra para buscar música. Spotify nos aconseja usar isomorfismo. En la documentación oficial aconseja usar Handlebars JS. Pero podemos usar ReactJS y otra librería que sea de nuestro agrado también. Lo primero que debemos hacer es crear la vista para el inicio de sesión:
Login
[js] <div class="container"> <div id="login"> <h1>Inicia Sesión con tu Cuenta de Spotify</h1> <button id="login-button" class="btn btn-primary">Login</button> </div> <div id="loggedin"> <div id="user-profile"> </div> <div id="oauth"> </div> </div> </div> <script src="js/handlebars-v4.0.0.js"></script> <script id="user-profile-template" type="text/x-handlebars-template"> <h1>Logged in as {{display_name}}</h1> <div class="media"> <div class="pull-left"> <img class="media-object" width="150" src="{{images.0.url}}" /> </div> <div class="media-body"> <dl class="dl-horizontal"> <dt>Display name</dt> <dd class="clearfix">{{display_name}}</dd> <dt>Id</dt> <dd>{{id}}</dd> <dt>Email</dt> <dd>{{email}}</dd> <dt>Spotify URI</dt> <dd><a href="{{external_urls.spotify}}">{{external_urls.spotify}}</a></dd> <dt>Link</dt> <dd><a href="{{href}}">{{href}}</a></dd> <dt>Profile Image</dt> <dd class="clearfix"><a href="{{images.0.url}}">{{images.0.url}}</a></dd> <dt>Country</dt> <dd>{{country}}</dd> </dl> </div> </div> </script> <script id="oauth-template" type="text/x-handlebars-template"> <h2>oAuth info</h2> <dl class="dl-horizontal"> <dt>Access token</dt> <dd class="text-overflow">{{access_token}}</dd> </dl> </script> [/js] Ahora creamos la vista para buscar música: [js] <div class="row"> <div class="col-md-12"> <h1>Buscar Artista</h1> Escribe el nombre de un artista y luego has clic en el botón Buscar: <form id="search-form" role="form"> <div class="form-group"> <input type="text" id="query" value="" class="form-control" placeholder="Escribe el nombre de un Artista..."/> </div> <button type="submit" id="search" class="btn btn-primary" />Buscar</button> <button type="reset" id="search" class="btn btn-alert" />Limpiar</button> </form> </div> </div> <div class="row"> <div class="col-md-12"> <div id="resultados"> </div> </div> </div> </div> <!-- Handeblars JS --> <script src="../js/handlebars-v4.0.0.js" type="text/javascript"></script> <script id="resultados-template" type="text/x-handlebars-template"> {{#each albums.items}} <div style="background-image:url({{images.0.url}})" data-album-id="{{id}}" class="cover"> </div> <!-- <h6 class="nombre">{{name}}</h6> <h6 class="popularidad">{{href}}</h6> --> {{/each}} </script> [/js] ¡Y eso es todo! Puedes ver el ejemplo en este DEMO y descargar el código fuente del proyecto en un repositorio en GIT. Y si quieres aprender más acerca de JavaScript, Responsive Design, ECMAScript 6 y más; regístrate hoy a la Carrera de Front-end en Platzi. Y crea aplicaciones yendo más allá de HTML5 y CSS3.  
JuanCastroLurita
JuanCastroLurita
@pepoflex

29Puntos

hace 2 años

Todas sus entradas