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

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 ...

El meu editor de codi preferit el 2024, que això ja se sap que va canviant 😄

Visual Code Visual Code és un editor de codi font lleuger, però potent que s’executa al teu escriptori i està disponible per a Windows, macOS i Linux. Compta amb suport integrat per a JavaScript, TypeScript i Node.js i té un ric ecosistema d’extensions per a altres llenguatges i entorns d’execució (com C++, C#, Java, Python, PHP, Go, .NET).  És una eina ideal per a desenvolupar i depurar aplicacions web i en el núvol. Per què Visual Code? Visual Code té molts avantatges com a editor de codi font, com per exemple: És gratuït, ràpid i fàcil d’instal·lar i actualitzar. Té un ampli ecosistema d’extensions que et permeten afegir funcionalitats i personalitzar la teva experiència de desenvolupament. Té un suport integrat per a molts llenguatges i entorns d’execució, i et permet depurar i executar el teu codi des del mateix editor. Té una interfície senzilla i elegant, amb diferents temes i modes de visualització. Té un sistema de sincronització de configuracions que et permet guardar les...

Las Mejores Aplicaciones Gratis para iPad de 2012

Las Mejores Aplicaciones Gratis para iPad de 2012 : ¿No tienes ni un duro? No te preocupes, pues hoy os traemos una extensa selección de las mejores apps gratuitas que puedes conseguir en la App Store para que llenes tu iPad de calidad, sin gastar nada de nada.   ¿Estás buscando juegos o apps gratis para tu iPad? En la App Store hay más de 500,000 apps y juegos, y una gran cantidad de ellos está disponible de forma totalmente gratuita. Aquí vamos con la selección de las mejores Apps gratis para iPad (todos los modelos), organizada por categoría. ¿Estás preparado? Las Mejores Apps Gratis de Redes Sociales para iPad Nombre Facebook Gratis Categoría Redes sociales Facebook es la red social más famosa del mundo , con casi mil millones de usuarios. Su app para iPad ha tardado, pero aquí está. Nombre Twitter Gratis Categoría Redes sociales Twitter es la red de microblogging por excelencia. La forma más rápida y directa de informar y mantenerse informado de las cosa...