SlideShare a Scribd company logo
1 of 121
Last.fm API
Music Hack Day • Stockholm
     30 January 2010
What’s Last.fm?
What’s Last.fm?
We do lots of things:
What’s Last.fm?
We do lots of things:
Charts, recommendations, catalogue, personalised
radio, metadata, artists similarity, tags, images,
events, groups, venues, friends, journals,
shoutboxes
What’s Last.fm?
We do lots of things:
Charts, recommendations, catalogue, personalised
radio, metadata, artists similarity, tags, images,
events, groups, venues, friends, journals,
shoutboxes

“The social music revolution”
What’s Last.fm?
We do lots of things:
Charts, recommendations, catalogue, personalised
radio, metadata, artists similarity, tags, images,
events, groups, venues, friends, journals,
shoutboxes

“The social music revolution”
The definitive online home for
your
music taste
Scrobbling
Scrobbling
(Not scribbling, scobbing, snowballing
or scrabbling. These are the risks of
made-up words.)
Scrobbling
  (Not scribbling, scobbing, snowballing
  or scrabbling. These are the risks of
  made-up words.)
scrobble: skrob· bul (ˈskrɒbəll)
  [verb] To automatically add the tracks you play to your Last.fm
  profile with a piece of software called a Scrobbler
Whole lotta scrobblin’
Whole lotta scrobblin’
571 scrobbles in the last second
Whole lotta scrobblin’
571 scrobbles in the last second
34,260 scrobbles in the last
minute
Whole lotta scrobblin’
571 scrobbles in the last second
34,260 scrobbles in the last
minute
2,055,600 scrobbles in the last
hour
Whole lotta scrobblin’
571 scrobbles in the last second
34,260 scrobbles in the last
minute
2,055,600 scrobbles in the last
hour
24,667,200 scrobbles in the last
Whole lotta scrobblin’
571 scrobbles in the last second
34,260 scrobbles in the last
minute
2,055,600 scrobbles in the last
hour
24,667,200 scrobbles in the last
     That's over 38,085,313,884 tracks scrobbled since 2003.
              About 297,089 years of music in total.
API 2.0
API 2.0
A REST-style HTTP API, that you
(might) know and love (modelled on
Flickr)
API 2.0
A REST-style HTTP API, that you
(might) know and love (modelled on
Flickr)
Clients available in PHP, Ruby,
Python, C++
API 2.0
A REST-style HTTP API, that you
(might) know and love (modelled on
Flickr)
Clients available in PHP, Ruby,
Python, C++
Unrestricted non-commercial use
Documentation
Documentation
Complete documentation can be
found at http://last.fm/api
Documentation
Complete documentation can be
found at http://last.fm/api
Each method has a page that
details is required and optional
parameters
Documentation
Complete documentation can be
found at http://last.fm/api
Each method has a page that
details is required and optional
parameters
It covers everything here in greater
depth, and is generally much more
What does it offer?
What does it offer?
One hundred or so methods to
access information about:
What does it offer?
One hundred or so methods to
access information about:
Artists, albums, tracks, tags,
users, events, venues, groups,
radio
What does it offer?
One hundred or so methods to
access information about:
Artists, albums, tracks, tags,
users, events, venues, groups,
radio
Authenticated access to private
data
album.addTags, album.getInfo, album.getTags, album.removeTag, album.search,
   artist.addTags, artist.getEvents, artist.getImages, artist.getInfo, artist.getPastEvents,
artist.getPodcast, artist.getShouts, artist.getSimilar, artist.getTags, artist.getTopAlbums,
artist.getTopFans, artist.getTopTags, artist.getTopTracks, artist.removeTag, artist.search,
     artist.share, artist.shout, auth.getMobileSession, auth.getSession, auth.getToken,
       event.attend, event.getAttendees, event.getInfo, event.getShouts, event.share,
     event.shout, geo.getEvents, geo.getMetroArtistChart, geo.getMetroTrackChart,
              geo.getMetroUniqueArtistChart, geo.getMetroUniqueTrackChart,
             geo.getMetroWeeklyChartlist, geo.getTopArtists, geo.getTopTracks,
    group.getMembers, group.getWeeklyAlbumChart, group.getWeeklyArtistChart,
        group.getWeeklyChartList, group.getWeeklyTrackChart, library.addAlbum,
           library.addArtist, library.addTrack, library.getAlbums, library.getArtists,
     library.getTracks, playlist.addTrack, playlist.create, playlist.fetch, radio.getPlaylist,
      radio.tune, tag.getSimilar, tag.getTopAlbums, tag.getTopArtists, tag.getTopTags,
    tag.getTopTracks, tag.getWeeklyArtistChart, tag.getWeeklyChartList, tag.search,
       tasteometer.compare, track.addTags, track.ban, track.getInfo, track.getSimilar,
      track.getTags, track.getTopFans, track.getTopTags, track.love, track.removeTag,
            track.search, track.share, user.getEvents, user.getFriends, user.getInfo,
      user.getLovedTracks, user.getNeighbours, user.getPastEvents, user.getPlaylists,
       user.getRecentStations, user.getRecentTracks, user.getRecommendedArtists,
 user.getRecommendedEvents, user.getShouts, user.getTopAlbums, user.getTopArtists,
               user.getTopTags, user.getTopTracks, user.getWeeklyAlbumChart,
   user.getWeeklyArtistChart, user.getWeeklyChartList, user.getWeeklyTrackChart,
Or in an organised fashion...
Who’s using it?
Who’s using it?
1,000s of 3rd party developers
every day
Who’s using it?
1,000s of 3rd party developers
every day
Checkout http://build.last.fm for
examples, from forum sigs to
complex apps
Who’s using it?
1,000s of 3rd party developers
every day
Checkout http://build.last.fm for
examples, from forum sigs to
complex apps
Microsoft built our Xbox 360 app
using only our public API
Who’s using it?
1,000s of 3rd party developers
every day
Checkout http://build.last.fm for
examples, from forum sigs to
complex apps
Microsoft built our Xbox 360 app
using only our public API
Squeezebox, Sonos and other
Current Last.fm traffic
                                            (December 2009)
Web requests to www.last.fm
API requests (official Last.fm apps)
API requests (3rd party)




                                             37%
                      45%




                                      17%
Whole lotta
scrobblers
Whole lotta
        scrobblers
Hype Machine, Spotify, Songbird,
Winamp, iTunes and 100s more
Whole lotta
        scrobblers
Hype Machine, Spotify, Songbird,
Winamp, iTunes and 100s more
People have found ways to
scrobble Youtube, and even their
vinyl collection
Whole lotta
        scrobblers
Hype Machine, Spotify, Songbird,
Winamp, iTunes and 100s more
People have found ways to
scrobble Youtube, and even their
vinyl collection
You? Check out our scrobbling API
(aka ‘submissions API’) too
Whole lotta
        scrobblers
Hype Machine, Spotify, Songbird,
Winamp, iTunes and 100s more
People have found ways to
scrobble Youtube, and even their
vinyl collection
You? Check out our scrobbling API
(aka ‘submissions API’) too
Question: as a developer what
would make scrobbling easier /
Using the API
Using the API
You’ll need...
Using the API
You’ll need...

  An API Key (a 32 char unique identifier)
Using the API
You’ll need...

  An API Key (a 32 char unique identifier)

  A way to call the API (use a supported
  client, or plain old wget, up to you)
Using the API
You’ll need...

  An API Key (a 32 char unique identifier)

  A way to call the API (use a supported
  client, or plain old wget, up to you)

  A way to parse the response (this is
  where clients can come in handy)
Getting an API Key




   Please don’t use the example key
Getting an API Key
To get one you’ll need a Last.fm
account, so if you don’t have one you’ll
need to join (fast, free)




          Please don’t use the example key
Getting an API Key
To get one you’ll need a Last.fm
account, so if you don’t have one you’ll
need to join (fast, free)

Set it up at http://last.fm/api/account




          Please don’t use the example key
Getting an API Key
To get one you’ll need a Last.fm
account, so if you don’t have one you’ll
need to join (fast, free)

Set it up at http://last.fm/api/account

Only one API Key per account


          Please don’t use the example key
Anatomy of an API
      call
Anatomy of an API
         call
http://ws.audioscrobbler.com/2.0/?
method=user.getinfo&api_key=XXX&
user=underpangs
Anatomy of an API
         call
http://ws.audioscrobbler.com/2.0/?
method=user.getinfo&api_key=XXX&
user=underpangs

Root URL + Method + API Key + method
specific parameters (check the method
documentation)
Anatomy of a
                response
<lfm status="ok">
    <user>
       <id>1021212</id>
       <name>underpangs</name>
       <realname>David Singleton</realname>
       <url>http://www.last.fm/user/underpangs</url>
       <image>http://userserve-ak.last.fm/serve/126/13884831.jpg</
  image>
       <country>UK</country>
       <age>25</age>
       <gender>m</gender>
       <subscriber>1</subscriber>
       <playcount>45519</playcount>
       <playlists>12</playlists>
       <bootstrap>0</bootstrap>
       <registered unixtime="1073173934">2004-01-03 23:52</registered>
    </user>
</lfm>



Every response is wrapped in a root <lfm> node
Output Formats
Output Formats
By default all services output XML are
also available as JSON
Output Formats
By default all services output XML are
also available as JSON

To switch, add format=json to your call
Output Formats
By default all services output XML are
also available as JSON

To switch, add format=json to your call

Some services offer even more output
formats, check the method docs
Output Formats
By default all services output XML are
also available as JSON

To switch, add format=json to your call

Some services offer even more output
formats, check the method docs

  In particular, some can output RSS,
  XSPF, iCal and JSONP
JSON Output
{
    "user": {
        "id": "1021212",
        "name": "underpangs",
        "realname": "David Singleton",
[SNIP!]
        "registered": {
            "#text": "2004-01-03 23:52",
            "unixtime": "1073173934"
        }
    }
}


        Note that for elements with both a text child and attributes,
             that the text is expressed as the #text attribute
Paginated methods




<lfm status="ok" total="109" page="1" perPage="50" totalPages="3">
  ...
</lfm>
Paginated methods
     Some methods can return a lot of results,
     we limit them and let you page through




<lfm status="ok" total="109" page="1" perPage="50" totalPages="3">
  ...
</lfm>
Paginated methods
     Some methods can return a lot of results,
     we limit them and let you page through

     These services will generally accept a
     limit (amount per page) and page offset.
     The root node will also give you the total
     number of results and pages

<lfm status="ok" total="109" page="1" perPage="50" totalPages="3">
  ...
</lfm>
Errors




<lfm status="failed">
    <error code="10">Invalid API Key</error>
</lfm>
Errors

The root lfm node has a status of “failed”
and will contain an error code and
message




 <lfm status="failed">
     <error code="10">Invalid API Key</error>
 </lfm>
Errors

The root lfm node has a status of “failed”
and will contain an error code and
message

The possible errors for a method are
listed on it’s documentation page

 <lfm status="failed">
     <error code="10">Invalid API Key</error>
 </lfm>
Common Errors
Common Errors
Invalid format - This service doesn't exist
in that format
Common Errors
Invalid format - This service doesn't exist
in that format

Invalid parameters - Your request is
missing a required parameter
Common Errors
Invalid format - This service doesn't exist
in that format

Invalid parameters - Your request is
missing a required parameter

Invalid API key
Common Errors
Invalid format - This service doesn't exist
in that format

Invalid parameters - Your request is
missing a required parameter

Invalid API key

Invalid method signature supplied
Common Methods
Common Methods
artist.getImages
Common Methods
artist.getImages

album.getTags
Common Methods
artist.getImages

album.getTags

track.search
Common Methods
artist.getImages

album.getTags

track.search

user.getTopArtists
Common Methods
artist.getImages

album.getTags

track.search

user.getTopArtists

geo.getEvents
Method “Types”
Method “Types”
Public - Does what it says on the tin
Method “Types”
Public - Does what it says on the tin

Private - Requires authentication (we’ll
get to that shortly)
Method “Types”
Public - Does what it says on the tin

Private - Requires authentication (we’ll
get to that shortly)

“Enhanced” - Public, but with extra
information if you supply a user,
artist.getInfo is a good example of this
Caveats
Caveats
Send an identifiable user-agent
Caveats
Send an identifiable user-agent

Don’t hammer the API (check the TOS)
Caveats
Send an identifiable user-agent

Don’t hammer the API (check the TOS)

Respect HTTP caching headers
Caveats
Send an identifiable user-agent

Don’t hammer the API (check the TOS)

Respect HTTP caching headers

UTF-8 encoding assumed
Authenticated Calls
Authenticated Calls
Some methods access private data
and require explicit permission
from a user
Authenticated Calls
Some methods access private data
and require explicit permission
from a user
To do this we use an oAuth model,
where a user will grant permission
to an application, in the form of a
session key
Radio
Radio
Radio is an authenticated call,
you’ll need a user session key
Radio
Radio is an authenticated call,
you’ll need a user session key
API-based radio is only available
to subscribers
Radio
Radio is an authenticated call,
you’ll need a user session key
API-based radio is only available
to subscribers
Full documentation for using this
is available at http://last.fm/api/
radio
Radio
Radio is an authenticated call,
you’ll need a user session key
API-based radio is only available
to subscribers
Full documentation for using this
is available at http://last.fm/api/
radio
However, here’s a quick
Tuning
Tuning
POST call, to API root,
method=radio.tune
Tuning
POST call, to API root,
method=radio.tune
The station is in the form of a
Last.fm URL, eg; lastfm://artist/
cher/similarartists
Tuning
POST call, to API root,
method=radio.tune
The station is in the form of a
Last.fm URL, eg; lastfm://artist/
cher/similarartists
Once tuned, you request a playlist
of 5 tracks at a time, with
<playlist version="1" xmlns="http://xspf.org/ns/0/">
    <title>+Cher+Similar+Artists</title>
    <creator>Last.fm</creator>
    <date>2007-11-26T17:34:38</date>
    <link rel="http://www.last.fm/expiry">3600</link>
    <trackList>
        <track>
            <location>http://play.last.fm/ ... .mp3</location>
            <title>Two People (Live)</title>
            <identifier>8212510</identifier>
            <album>Tina Live In Europe</album>
            <creator>Tina Turner</creator>
            <duration>265000</duration>
            <image>http:// ... .jpg</image>
            <extension application="http://www.last.fm">
                 <artistpage>...</artistpage>
                 <albumpage>...</albumpage>
                 <trackpage>...</trackpage>
            </extension>
        </track>
        ...
    </trackList>
</playlist>
How can you use it?
How can you use it?
A few ideas:
How can you use it?
A few ideas:
Rich artist information, stats, bio,
images
How can you use it?
A few ideas:
Rich artist information, stats, bio,
images
Bootstrapping a user’s music taste
on your service
How can you use it?
A few ideas:
Rich artist information, stats, bio,
images
Bootstrapping a user’s music taste
on your service
Catalogue search, artists, albums,
tracks
Hax
Hax
We’ll be around all weekend to
answer API questions
Hax
We’ll be around all weekend to
answer API questions
If we don’t have what you need,
we might be able to add it for you
Hax
We’ll be around all weekend to
answer API questions
If we don’t have what you need,
we might be able to add it for you
Free 1-year subscription to
anyone who demos an app
tomorrow that uses the Last.fm
Want the firehose? We’re
           hiring.
www.last.fm/about/jobs/




 Jonty in the Xbox launch war room @ Last.HQ,
 London
Questions?
Questions?




IRC: #musichackday on
       freenode
Questions?



    Matt
matt@last.fm
 @flaneur


      IRC: #musichackday on
             freenode
Questions?



    Matt
matt@last.fm Michael
 @flaneur michaelc@last.fm
             @eartle
     IRC: #musichackday on
            freenode
Questions?



    Matt
                              Jonty
matt@last.fm Michael      jonty@last.fm
 @flaneur michaelc@last.fm
                             @jonty
             @eartle
     IRC: #musichackday on
            freenode

More Related Content

What's hot

Do Androids Dream Of Algorithmic Playlists
Do Androids Dream Of Algorithmic PlaylistsDo Androids Dream Of Algorithmic Playlists
Do Androids Dream Of Algorithmic PlaylistsMatthew Hawn
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기Heejong Ahn
 
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office HoursIVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office HoursAmazon Web Services Japan
 
Diving into guzzle
Diving into guzzleDiving into guzzle
Diving into guzzleSteven Wade
 
Social Tags and Music Information Retrieval (Part I)
Social Tags and Music Information Retrieval (Part I)Social Tags and Music Information Retrieval (Part I)
Social Tags and Music Information Retrieval (Part I)Paul Lamere
 
Dive into apple music app
Dive into apple music appDive into apple music app
Dive into apple music appTakuro Hanawa
 
RESTFul API Design and Documentation - an Introduction
RESTFul API Design and Documentation - an IntroductionRESTFul API Design and Documentation - an Introduction
RESTFul API Design and Documentation - an IntroductionMiredot
 
Contributing to YUI
Contributing to YUIContributing to YUI
Contributing to YUIDav Glass
 
Александр Веремеенко «Audio in iOS. Tips and tricks» IT talk #31 (Харьков)
Александр Веремеенко «Audio in iOS. Tips and tricks» IT talk #31 (Харьков)Александр Веремеенко «Audio in iOS. Tips and tricks» IT talk #31 (Харьков)
Александр Веремеенко «Audio in iOS. Tips and tricks» IT talk #31 (Харьков)DataArt
 

What's hot (13)

Do Androids Dream Of Algorithmic Playlists
Do Androids Dream Of Algorithmic PlaylistsDo Androids Dream Of Algorithmic Playlists
Do Androids Dream Of Algorithmic Playlists
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
 
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office HoursIVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
IVS CTO Night And Day 2018 Winter - AWS Startup Tech Office Hours
 
Spotify
SpotifySpotify
Spotify
 
Djz exploration
Djz explorationDjz exploration
Djz exploration
 
Music
MusicMusic
Music
 
Diving into guzzle
Diving into guzzleDiving into guzzle
Diving into guzzle
 
Social Tags and Music Information Retrieval (Part I)
Social Tags and Music Information Retrieval (Part I)Social Tags and Music Information Retrieval (Part I)
Social Tags and Music Information Retrieval (Part I)
 
Dive into apple music app
Dive into apple music appDive into apple music app
Dive into apple music app
 
RESTFul API Design and Documentation - an Introduction
RESTFul API Design and Documentation - an IntroductionRESTFul API Design and Documentation - an Introduction
RESTFul API Design and Documentation - an Introduction
 
Contributing to YUI
Contributing to YUIContributing to YUI
Contributing to YUI
 
Александр Веремеенко «Audio in iOS. Tips and tricks» IT talk #31 (Харьков)
Александр Веремеенко «Audio in iOS. Tips and tricks» IT talk #31 (Харьков)Александр Веремеенко «Audio in iOS. Tips and tricks» IT talk #31 (Харьков)
Александр Веремеенко «Audio in iOS. Tips and tricks» IT talk #31 (Харьков)
 
Audio&Video
Audio&VideoAudio&Video
Audio&Video
 

Similar to Last.fm API workshop - Stockholm

Last.fm - Lessons from building the World's largest social music platform
Last.fm - Lessons from building the World's largest social music platform Last.fm - Lessons from building the World's largest social music platform
Last.fm - Lessons from building the World's largest social music platform randomfromtheweb
 
Music Hackday Boston - The Last.fm API
Music Hackday Boston - The Last.fm APIMusic Hackday Boston - The Last.fm API
Music Hackday Boston - The Last.fm APIdavidsingleton
 
Audio Analysis with Spotify's Web API
Audio Analysis with Spotify's Web APIAudio Analysis with Spotify's Web API
Audio Analysis with Spotify's Web APIMark Koh
 
RecordPlug & plugXchange
RecordPlug & plugXchangeRecordPlug & plugXchange
RecordPlug & plugXchangeJimmy Ether
 
API-Driven Development with OpenAPI Specification Testing
API-Driven Development with OpenAPI Specification TestingAPI-Driven Development with OpenAPI Specification Testing
API-Driven Development with OpenAPI Specification TestingNordic APIs
 
Last fm api_overview
Last fm api_overviewLast fm api_overview
Last fm api_overviewyuliang
 
Big Data At Spotify
Big Data At SpotifyBig Data At Spotify
Big Data At SpotifyAdam Kawa
 
Application Programming Interfaces
Application Programming InterfacesApplication Programming Interfaces
Application Programming InterfacesCindy Royal
 
Consistent, Thin and Dumb. UA Mobile 2016.
Consistent, Thin and Dumb. UA Mobile 2016.Consistent, Thin and Dumb. UA Mobile 2016.
Consistent, Thin and Dumb. UA Mobile 2016.UA Mobile
 
SoundCloud API Do:s and Don't:s
SoundCloud API Do:s and Don't:sSoundCloud API Do:s and Don't:s
SoundCloud API Do:s and Don't:sEric Wahlforss
 
SoundCloud API Learnings
SoundCloud API LearningsSoundCloud API Learnings
SoundCloud API LearningsEric Wahlforss
 
The Evolution of Spotify Home Architecture - Qcon 2019
The Evolution of Spotify Home Architecture - Qcon 2019The Evolution of Spotify Home Architecture - Qcon 2019
The Evolution of Spotify Home Architecture - Qcon 2019Karthik Murugesan
 
Extending your own and others' sites with HTML5
Extending your own and others' sites with HTML5Extending your own and others' sites with HTML5
Extending your own and others' sites with HTML5Mark Reeder
 
Building Hypermedia APIs in JavaScript
Building Hypermedia APIs in JavaScriptBuilding Hypermedia APIs in JavaScript
Building Hypermedia APIs in JavaScript3scale
 
Open source software for startups
Open source software for startupsOpen source software for startups
Open source software for startupsvictorneo
 
Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010Ted Husted
 
Harkable Day of Innovation Oct 2013 - Hark in the Park
Harkable Day of Innovation Oct 2013 - Hark in the ParkHarkable Day of Innovation Oct 2013 - Hark in the Park
Harkable Day of Innovation Oct 2013 - Hark in the ParkHarkable
 
How to build desktop apps that help your web app succeed
How to build desktop apps that help your web app succeedHow to build desktop apps that help your web app succeed
How to build desktop apps that help your web app succeedMatthew Ogle
 

Similar to Last.fm API workshop - Stockholm (20)

Last.fm - Lessons from building the World's largest social music platform
Last.fm - Lessons from building the World's largest social music platform Last.fm - Lessons from building the World's largest social music platform
Last.fm - Lessons from building the World's largest social music platform
 
Music Hackday Boston - The Last.fm API
Music Hackday Boston - The Last.fm APIMusic Hackday Boston - The Last.fm API
Music Hackday Boston - The Last.fm API
 
Podcasting101
Podcasting101Podcasting101
Podcasting101
 
Audio Analysis with Spotify's Web API
Audio Analysis with Spotify's Web APIAudio Analysis with Spotify's Web API
Audio Analysis with Spotify's Web API
 
RecordPlug & plugXchange
RecordPlug & plugXchangeRecordPlug & plugXchange
RecordPlug & plugXchange
 
API-Driven Development with OpenAPI Specification Testing
API-Driven Development with OpenAPI Specification TestingAPI-Driven Development with OpenAPI Specification Testing
API-Driven Development with OpenAPI Specification Testing
 
Last fm api_overview
Last fm api_overviewLast fm api_overview
Last fm api_overview
 
Big Data At Spotify
Big Data At SpotifyBig Data At Spotify
Big Data At Spotify
 
Application Programming Interfaces
Application Programming InterfacesApplication Programming Interfaces
Application Programming Interfaces
 
Consistent, Thin and Dumb. UA Mobile 2016.
Consistent, Thin and Dumb. UA Mobile 2016.Consistent, Thin and Dumb. UA Mobile 2016.
Consistent, Thin and Dumb. UA Mobile 2016.
 
SoundCloud API Do:s and Don't:s
SoundCloud API Do:s and Don't:sSoundCloud API Do:s and Don't:s
SoundCloud API Do:s and Don't:s
 
SoundCloud API Learnings
SoundCloud API LearningsSoundCloud API Learnings
SoundCloud API Learnings
 
The Evolution of Spotify Home Architecture - Qcon 2019
The Evolution of Spotify Home Architecture - Qcon 2019The Evolution of Spotify Home Architecture - Qcon 2019
The Evolution of Spotify Home Architecture - Qcon 2019
 
Extending your own and others' sites with HTML5
Extending your own and others' sites with HTML5Extending your own and others' sites with HTML5
Extending your own and others' sites with HTML5
 
Building Hypermedia APIs in JavaScript
Building Hypermedia APIs in JavaScriptBuilding Hypermedia APIs in JavaScript
Building Hypermedia APIs in JavaScript
 
Open source software for startups
Open source software for startupsOpen source software for startups
Open source software for startups
 
Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010Open source-secret-sauce-rit-2010
Open source-secret-sauce-rit-2010
 
Harkable Day of Innovation Oct 2013 - Hark in the Park
Harkable Day of Innovation Oct 2013 - Hark in the ParkHarkable Day of Innovation Oct 2013 - Hark in the Park
Harkable Day of Innovation Oct 2013 - Hark in the Park
 
Music hack day
Music hack day Music hack day
Music hack day
 
How to build desktop apps that help your web app succeed
How to build desktop apps that help your web app succeedHow to build desktop apps that help your web app succeed
How to build desktop apps that help your web app succeed
 

Recently uploaded

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 

Recently uploaded (20)

Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 

Last.fm API workshop - Stockholm

  • 1. Last.fm API Music Hack Day • Stockholm 30 January 2010
  • 3. What’s Last.fm? We do lots of things:
  • 4. What’s Last.fm? We do lots of things: Charts, recommendations, catalogue, personalised radio, metadata, artists similarity, tags, images, events, groups, venues, friends, journals, shoutboxes
  • 5. What’s Last.fm? We do lots of things: Charts, recommendations, catalogue, personalised radio, metadata, artists similarity, tags, images, events, groups, venues, friends, journals, shoutboxes “The social music revolution”
  • 6. What’s Last.fm? We do lots of things: Charts, recommendations, catalogue, personalised radio, metadata, artists similarity, tags, images, events, groups, venues, friends, journals, shoutboxes “The social music revolution” The definitive online home for your music taste
  • 7.
  • 8.
  • 9.
  • 10.
  • 12. Scrobbling (Not scribbling, scobbing, snowballing or scrabbling. These are the risks of made-up words.)
  • 13. Scrobbling (Not scribbling, scobbing, snowballing or scrabbling. These are the risks of made-up words.) scrobble: skrob· bul (ˈskrɒbəll) [verb] To automatically add the tracks you play to your Last.fm profile with a piece of software called a Scrobbler
  • 14.
  • 15.
  • 16.
  • 18. Whole lotta scrobblin’ 571 scrobbles in the last second
  • 19. Whole lotta scrobblin’ 571 scrobbles in the last second 34,260 scrobbles in the last minute
  • 20. Whole lotta scrobblin’ 571 scrobbles in the last second 34,260 scrobbles in the last minute 2,055,600 scrobbles in the last hour
  • 21. Whole lotta scrobblin’ 571 scrobbles in the last second 34,260 scrobbles in the last minute 2,055,600 scrobbles in the last hour 24,667,200 scrobbles in the last
  • 22. Whole lotta scrobblin’ 571 scrobbles in the last second 34,260 scrobbles in the last minute 2,055,600 scrobbles in the last hour 24,667,200 scrobbles in the last That's over 38,085,313,884 tracks scrobbled since 2003. About 297,089 years of music in total.
  • 23.
  • 25. API 2.0 A REST-style HTTP API, that you (might) know and love (modelled on Flickr)
  • 26. API 2.0 A REST-style HTTP API, that you (might) know and love (modelled on Flickr) Clients available in PHP, Ruby, Python, C++
  • 27. API 2.0 A REST-style HTTP API, that you (might) know and love (modelled on Flickr) Clients available in PHP, Ruby, Python, C++ Unrestricted non-commercial use
  • 29. Documentation Complete documentation can be found at http://last.fm/api
  • 30. Documentation Complete documentation can be found at http://last.fm/api Each method has a page that details is required and optional parameters
  • 31. Documentation Complete documentation can be found at http://last.fm/api Each method has a page that details is required and optional parameters It covers everything here in greater depth, and is generally much more
  • 32. What does it offer?
  • 33. What does it offer? One hundred or so methods to access information about:
  • 34. What does it offer? One hundred or so methods to access information about: Artists, albums, tracks, tags, users, events, venues, groups, radio
  • 35. What does it offer? One hundred or so methods to access information about: Artists, albums, tracks, tags, users, events, venues, groups, radio Authenticated access to private data
  • 36. album.addTags, album.getInfo, album.getTags, album.removeTag, album.search, artist.addTags, artist.getEvents, artist.getImages, artist.getInfo, artist.getPastEvents, artist.getPodcast, artist.getShouts, artist.getSimilar, artist.getTags, artist.getTopAlbums, artist.getTopFans, artist.getTopTags, artist.getTopTracks, artist.removeTag, artist.search, artist.share, artist.shout, auth.getMobileSession, auth.getSession, auth.getToken, event.attend, event.getAttendees, event.getInfo, event.getShouts, event.share, event.shout, geo.getEvents, geo.getMetroArtistChart, geo.getMetroTrackChart, geo.getMetroUniqueArtistChart, geo.getMetroUniqueTrackChart, geo.getMetroWeeklyChartlist, geo.getTopArtists, geo.getTopTracks, group.getMembers, group.getWeeklyAlbumChart, group.getWeeklyArtistChart, group.getWeeklyChartList, group.getWeeklyTrackChart, library.addAlbum, library.addArtist, library.addTrack, library.getAlbums, library.getArtists, library.getTracks, playlist.addTrack, playlist.create, playlist.fetch, radio.getPlaylist, radio.tune, tag.getSimilar, tag.getTopAlbums, tag.getTopArtists, tag.getTopTags, tag.getTopTracks, tag.getWeeklyArtistChart, tag.getWeeklyChartList, tag.search, tasteometer.compare, track.addTags, track.ban, track.getInfo, track.getSimilar, track.getTags, track.getTopFans, track.getTopTags, track.love, track.removeTag, track.search, track.share, user.getEvents, user.getFriends, user.getInfo, user.getLovedTracks, user.getNeighbours, user.getPastEvents, user.getPlaylists, user.getRecentStations, user.getRecentTracks, user.getRecommendedArtists, user.getRecommendedEvents, user.getShouts, user.getTopAlbums, user.getTopArtists, user.getTopTags, user.getTopTracks, user.getWeeklyAlbumChart, user.getWeeklyArtistChart, user.getWeeklyChartList, user.getWeeklyTrackChart,
  • 37. Or in an organised fashion...
  • 39. Who’s using it? 1,000s of 3rd party developers every day
  • 40. Who’s using it? 1,000s of 3rd party developers every day Checkout http://build.last.fm for examples, from forum sigs to complex apps
  • 41. Who’s using it? 1,000s of 3rd party developers every day Checkout http://build.last.fm for examples, from forum sigs to complex apps Microsoft built our Xbox 360 app using only our public API
  • 42. Who’s using it? 1,000s of 3rd party developers every day Checkout http://build.last.fm for examples, from forum sigs to complex apps Microsoft built our Xbox 360 app using only our public API Squeezebox, Sonos and other
  • 43. Current Last.fm traffic (December 2009) Web requests to www.last.fm API requests (official Last.fm apps) API requests (3rd party) 37% 45% 17%
  • 45. Whole lotta scrobblers Hype Machine, Spotify, Songbird, Winamp, iTunes and 100s more
  • 46. Whole lotta scrobblers Hype Machine, Spotify, Songbird, Winamp, iTunes and 100s more People have found ways to scrobble Youtube, and even their vinyl collection
  • 47. Whole lotta scrobblers Hype Machine, Spotify, Songbird, Winamp, iTunes and 100s more People have found ways to scrobble Youtube, and even their vinyl collection You? Check out our scrobbling API (aka ‘submissions API’) too
  • 48. Whole lotta scrobblers Hype Machine, Spotify, Songbird, Winamp, iTunes and 100s more People have found ways to scrobble Youtube, and even their vinyl collection You? Check out our scrobbling API (aka ‘submissions API’) too Question: as a developer what would make scrobbling easier /
  • 51. Using the API You’ll need... An API Key (a 32 char unique identifier)
  • 52. Using the API You’ll need... An API Key (a 32 char unique identifier) A way to call the API (use a supported client, or plain old wget, up to you)
  • 53. Using the API You’ll need... An API Key (a 32 char unique identifier) A way to call the API (use a supported client, or plain old wget, up to you) A way to parse the response (this is where clients can come in handy)
  • 54. Getting an API Key Please don’t use the example key
  • 55. Getting an API Key To get one you’ll need a Last.fm account, so if you don’t have one you’ll need to join (fast, free) Please don’t use the example key
  • 56. Getting an API Key To get one you’ll need a Last.fm account, so if you don’t have one you’ll need to join (fast, free) Set it up at http://last.fm/api/account Please don’t use the example key
  • 57. Getting an API Key To get one you’ll need a Last.fm account, so if you don’t have one you’ll need to join (fast, free) Set it up at http://last.fm/api/account Only one API Key per account Please don’t use the example key
  • 58. Anatomy of an API call
  • 59. Anatomy of an API call http://ws.audioscrobbler.com/2.0/? method=user.getinfo&api_key=XXX& user=underpangs
  • 60. Anatomy of an API call http://ws.audioscrobbler.com/2.0/? method=user.getinfo&api_key=XXX& user=underpangs Root URL + Method + API Key + method specific parameters (check the method documentation)
  • 61. Anatomy of a response <lfm status="ok"> <user> <id>1021212</id> <name>underpangs</name> <realname>David Singleton</realname> <url>http://www.last.fm/user/underpangs</url> <image>http://userserve-ak.last.fm/serve/126/13884831.jpg</ image> <country>UK</country> <age>25</age> <gender>m</gender> <subscriber>1</subscriber> <playcount>45519</playcount> <playlists>12</playlists> <bootstrap>0</bootstrap> <registered unixtime="1073173934">2004-01-03 23:52</registered> </user> </lfm> Every response is wrapped in a root <lfm> node
  • 63. Output Formats By default all services output XML are also available as JSON
  • 64. Output Formats By default all services output XML are also available as JSON To switch, add format=json to your call
  • 65. Output Formats By default all services output XML are also available as JSON To switch, add format=json to your call Some services offer even more output formats, check the method docs
  • 66. Output Formats By default all services output XML are also available as JSON To switch, add format=json to your call Some services offer even more output formats, check the method docs In particular, some can output RSS, XSPF, iCal and JSONP
  • 67. JSON Output { "user": { "id": "1021212", "name": "underpangs", "realname": "David Singleton", [SNIP!] "registered": { "#text": "2004-01-03 23:52", "unixtime": "1073173934" } } } Note that for elements with both a text child and attributes, that the text is expressed as the #text attribute
  • 68. Paginated methods <lfm status="ok" total="109" page="1" perPage="50" totalPages="3"> ... </lfm>
  • 69. Paginated methods Some methods can return a lot of results, we limit them and let you page through <lfm status="ok" total="109" page="1" perPage="50" totalPages="3"> ... </lfm>
  • 70. Paginated methods Some methods can return a lot of results, we limit them and let you page through These services will generally accept a limit (amount per page) and page offset. The root node will also give you the total number of results and pages <lfm status="ok" total="109" page="1" perPage="50" totalPages="3"> ... </lfm>
  • 71. Errors <lfm status="failed"> <error code="10">Invalid API Key</error> </lfm>
  • 72. Errors The root lfm node has a status of “failed” and will contain an error code and message <lfm status="failed"> <error code="10">Invalid API Key</error> </lfm>
  • 73. Errors The root lfm node has a status of “failed” and will contain an error code and message The possible errors for a method are listed on it’s documentation page <lfm status="failed"> <error code="10">Invalid API Key</error> </lfm>
  • 75. Common Errors Invalid format - This service doesn't exist in that format
  • 76. Common Errors Invalid format - This service doesn't exist in that format Invalid parameters - Your request is missing a required parameter
  • 77. Common Errors Invalid format - This service doesn't exist in that format Invalid parameters - Your request is missing a required parameter Invalid API key
  • 78. Common Errors Invalid format - This service doesn't exist in that format Invalid parameters - Your request is missing a required parameter Invalid API key Invalid method signature supplied
  • 86. Method “Types” Public - Does what it says on the tin
  • 87. Method “Types” Public - Does what it says on the tin Private - Requires authentication (we’ll get to that shortly)
  • 88. Method “Types” Public - Does what it says on the tin Private - Requires authentication (we’ll get to that shortly) “Enhanced” - Public, but with extra information if you supply a user, artist.getInfo is a good example of this
  • 91. Caveats Send an identifiable user-agent Don’t hammer the API (check the TOS)
  • 92. Caveats Send an identifiable user-agent Don’t hammer the API (check the TOS) Respect HTTP caching headers
  • 93. Caveats Send an identifiable user-agent Don’t hammer the API (check the TOS) Respect HTTP caching headers UTF-8 encoding assumed
  • 95. Authenticated Calls Some methods access private data and require explicit permission from a user
  • 96. Authenticated Calls Some methods access private data and require explicit permission from a user To do this we use an oAuth model, where a user will grant permission to an application, in the form of a session key
  • 97. Radio
  • 98. Radio Radio is an authenticated call, you’ll need a user session key
  • 99. Radio Radio is an authenticated call, you’ll need a user session key API-based radio is only available to subscribers
  • 100. Radio Radio is an authenticated call, you’ll need a user session key API-based radio is only available to subscribers Full documentation for using this is available at http://last.fm/api/ radio
  • 101. Radio Radio is an authenticated call, you’ll need a user session key API-based radio is only available to subscribers Full documentation for using this is available at http://last.fm/api/ radio However, here’s a quick
  • 102. Tuning
  • 103. Tuning POST call, to API root, method=radio.tune
  • 104. Tuning POST call, to API root, method=radio.tune The station is in the form of a Last.fm URL, eg; lastfm://artist/ cher/similarartists
  • 105. Tuning POST call, to API root, method=radio.tune The station is in the form of a Last.fm URL, eg; lastfm://artist/ cher/similarartists Once tuned, you request a playlist of 5 tracks at a time, with
  • 106. <playlist version="1" xmlns="http://xspf.org/ns/0/"> <title>+Cher+Similar+Artists</title> <creator>Last.fm</creator> <date>2007-11-26T17:34:38</date> <link rel="http://www.last.fm/expiry">3600</link> <trackList> <track> <location>http://play.last.fm/ ... .mp3</location> <title>Two People (Live)</title> <identifier>8212510</identifier> <album>Tina Live In Europe</album> <creator>Tina Turner</creator> <duration>265000</duration> <image>http:// ... .jpg</image> <extension application="http://www.last.fm"> <artistpage>...</artistpage> <albumpage>...</albumpage> <trackpage>...</trackpage> </extension> </track> ... </trackList> </playlist>
  • 107. How can you use it?
  • 108. How can you use it? A few ideas:
  • 109. How can you use it? A few ideas: Rich artist information, stats, bio, images
  • 110. How can you use it? A few ideas: Rich artist information, stats, bio, images Bootstrapping a user’s music taste on your service
  • 111. How can you use it? A few ideas: Rich artist information, stats, bio, images Bootstrapping a user’s music taste on your service Catalogue search, artists, albums, tracks
  • 112. Hax
  • 113. Hax We’ll be around all weekend to answer API questions
  • 114. Hax We’ll be around all weekend to answer API questions If we don’t have what you need, we might be able to add it for you
  • 115. Hax We’ll be around all weekend to answer API questions If we don’t have what you need, we might be able to add it for you Free 1-year subscription to anyone who demos an app tomorrow that uses the Last.fm
  • 116. Want the firehose? We’re hiring. www.last.fm/about/jobs/ Jonty in the Xbox launch war room @ Last.HQ, London
  • 119. Questions? Matt matt@last.fm @flaneur IRC: #musichackday on freenode
  • 120. Questions? Matt matt@last.fm Michael @flaneur michaelc@last.fm @eartle IRC: #musichackday on freenode
  • 121. Questions? Matt Jonty matt@last.fm Michael jonty@last.fm @flaneur michaelc@last.fm @jonty @eartle IRC: #musichackday on freenode