Archive for März, 2010
[Release] SharpConnect 1.0.0
Die erste Version von SharpConnect (einer Bibliothek zum Zugriff auf Web-APIs, z.B. dem von Last.FM) steht nun der Öffentlichkeit zur Verfügung. Und zwar auf der neu eingerichteten Wiki-Seite:
[Proof of Concept] SharpConnect
Nachdem ich in den letzten Tagen an einem Konzept getüftelt habe, wie man verschiedene webbasierte APIs einfach zugänglich machen könnte, möchte ich nun eine beispielhafte Implementierung vorführen: SharpConnect. (Download DLL) Und das Ziel meiner Wahl ist natürlich Last.FM, was auch sonst. Wohlgemerkt gehe ich hier nicht auf die Umsetzung ein, nur auf die Verwendung.
Es stellt sich zuerst die Frage: Was wollen wir? Ich für meinen Teil würde z.B. gerne wissen, wo und wann Kasabian demnächst Konzerte geben (Nicht, dass die Chance bestünde, das München auf der Liste wäre, aber dennoch…), und somit böte sich der API-Aufruf artist.getEvents zur näheren Betrachtung an: Welche Parameter hat er, wie muss er ausgeführt werden und wie sieht die Antwort aus?
Wir sehen, dass es zwei Parameter gibt (“artist” und “api_key”, beide benötigt) und dass die Antwort ein XML-Dokument ist, dass die Wurzel “lfm” hat, anschließend den Knoten “events” und viele Kindknoten “event”, die die einzelnen Konzerte enthalten. Diese wiederum besitzen Werte für die auftretenden Künstler, den Ort, die Zeit, Ticketverkäufe, etc… Das Beispiel von der API-Seite:
<events artist="Cher" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" total="4">
<event>
<id>599858</id>
<title>Cher</title>
<artists>
<artist>Cher</artist>
<headliner>Cher</headliner>
</artists>
<venue>
<name>The Colosseum at Caesars Palace</name>
<location>
<city>Las Vegas</city>
<country>United States</country>
<street></street>
<postalcode></postalcode>
<geo:point>
<geo:lat>36.2265501474709</geo:lat>
<geo:long>-115.0048828125</geo:long>
</geo:point>
<timezone>PST</timezone>
</location>
<url>http://www.last.fm/venue/8841108</url>
</venue>
<startDate>Sat, 16 Aug 2008</startDate>
<startTime>19:30</startTime>
<description></description>
<image size="small">...</image>
<image size="medium">...</image>
<image size="large">...</image>
<attendance>42</attendance>
<reviews>0</reviews>
<tag>lastfm:event=669027</tag>
<url>http://www.last.fm/event/599858</url>
<website>http://...</website>
<tickets>
<ticket supplier="...">http://...</ticket>
...
</tickets>
</event>
...
</events>
[Concept] Generischer API-Zugriff
Eines der größten Hindernisse beim Zugriff auf die Cloud, also die riesigen Datenmengen, die im Internet schweben, sowie die darauf basierenden Dienste, ist die Tatsache, dass die vielen verfügbaren APIs oftmals grundsätzlich verschieden sind. Dementsprechend ist es schwer, die eigene Arbeit, das eigene Wissen auf unterschiedliche Dienste/WebServices/APIs anzuwenden oder zu recyclen. Man beginnt meist wieder bei Null – und sei es bloß, die bereits fertige Implementierung eines anderen zu verstehen.
Mein Problem begann beim Last.FM-Webservice: wie kann ich dessen Funktion möglichst einfach zugänglich machen, ohne Flexibilität zu verlieren? Ich wollte nicht auf eine bereits bestehende Lösung zurückgreifen, da dort womöglich viel mehr angeboten als letztendlich benötigt wird; genauso sollte keine neue, nur für Last.FM nutzbare Implementierung geschaffen werden, sei sie auch noch so einfach zu verwenden – irgendwann müsste dann doch wieder von vorne begonnen werden… Eine neue Abstraktionsschicht musste her, eine vereinfachte, für den Otto-Normal-Programmierer sinnvolle Minimal-Version von WSDL quasi. Etwas, das leicht zu erlernen und zu verwenden ist, ohne unnötigen Ballast.