Per tutti i possessori di una Xbox360 come me, vi segnalo questo servizio gentilmente offerto da Duncan Mackenzie disponibile sia come Web Service:
http://duncanmackenzie.net/services/XboxInfo.asmx
che come Url per un approccio REST:
http://duncanmackenzie.net/services/GetXboxInfo.aspx?GamerTag={GamerTag}
Personalmente non sono riuscito a far funzionare il webservice quindi ho usato il secondo Url per costruire una semplice interfaccia per la GamerTag:
Recuperiamo i dati dal servizio in maniera asincrona sfruttando la classe WebClient:
1: public void RequestXmlGamerTag(string gamerTag)
2: {
3: string url = string.Format("http://duncanmackenzie.net/services/GetXboxInfo.aspx?GamerTag={0}", gamerTag);
4: WebClient webClient = new WebClient();
5: webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
6: webClient.DownloadStringAsync(new Uri(url));
7: }
Alla fine del download, se tutto è andato a buon fine e non ci sono errori, parserizziamo la stringa ritornata e usiamo l’oggetto creato come DataContext per l’interfaccia:
1: void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
2: {
3: if (e.Error == null)
4: {
5: XboxInfo info = loadGamerTag(e.Result);
6: this.DataContext = info;
7: }
8: else
9: {
10: //Visualizzo messaggio d'errore...
11: }
12: }
parserizziamo l’xml di risposta usando un pò di LINQ:
1: private XboxInfo loadGamerTag(string xmlGamerTag)
2: {
3: XDocument xDoc = XDocument.Parse(xmlGamerTag);
4: XboxInfo gamer = (from XboxInfo in xDoc.Descendants("XboxInfo")
5: select new XboxInfo {
6: PresenceInfo = new PresenceInfo()
7: {
8: Valid = (bool)XboxInfo.Element("PresenceInfo").Element("Valid"),
9: LastSeen = (DateTime)XboxInfo.Element("PresenceInfo").Element("LastSeen"),
10: Info = (string)XboxInfo.Element("PresenceInfo").Element("Info"),
11: Info2 = (string)XboxInfo.Element("PresenceInfo").Element("Info2"),
12: Online = (bool)XboxInfo.Element("PresenceInfo").Element("Online"),
13: StatusText = (string)XboxInfo.Element("PresenceInfo").Element("StatusText"),
14: Title = (string)XboxInfo.Element("PresenceInfo").Element("Title")},
15: Gamertag = (string)XboxInfo.Element("Gamertag"),
16: ProfileUrl = (string)XboxInfo.Element("ProfileUrl"),
17: TileUrl = (string)XboxInfo.Element("TileUrl"),
18: Country = (string)XboxInfo.Element("Country"),
19: Reputation = (double)XboxInfo.Element("Reputation"),
20: Bio = (string)XboxInfo.Element("Bio"),
21: Location = (string)XboxInfo.Element("Location"),
22: ReputationImageUrl = (string)XboxInfo.Element("ReputationImageUrl"),
23: GamerScore = (int)XboxInfo.Element("GamerScore"),
24: Zone = (string)XboxInfo.Element("Zone"),
25:
26: RecentGames = (
27: from XboxUserGameInfo in XboxInfo.Element("RecentGames").Descendants("XboxUserGameInfo")
28: select new XboxUserGameInfo
29: {
30: Game = new XboxGameInfo()
31: {
32: Name = (string)XboxUserGameInfo.Element("Game").Element("Name"),
33: Image32Url = (string)XboxUserGameInfo.Element("Game").Element("Image32Url"),
34: Image64Url = (string)XboxUserGameInfo.Element("Game").Element("Image64Url"),
35: TotalAchievements = (int)XboxUserGameInfo.Element("Game").Element("TotalAchievements"),
36: TotalGamerScore = (int)XboxUserGameInfo.Element("Game").Element("TotalGamerScore")
37: },
38: Achievements = (int)XboxUserGameInfo.Element("Achievements"),
39: GamerScore = (int)XboxUserGameInfo.Element("GamerScore"),
40: DetailsURL = (string)XboxUserGameInfo.Element("DetailsURL"),
41: LastPlayed = (DateTime)XboxUserGameInfo.Element("LastPlayed")
42: }).ToList<XboxUserGameInfo>()
43: }).First();
44:
45: return gamer;
46: }
E il gioco è fatto!!! Ora non resta che costruire un’interfaccia grafica accattivante per la nostra gamerTag!!
Ah, per chi volesse una sfida a TopSpin3 o a qualche altro gioco aggiungetemi pure, il mio gamertag è Sullivan80!