14 October 2007

Groovy Baby! - Oder wie man last.fm web services integriert

Groovy bereitet auch mir seit kurzem sehr viel Spass. Ein Beispiel wieso das Arbeiten mit Groovy Spass machen kann, möchte ich an dieser Stelle kurz (mit der Betonung auf kurz) anbringen. Last.fm stellt ein paar Webservices zur Verfügung, mit welchem Anwender wie ich, ihre Profil und Musikdaten abfragen können. Nachfolgend seht ihr wie man mittels Groovy den Webservice anspricht und die Response auf triviale Weise ausliest.

Die Response des Webservice sieht bspw. so aus.


<topartists user="sa303" type="overall">
<artist>
<name>Ellen Allien</name>
<mbid>2ff63f00-0954-4b14-9007-e19b822fc8b2</mbid>
<playcount>246</playcount>
<rank>1</rank>
<url>http://www.last.fm/music/Ellen+Allien</url>
<thumbnail>
http://userserve-ak.last.fm/serve/50/16045.jpg
</thumbnail>
<image>
http://userserve-ak.last.fm/serve/160/16045.jpg
</image>
</artist>
<artist>
<name>Ein anderer Musiker</name>
<mbid>2ff63f00-0954-4b14-9007-e19b822fc8b2</mbid>
<playcount>246</playcount>
<rank>1</rank>
<url>http://www.last.fm/music/Ellen+Allien</url>
<thumbnail>
http://userserve-ak.last.fm/serve/50/16045.jpg
</thumbnail>
<image>
http://userserve-ak.last.fm/serve/160/16045.jpg
</image>
</artist>
</topartists>



Der nachfolgende Groovy Code "parst" die Response und verarbeitet diese mittels dem Groovy XmlSlurper.


import java.net.URL;

def target = 'http://ws.audioscrobbler.com/1.0/user/sa303/topartists.xml'
def stream = new URL(target).openStream();
def topartists = new XmlSlurper().parse(stream)

topartists.artist.each{
println "${it.rank} - ${it.name} (${it.playcount} mal gehört)"
}


Und schon ist die Top 100 meiner Lieblings Musiker auf der Console ersichtlich. Und die Implementation der Sache kostete mich gerade mal 3 Minuten :). Das ist Groovy.