Passa al contingut principal

Api de World of Warcraft, manipular un servicio Json

Api de World of Warcraft, manipular un servicio Json:
De Wow a Wp7 con Json
World of Warcraft, el exitoso mundo persistente de Blizzard, con sus más de 11 millones de jugadores, se ha convertido en el modelo a seguir para cualquier MMO.
En el artículo anterior de esta mini serie, hice un ejemplo de invocar a un servicio REST que transmite información en Json. De una forma asíncrona, en C#, construí dos métodos que me devolvían los datos de forma bruta.
Ahora voy a mostrar cómo resolví el cargar los datos en mi aplicación. Parseando la cadena Json y utilizando una librería gratuita muy útil para realizar estas operaciones de forma muy sencilla.

Creando estructuras


Quiero hacer la recuperación de un personaje del WoW y de sus estadísticas principales. Mirando la documentación de la API veo que la llamada podría ser algo tal que así,
string uri = “http://eu.battle.net/api/wow/character/los-errantes/bendemfalar?fields=stats”;
 
Osea, me traigo del reino “Los Errantes”, el personaje “Bendemfalar” y sus estadísticas. Pero, claro, esta información me va a llegar en bruto y lo que yo quiero es guardarla para poder ser utilizada más adelante. Para lo cual me hago dos clases que van a adoptar el papel de POCO; es decir, meros repositorios de información.
public class Personaje
 {
 public double lastModified { get; set; }
 public String name { get; set; }
 public String realm { get; set; }
 public int Clase { get; set; }
 public int gender { get; set; }
 public int level { get; set; }
 public int achievementPoints { get; set; }
 }
 
 public class Estadistica
 {
 public double health { get; set; }
 public string powerType { get; set; }
 public double power { get; set; }
 public double str { get; set; }
 public double agi { get; set; }
 public double sta { get; set; }
 public double intelecto { get; set; }
 }
 
He modificado ambas clases para hacerlas más pequeñas y útiles para este ejemplo. Y ya tengo los objetos en donde almacenaré la información.
Pero, como soy un vago, rápidamente me doy cuenta que voy a necesitar una clase que contenga las dos anteriores para que me sea más sencillo mover la información.
public class DatosPersonaje
 {
 public Personaje Personaje { get; set; }
 public Estadistica Estadistica { get; set; }
 }
 

Json.Net


Lo malo de trabajar con Json es que su manipulación es ardua. Mucho menos que si fuera xml, pero sigue siendo bastante tostón.
Json en bruto
Por suerte en CodePlex, existe un fantástico proyecto que trata justamente de una librería de facilita en gran medida el trabajo de manipulación de este formato:
Json.Net de @JamesNK
Siguiendo los consejos del sitio CodePlex, instalo la librería, por medio de NuGet, directamente en el proyecto WP7 en donde estoy escribiendo esta práctica. Y creo una clase específica que tenga la responsabilidad de parsear la cadena de información y cargarla en la clase adecuada.
using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
 
 namespace Model
 {
 public class GestorDeJson
 {
 public DatosPersonaje RecuperaDatosPersonaje(string jSonString)
 {
 DatosPersonaje datosPersonaje = new DatosPersonaje();
 JObject jPersonaje = JObject.Parse(jSonString);
 
 datosPersonaje.Personaje = JsonConvert.DeserializeObject(jPersonaje.ToString());
 datosPersonaje.Personaje.Clase = (int)jPersonaje.SelectToken(“class”);
 
 datosPersonaje.Estadistica =
 JsonConvert.DeserializeObject(jPersonaje.SelectToken(“stats”).ToString());
 datosPersonaje.Estadistica.intelecto = (int)jPersonaje.SelectToken(“stats.int”);
 
 return datosPersonaje;
 }
 }
 }
 
Como has visto, esta librería es una pequeña maravilla, y una auténtica joya. Voy a analizar cada fila importante para aclarar un poco más lo que he escrito.
DatosPersonaje datosPersonaje = new DatosPersonaje();
 JObject jPersonaje = JObject.Parse(jSonString);
 
Como se puede ver, primero instancio un objeto del tipo Datos del Personaje, y justo debajo instancio un objeto JObject, que es de la librería, y le asigno el contenido de la cadena Json que he recogido en el artículo anterior, parseado.
datosPersonaje.Personaje = JsonConvert.DeserializeObject(jPersonaje.ToString()); 
Esta línea es magia pura. Lo que hace aquí es deserializar el objeto JObject y convertirlo en un objeto Personaje (que es uno de los dos que almaceno en DatosPersonaje). ¿Y cómo sabe Json.Net que campo va en donde? Pues comparando la clave de Json (“name:Bendemfalar”) con la propiedad de la Clase.
datosPersonaje.Personaje.Clase = (int)jPersonaje.SelectToken(“class”); 
Esta última línea es la que he utilizado para cuando el nombre del campo Json es una palabra reservada en C#, como es el caso de Class. No puedo declarar una propiedad de Personaje como Class. Por lo cual debo coger el objeto JObject y seleccionar el campo que quiero transferir a mi clase.
Y, exactamente lo mismo hago con la información de estadísticas.
Investigar lo que ahora puedes hacer con esta información, te lo dejo a ti.
Más información | Blizzard Community Platform API Documentation, Json.net
En GenbetaDev | Api de World of Warcraft, consumir un servicio Json Cómo hacer un escaner para Twitter




Comentaris

Entrades populars d'aquest blog

10 alternativas a Cuevana para ver películas online

10 alternativas a Cuevana para ver películas online : Durante este último tiempo, en Cuevana se sucedieron varios “problemas” por los cuales hubo que ajustar algunas cosas antes de tiempo (como el rediseño del sitio), que dejaron a algunos usuarios ciertos problemas para acceder a las películas o series del portal. Pero realmente esto es algo que no incumbe a los usuarios y, como sabemos, existen muchas otras alternativas a Cuevana dando vueltas por Internet, que intentaremos presentar aquí mismo. Los sitios que repasaremos funcionan del mismo modo que Cuevana, mediante la instalación de un plugin que permite visualizar los videos de Megaupload o WUShare, entre otros servicios, en una calidad de imágen realmente excelente. Tal como sucede con el más popular servicio, todos ellos tienen publicidad que en algunos casos resulta insoportable, pero como dice Federico en DotPod “a caballo regalado no se le miran los dientes”. Alternativas a Cuevana 1. Moviezet Posiblemente el mejor clon d...

Learn Composition from the Photography of Henri Cartier-Bresson

“Do you see it?” This question is a photographic mantra. Myron Barnstone , my mentor, repeats this question every day with the hopes that we do “see it.” This obvious question reminds me that even though I have seen Cartier-Bresson’s prints and read his books, there are major parts of his work which remain hidden from public view. Beneath the surface of perfectly timed snap shots is a design sensibility that is rarely challenged by contemporary photographers. Henri Cartier-Bresson. © Martine Franck Words To Know 1:1.5 Ratio: The 35mm negative measures 36mm x 24mm. Mathematically it can be reduced to a 3:2 ratio. Reduced even further it will be referred to as the 1:1.5 Ratio or the 1.5 Rectangle. Eyes: The frame of an image is created by two vertical lines and two horizontal lines. The intersection of these lines is called an eye. The four corners of a negative can be called the “eyes.” This is extremely important because the diagonals connecting these lines will form the breakdown ...

Más de 50 de las mejores herramientas online para profesores

No es una exageración afirmar que hay ciento de aplicaciones educativas por ahí por la red, para todos los gustos y de todos los colores, por lo que es difícil tratar de recogerlas todas en un listado. Sin embargo, algunas destacan más que otras por su innovación y por su capacidad para conseguir adeptos, y esas son las que protagonizan la presente recopilación. Son 50 interesantes herramientas online basadas en las recopilaciones de EduArea , las muchas ya tratadas en Wwwhat’s new y las destacadas por la experiencia. 1. Dropbox : Un disco duro virtual con varios GB gratuitos y al que se accede desde casi cualquier dispositivo. Sin embargo, es muchísimo más que eso, de hecho ya comentamos 20 razones . 2. Google Drive : La evolución de Google Docs que suma a sus múltiples herramientas de creación de documentos, un considerable espacio virtual gratuito. 3. CloudMagic : Una extensión y una app multidispositivo para buscar información simultáneamente en Gmail, Twitter, Facebook, Evernote ...