En djupdykning i Spotify Apps APIet (gästinlägg)

Precis som Andreas tidigare nämnt har Spotify släppt ett nytt Javascript-API för Apps. Med hjälp av detta API går det dels bygga applikationer för att styra Spotify-klienten, men det öppnar också upp möjligheter till att kommunicera med omvärlden och andra API:er. Jag har tagit tillfället i akt att testa på API:et för att se vad det går för.

Att komma igång

För att komma igång och utveckla behövs ett utvecklingskonto, detta erhålls genom att maila Spotify och snällt be de aktivera detta. Det tog cirka ett dygn för Spotify att aktivera mitt konto, efter detta var det fritt fram att knacka kod! De har publicerat en ganska innehållsrik tutorial vilket gör att man snabbt kommer igång, man har lätt ett fungerande Hello World på några få minuter.

En djupdykning

När det sedan är dags för att faktiskt använda deras API lite mer djupgående blir dock allt betydligt jobbigare. Slår man i deras dokumentation inser man ganska snabbt att den inte alls stämmer bra överens med verkligheten. Detta är visserligen något de nämner i dokumentationen, men det är fortfarande tråkigt att det inte finns några bra referenser att vända sig till. T.ex. saknas all dokumentation om trackPlayer, vilket är en väldigt central del för att kunna kommunicera med klienten.

För att kunna gå vidare i utvecklingen började jag dumpa lite objekt med hjälp av console.log(), vilket mynnade ut i följande metoder på Spotify-objektet (det objekt som getSpotifyApi() returnerar):

  • core: function core() { return _getModule(_cache, “core”); }
  • desktop: function desktop() { return _getModule(_cache, “desktop”); }
  • installer: function installer() { return _getModule(_cache, “installer”); }
  • require: function require() { return _require; }
  • requireAsync: function requireAsync() { return _requireAsync; }
  • social: function social() { return _getModule(_cache, “social”); }
  • trackPlayer: function trackPlayer() { return _getModule(_cache, “trackPlayer”); }
  • whatsnew: function whatsnew() { return _getModule(_cache, “whatsnew”); }

Om man i sin tur dumpar trackPlayer-objektet fås följande:

  • addEventListener: function addEventListener() { [native code] }
  • canChangeRepeat: function canChangeRepeat() { [native code] }
  • canChangeShuffle: function canChangeShuffle() { [native code] }
  • getIsPlaying: function getIsPlaying() { [native code] }
  • getNowPlayingTrack: function getNowPlayingTrack() { [native code] }
  • getPlaybackControlState: function getPlaybackControlState() { [native code] }
  • getPlayingContext: function getPlayingContext() { [native code] }
  • getRepeat: function getRepeat() { [native code] }
  • getShuffle: function getShuffle() { [native code] }
  • getVolume: function getVolume() { [native code] }
  • playTrackFromContext: function playTrackFromContext() { [native code] }
  • playTrackFromUri: function playTrackFromUri() { [native code] }
  • removeEventListener: function removeEventListener() { [native code] }
  • seek: function seek() { [native code] }
  • setIsPlaying: function setIsPlaying() { [native code] }
  • setRepeat: function setRepeat() { [native code] }
  • setShuffle: function setShuffle() { [native code] }
  • setVolume: function setVolume() { [native code] }
  • skipToNextTrack: function skipToNextTrack() { [native code] }
  • skipToPreviousTrack: function skipToPreviousTrack() { [native code] }

Detta är helt klart ett ganska omständigt sätt att hitta tillgängliga metoder på, men visst fungerar det. All utdata från console.log() dyker (precis som vanligt) upp i inspektorn.

Lite annat smått och gått som finns att tillgå är all källkod som Spotify skickar med i beta-versionen, där finns bland annat ett antal väldigt användbara exempel. Använder man Mac OS X återfinns allt detta i /Applications/Spotify.app/Contents/Resources/cef_views/. Här finns bland annat exempel på hur man kan implementera tabbar och andra trevliga UI-element.

Ett kort exempel

Under tiden jag testade på API:et tog jag fram en (extremt) liten applikation som startar musiken även om någon försöker använda samma Spotify-konto. T.ex. är det detta som inträffar om man försöker använda Spotify på datorn samtidigt som på telefonen. Varningsmeddelandet “Spotify has been paused because your account is used somewhere else” dyker fortfarande upp, men ingen störningen i musiken hörs.

Detta lilla exempel återfinns här och utgör hela 56 rader kod. Trots att det är ett väldigt litet exempel säger det endel om hur kraftfullt API:et faktiskt är.

Slutsats

Till sist måste jag säga att det är riktigt trevligt att arbeta med Spotifys nya API. De har tagit fram ett kraftfullt API tillsammans med en trevlig utevcklingsmiljö och en bra debugger. Det kommer säkerligen komma en hel drös med trevliga applikationer som kommer göra musikupplevelsen på Spotify än bättre. Det jag saknar är en bra referens till alla metoder och objekt, jag hoppas innerligt att Spotify fixar till detta så småningom.