h1

Musik Daten per LastFM API in Python

September 30, 2008

Kennt jemand LastFM nicht? Das ist ein US-Radiosender, und nebenbei die wohl größte Internet-Musik-Community. Kennt jemand APIs nicht? Das sind Programmierschnittstellen, die bestimmte Dienste für Programmierer zu Verfügung stellen. So, da jetzt alles geklärt ist, will ich kurz erläutern wie man solche APIs in Python benutzt, und mit diesem Beispiel, wie man die Informationen zu einem bestimmten Album eines Künstlers rausfindet.

# Lastfm Api
# This class provides methods to get music information
# as well as general lastfm api access
# we use urllib and xml.dom.minidom to parse the information
import urllib2

import xml.dom.minidom

class lastfmApi():
  def __init__(self):
    self.apiUrl = 'http://ws.audioscrobbler.com/2.0/'
    self.apiKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    self.apiString = self.apiUrl + '?api_key=' + self.apiKey + '&method='

  def getXml(self, url):
    url = url.replace(' ','%20')
    return xml.dom.minidom.parseString(urllib2.urlopen(url).read())

  def getAlbumId(self, interpreter, album):
    # Build Api Request url e.g.
    # http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=xxxxxxxxxxxxxxxxxxxxxx&artist=Cher&album=Believe
    api_method = 'album.getInfo'
    api_interpreter = '&artist=' + interpreter
    api_album = '&album=' + album
    url = self.apiString + api_method + api_interpreter + api_album
    #Process xml
    doc = self.getXml(url)
    return doc.getElementsByTagName('id')[0].childNodes[0].data


  def getAlbumPlaylist(self, interpreter, album):
    albumId = self.getAlbumId(interpreter, album)
    api_method = 'playlist.fetch'
    api_playlist = '&playlistURL=lastfm://playlist/album/' + albumId
    url = self.apiString + api_method + api_playlist
    # Process xml
    doc = self.getXml(url)
    tracksXml = doc.getElementsByTagName('title')
    # Collect all titles in a list
    songlist = [title.childNodes[0].data for title in tracksXml]
    # Delete first element
    print songlist
    return songlist[1:]

Der Code erklärt sich größtenteils von selbst, es werden die Urls zusammengefügt und der XML Code verarbeitet. Die Funktion getXML kann man eigentlich für alles benutzen.

Nun könnt ihr Daten folgendermaßen abfragen:

>>> import lastfm_api as lastfm
>>> api = lastfm.lastFmApi()
>>> api = lastfm.lastfmApi()
>>> api.getAlbumPlaylist(‚The Cranberries‘,’Wake up and smell the coffee‘)
[u’The Cranberries – Wake Up and Smell the Coffee‘, u’Never Grow Old‘, u’Analyse‘, u’Time Is Ticking Out‘, u’Dying Inside‘, u’This Is The Day‘, u’The Concept‘, ….., u’Every Morning‘, u’Do You Know‘, u’Carry On‘, u’Chocolate Brown‘, u’dreams (live in paris)‘, u’promises (live in paris)‘, u’In the Ghetto (Non LP Version)‘]

Weiterführende Infos gibt es hier: http://www.lastfm.de/api

7 Kommentare

  1. Sieht nett aus und ist es auch. Durfte ja dein schönes ydl schon öfter benutzen😀
    Tatsächlich hab ich ydl gestern zufällig benutzt weil ich einen Song brauchte, zudem ich den Text analysieren musste (auf Englisch😦 ^^ ).


  2. Last.fm ein Radiosender und nebenbei eine Musik-Community? Haarsträubend falsche Definition. Vielleicht doch beim Programmieren bleiben, wenn es zum Sinn erfassenden Lesen nicht reicht.


  3. Okay ein in den USA stark verbreitetes Internetradio meinetwegen – danke für die Info, aber das nächste mal bitte beim Lesen bleiben, wenn es für freundlichere Kommentare nicht reicht.


  4. Nun, wenn eine Beschreibung den Kern der Sache klar verfehlt, dann kann man auch klare Worte finden.

    „Last.fm ist ein Internetradio auf Basis von sozialer Software („personalised online radio station“), das entwickelt wurde, um Nutzern auf Basis ihrer Hörgewohnheiten neue Musik, Menschen mit ähnlichem Musikgeschmack und Konzerte in ihrer Umgebung empfehlen zu können.“ (Quelle: Wikipedia)


  5. Erstens mal ist in dem Artikel der ‚Kern der Sache‘ nicht, was last.fm denn nun genau ist, sondern wie man eigentlich unschwer erkennen sollte, die Python Schnittstelle zu last.fm. Das erkennt man schon alleine daran, dass der Python Code den größten Teil des Artikels ausmacht.

    Und zweitens rechtfertig ein Fehler in einer Beschreibung von last.fm noch lange kein derart unsachlichen Kommentar oder hat das:
    „Vielleicht doch beim Programmieren bleiben, wenn es zum Sinn erfassenden Lesen nicht reicht.“
    irgendetwas mit dem Thema des Artikels zu tun? Ich denke jeder darf mal so einen Fehler machen, es wäre Fatal wenn man nur das tun würde, was man 100%ig kann – Dann würde man garnichts mehr tun…


  6. Um mich in deiner hochgestochenen Sprache auszudrücken: Du befindest dich hier auf einem virtuellen Territorium des lockeren, gemeinschaftlichen Wissensaustausches, anderen Personen gegenüber verbal aggressive Kommentare sind hier unerwünscht.
    Also unterlasse das bitte, achja, ich verwette nebenbei übrigens meinen allerwertesten, dass dich programmieren nicht die Bohne interessiert und du hier nur den Besserwisser spielen willst, was ich persönlich total billig finde. Ich hoffe du hattest deinen Spaß.


  7. Stimmt, Programmieren interessiert mich nicht. Aber Musik und die Möglichkeiten des Konsums via Internet interessieren mich. Und da habe ich wenig Verständnis, wenn man falsche Infos verstreut. Vor allem weil für Verständnis der Funktionsweise von Last.fm ja kein Universitätsabschluss notwendig ist. Und dies habe ich dir berechtigterweise vorgeworfen. Das hat nichts mit aggressiven Verhalten zu tun.



Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: