API – Mashup.se
  • Kontakt
  • Twitter
  • Feed
  • Hem
  • Om
  • Kontakta

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

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

    06 Dec
    2011
    av Jesper Petersson
    Tweet

    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.

    Taggar:
    gästinläggjavascriptspotifyspotify apps api

    Relaterade inlägg

    • tagtavlan_jumbo
      21 Dec
      2011
      Tågtavlan – hur och varför (gästinlägg) Läs mer
    • 26 Okt
      2011
      Enkla myndighetsdata – lågt hängande PSI-frukter (gästinlägg) Läs mer
    • 13 Okt
      2011
      API:er och affärerna (gästinlägg) Läs mer
    • 09 Okt
      2011
      Rapport från TravelHack (gästinlägg) Läs mer

    Om Jesper Petersson

    Pluggar till civilingenjör i Datateknik i Linköping, närmare bestämt inom området inbyggda system. Vid sidan om studierna lever och andas jag webb på @Doubleint som jag driver tillsammans med två andra killar.

    • Fredrik

      Har du testat om Ajax aprop fungerar med deras apps api?
      Jag testade deras google exempel men det funkade inte men jag vet inte om det är jag som klantant mig.

    • http://twitter.com/peterssonjesper Jesper Petersson

      Hej Fredrik,

      Ajax-anrop fungerar finfint i deras motor. Glöm inte att du måste lägga till alla URL:er du gör anrop till i ditt manifest.

      /Jesper

    • Uffe

      Hur testar men egentligen sina appar? Jag har följt Hello World exemplet men får endast upp att appen inte kan hittas när jag skriver in spotify:app:tutorial precis som dom säger i guiden. 

      Testat på både Windows och OS X.

    • Fredrik

      Jag hittade felet manifest.json hette inte det i den zip fil som jag hade tankat ner den hette maifest.json.
      Efter det så fungerade det fint

    • Fredrik

      i Windows behöver du skapa en katalog som heter spotify i din “mina dokument” mapp. och i den zippa upp tutorial.zip och sedan kan du nå den via den url:en du skrev. Gissar också att du behöver beta versionen av spotify och att din användare är aktiverad som utvecklare.

  • Senaste inläggen

    • API Måndag – Rejta API, tågförseningar, Facebook i Sthlm och WebCoast
    • API Måndag – API för fornminnen, nytt från Google+ och nya API konsoler
    • API Måndag – Reco API, Missatsamtals populära API och öppet API från Bloomberg
  • Mina senaste #apise tweets

    • andreaskrohn: Har sagt det förr och säger det igen. Gillar verkligen tjänsterna från Trafikontoret i #Göteborg http://t.co/pjGv7tYA Ett föredömme! #apise 22/2 20:39
    • andreaskrohn: Trött på APIer utan publik dokumentation. Ska organisera tankarna kring det lite sedan blir det nog ett blogginlägg. #apise 22/2 10:40
  • Follow @andreaskrohn
  • Senaste kommentarerna

    Powered by Disqus
  • Länkar

    • Agiley.se
    • Bjornsennbrink.se
    • Din IT Kunskap
    • Disruptive
    • Mindpark
    • Mjukvara.se
    • ProgrammableWeb
    • ptz0n.se
    • The Blackjacker.se
    • Tommy K Johanssons
    • utvbloggen.se
    • Webbradion
    • What's Next
  • RSS Senaste APIer från Opendata

    • Säsongsmat API
    • Mediacreeper API
    • data.goteborg.se
    • Resihop API
    • Missatsamtal API
  • Kategorier

    • APIer
    • Blogg
    • Nyheter
    • Om mashups
    • Svenska mashups
  • Om mashup.se

    Denna sida drivs av Andreas Krohn som jobbar som API specialist på Dopter AB. Den fina designen kan vi tacka Kemie Guaida, Dopter för och ett stort tack till Linus Bohman för Wordpressmagin.

    Mashup.se av Andreas Krohn är licenserat enligt Creative Commons Erkännande 2.5 Sverige License. Använd gärna innehållet men länka tillbaka till mashup.se och tala om var ni fick innehållet från.