Para poder continuar con el ejercicio del artículo previo, vamos a hacer primero un pequeño repaso de lo que ya debes tener, ahora ya debes tener:
Una clave de acceso para el API de Marvel.
El enlace correcto para poder obtener consultas y obviamente la información.
Puedes ver aquí el artículo anterior para poder iniciar de manera correcta con este ejercicio.
El proyecto en Visual Studio
Crea un nuevo proyecto, dentro de este proyecto establece las carpetas y clases como se ven en el siguiente proyecto.
Después de eso, necesitarás ayuda de un paquete de NuGet, para ser específico el paquete de JSON.Net.
Ya que lo tengas instalado en la aplicación, comencemos por definir para que servirá cada una de las clases que tienes en tu proyecto (aunque quizá el nombre hable por cada una de ellas).
Models > Character.cs: Será el modelo para establecer la descripción de cada uno de los personajes obtenidos.
Classes > HashGeneratos.cs: Se encargará de crear el hash de la consulta.
Classes > VoiceAction.cs: Manejará la conversión de las cadenas de texto que queremos que se conviertan en voz.
Classes > ServiceDataHelpers: Realizará todas las consultas al API en base a ciertos criterios.
Vamos por cada una de ellas. Las puse en orden de complejidad.
Character.cs
Esta es simple, solo tiene las propiedades del personaje al que vamos a consultar.
namespace Marvel_Comics_Heroes { class Character { public string CharacterId { get; set; } public string Name { get; set; } public string Description { get; set; } public string Thumbnail { get; set; } public string ThumbnailType { get; set; } } } |
HashGenerator.cs
Esta clase reemplazará lo que hacía el primer sitio web, es decir, generará el hash requerido para que la consulta pueda funcionar de la manera esperada.
using Windows.Security.Cryptography; using Windows.Security.Cryptography.Core; using Windows.Storage.Streams; namespace Marvel_Comics_Heroes { public class HashGenerator { public static string GetMD5Key(string timestamp, string privateKey, string publicKey) { string finalQuery = timestamp + privateKey + publicKey; var alg = HashAlgorithmProvider.OpenAlgorithm("MD5"); IBuffer buffer = CryptographicBuffer.ConvertStringToBinary(finalQuery, BinaryStringEncoding.Utf8); var hashed = alg.HashData(buffer); var res = CryptographicBuffer.EncodeToHexString(hashed); return res; } } } |
VoiceAction.cs
Esta clase convertirá la descripción del personaje en voz para este caso, pero realmente te podría funcionar para poder pronunciar lo que tu quisieras durante toda la aplicación.
using System; using Windows.Media.SpeechSynthesis; using Windows.UI.Xaml.Controls; namespace Marvel_Comics_Heroes { public static class VoiceActions { static SpeechSynthesisStream voiceStream; static SpeechSynthesizer synthesizer; public async static void ResponseAction(string information, MediaElement player) { synthesizer = new SpeechSynthesizer(); voiceStream = await synthesizer.SynthesizeTextToStreamAsync(information); player.AutoPlay = true; player.SetSource(voiceStream, voiceStream.ContentType); player.Play(); } } } |
ServiceDataHelper.cs
Esta clase tiene dos métodos, el primero permitirá generar la cadena necesaria para poder crear la consulta como lo hicimos en el artículo anterior pero obviamente de manera automatizada, el segundo método permitirá crear la ruta de la imagen que corresponde al personaje en cuestión.
using System.Text; using Windows.UI.Xaml.Media.Imaging; namespace Marvel_Comics_Heroes { public class ServiceDataHelper { public static string QueryBuilder(string section, string timestamp, params string[] parameters) { const string privateKey = "tu llave privada"; const string publicKey = "tu llave pública"; StringBuilder queryBuilder = new StringBuilder("http://gateway.marvel.com/v1/public/"); queryBuilder.Append(section + "?"); queryBuilder.Append("apikey=" + publicKey); queryBuilder.Append("&ts=" + timestamp); queryBuilder.Append("&hash=" + HashGenerator.GetMD5Key(timestamp, privateKey, publicKey)); foreach (string parameter in parameters) { queryBuilder.Append("&" + parameter); } return queryBuilder.ToString(); } public static BitmapImage ImagePathBuilder(string path, string extension, string imageFormat) { StringBuilder imageBuilder = new StringBuilder(); imageBuilder.Append(path); imageBuilder.Append("/" + imageFormat); imageBuilder.Append("." + extension); BitmapImage imageSource = new BitmapImage(); imageSource.UriSource = new System.Uri(imageBuilder.ToString()); return imageSource; } } } |
Bien, hasta aquí tenemos ya las bases de la información, la estructura básica del proyecto y las clases requeridas para poder comenzar a trabajar con la información en forma, pero eso lo veremos en el tercero y último artículo. ¡Allá nos leemos!
Amin,
Me interesa contactarte para una posición que considero puede ser de tu interés. Saludos