Nov
19
Basandomi su un tutorial di Scott Gu, provo a realizzare una app in SL in grado di interrogare un web service pubblico e poi a visualizzare il risultato in modo carino.
Last.fm e’ la famosa community musicale tramite cui ognuno puo’ crearsi un profilo in base ai propri gusti musicali e interagire con gli altri … bla bla … insomma un perfetto esempio di applicazione web 2.0; tra le altre cose espone le proprie API come web services e utilizzero’ proprio una chiamata al loro web service per visualizzare quelli che sono i miei brani preferiti, invocando il metodo library.gettracks a cui appendo il mio username: http://ws.audioscrobbler.com/2.0/?method=library.gettracks
&api_key=b25b959554ed76058ac220b7b2e0a026&user=cdiscla
Nel mio progetto SL in C# creo una class contenente i campi che voglio prendere dal WS e visualizzare nella mia app SL.
namespace WS_LastFM_SLight
{
public class lastFM
{
public string name { get; set; }
public string url {get;set;}
public string image { get; set; }
public string author { get; set; }
public int playcount { get; set; }
}
}
All’avvio dell’applicazione SL richiamo il Web Service di last.fm:
string sWSUrl = “http://ws.audioscrobbler.com/2.0/?method=library.gettracks&api_key=b25b959554ed76058ac220b7b2e0a026&user=cdiscla”;
WebClient wsFM = new WebClient();
wsFM.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wsFM_DownloadCompleted);
wsFM.DownloadStringAsync(new Uri(sWSUrl));
Nella gestione dell’evento DownloadStringCompletedEventHandler avviene l’intervento di Linq:
private void wsFM_DownloadCompleted(System.Object sender, DownloadStringCompletedEventArgs e)
{
if(e.Error==null)
{
string result=e.Result;
DisplayTracks(result);
}
}
private void DisplayTracks(string sTracks)
{
XDocument xmlTracks = XDocument.Parse(sTracks);
//
var t = from track in xmlTracks.Descendants("track")
where track.Element("image")!=null &&
track.Element("image").Attribute("size").Value.Equals("small")
select new lastFM
{
name=((string)track.Element("name").Value).Trim(),
url = ((string)track.Element("url").Value).Trim(),
image = ((string)track.Element("image").Value),
playcount= (Convert.ToInt16(track.Element("playcount").Value)),
author=((string)track.Element("artist").Element("name").Value)
};
lastFMGrid.ItemsSource = t;
}
Il risultato puo’ essere visualizzato qui
I sorgenti, invece, sono qui.
Il fatto e’ che il tutto non e’ propriamente bello da vedere, nel prossimo articolo su SL cerchero’ di aggiustarlo esteticamente.