Número de visitas:
3,170
El primer demo que mostré fue de Text Analytics y Twitter, y prometí realizar un tutorial para implementarlo en una app de Xamarin paso a paso, ¡así que manos a la obra!
Antes de comenzar, recuerda que todos los servicios cognitivos funcionan con muchas plataformas, no únicamente Xamarin. Revisar la documentación es de utilidad, pues ahí puedes aprender cómo llamar a los servicios en varios lenguajes (PHP, Java, Python, C#, etc).
El API de
Text Analytics te permite analizar un texto suministrado y obtener el sentimiento, palabras clave e idioma del mismo con llamadas al servicio REST. Como todo Servicio Cognitivo, se basa en
hacer una petición a la URL del servicio suministrando los
parámetros específicos, en este caso un texto (incluyendo además las
credenciales de acceso -una key que obtienes al crear el servicio en el portal de Azure-) y se
devolverá una cadena en formato JSON, la cual procesarás en tu app para mostrarla al usuario, tomar decisiones, etc.
Aplicación para acceso a Twitter
Para comenzar con nuestra app basada en Twitter y Text Analytics,
regístrate como desarrollador en Twitter para que tengas acceso al API y puedas crear un proyecto (que te dará derecho a usar Keys para autenticar tus peticiones). Accede a
https://apps.twitter.com y da clic en
Create New App.
A continuación ingresa los datos de la app. El nombre de la app es único, así que deberás utilizar otro diferente al que muestro en la imagen. El website es tu sitio web, puedes colocar cualquier dirección, pero una app real debería tener su propio sitio web (o el del publicador).
Una vez aceptado el acuerdo de desarrollador, tu app será creada. Accede a la pestaña Keys and Access Tokens para que puedas obtener tanto el API Key y el API Secret. Estos elementos serán utilizados en tu aplicación móvil, así que de momento cópialos y pégalos en un bloc de notas.
Creación del acceso al API de Text Analytics
Ahora accede al portal de Azure (https://portal.azure.com) y vamos a crear un recurso basado en Cognitive Services. Para ello damos clic en Todos los servicios y escribimos Cognitive Services en el buscador, seleccionando el resultado que aparece en la lista de servicios.
Da clic en el botón Agregar.
Escribe Text Analytics API en el cuadro de búsqueda, selecciona el resultado que se muestra.
Da clic en Crear.
Ahora registra la información solicitada: El nombre del servicio, la suscripción, la ubicación (cercana a los usuarios de tu app), el plan de tarifa (recomendable seleccionar el tier gratuito porque estamos haciendo pruebas) y crea un nuevo grupo de recursos (donde también almacenaremos el resto de los demos). Da clic en crear.
Una vez generada la suscripción al servicio, aparecerá una notificación con el resultado de la operación. Da clic en Ir al recurso.
En el dashboard del servicio, localiza el endpoint (depende de la ubicación donde lo hayas registrado) y cópialo; lo utilizaremos más adelante en la app móvil. Ahora da clic en Show access keys.
Y por supuesto, aparecerán las llaves de acceso. Solo necesitas una, así que copia la primera.
Ahora que has generado un acceso al API, vamos a desarrollar la app de Xamarin
App móvil con Xamarin
En primer lugar, abre Visual Studio y genera una Cross-Platform App de Xamarin.Forms llamanda SentimentalTweets. Elige una ubicación corta para el proyecto y da clic en Aceptar.
Selecciona las plataformas donde probarás tu app, utiliza la tecnología UI de Xamarin.Forms y elige .NET Standard como tecnología de código compartido.
Una vez generada la solución, da clic derecho sobre ella en el Explorador de soluciones y elige Administrar paquetes Nuget para la solución.
Agrega el paquete LinqToTwitter, el cual simplificará la obtención de información de Twitter. En este caso solo la versión 3.1.2 me funcionó (las más recientes me marcaron error). Recuerda instalar el paquete en todos los proyectos de la solución.
A continuación instala el paquete Microsoft.Net.Http en todos los proyectos (versión más reciente).
Finalmente, agrega el paquete Newtonsoft.Json a la solución:
Ahora da clic derecho sobre el proyecto SentimentalTweets y selecciona Agregar Nueva carpeta
Agrega las carpetas mostradas a continuación, las cuales nos servirán para organizar nuestro código
En la carpeta Helpers da clic derecho y selecciona Agregar Clase. El nombre es Constantes.cs y en esta clase vas a colocar los 4 elementos que tenemos de nuestros servicios de Twitter y TextAnalytics, así que asigna dichos valores a los campos mostrados en el código:
En esta misma carpeta Helpers agrega otra clase, StringToColorConverter, la cual utilizaremos para convertir un valor decimal en un color que usará un control Label. El servicio de TextAnalytics devuelve el sentimiento a través de un valor numérico entre 0 (negativo) y 1 (positivo), por lo que mostraremos un mensaje positivo de color verde, usaremos el color negro para un tweet neutral y un color rojo para un texto con sentimiento negativo:
En la carpeta Modelos, agrega la clase Document, que utilizaremos en el cuerpo de la petición al servicio de Text Analytics:
Ahora genera la clase Tweet, que modela un mensaje de Twitter:
Utilizando herencia, generamos la clase TweetAnalytics, que será el resultado de hacer las peticiones al servicio cognitivo:
Ahora, en la carpeta Servicios, comienza creando la clase ServicioTwitter, la cual utiliza el paquete LinqToTwitter para conectarse al feed de Twitter y realizar una búsqueda de tweets en base a una cadena que se suministra al método AnalizarTweets:
En la misma carpeta tenemos la clase ServicioTextAnalytics, que se encargará de procesar el tweet con el método AnalizarTweet para obtener el sentimiento, idioma y palabras clave llamando al API de Text Analytics. Los métodos RealizarPeticionHttp y PrepararDocumentos son de soporte, para armar el request HTTP de acuerdo a lo establecido en la documentación del API:
En la carpeta Paginas agrega una ContentPage, la cual encuentras en la categoría Xamarin.Forms. El nombre de esta pagina es PaginaTweets.
Con respecto al diseño, en la página tenemos un Entry para que el usuario introduzca el término de búsqueda, un botón para realizar la consulta y un ListView donde se muestran los tweets correspondientes.
Con respecto al código de C#, cuando el usuario seleccione un tweet, se navegará a otra página que crearemos a continuación. También en este código llamamos al ServicioTwitter para buscar los tweets del término dictaminado por el usuario:
Ahora crea la página PaginaAnalisisTweet.xaml, en la cual primero diseñamos la interfaz, simplemente varios Label para mostrar la información-
Y su código de C# es el siguiente, donde recibimos el tweet de la página anterior y llamamos al ServicioTextAnalytics para analizarlo al cargar la página:
Finalmente, modifica el archivo App.xaml.cs para establecer la página de inicio de la app y manejar un stack de navegación:
¡Y listo! Por fin hemos terminado la app. Vamos a compilar y ejecutar la solución. En este caso, haré la prueba con el emulador Genymotion. Observa la página de inicio, introducimos el término futbol y hacemos Tap sobre el botón:
Esperamos a que se obtengan los resultados y observamos:
Si seleccionamos un tweet, podemos ver su análisis: sentimiento, idioma, palabras clave:
En este caso, se trata de un tweet con sentimiento negativo:
Aquí tenemos un caso de un mensaje positivo:
Y finalmente un tweet neutral:
¿Qué tal te pareció la app? ¿Interesante? ¿No tanto? ¿Te funcionó el proyecto? ¿Te marcó algún error? Házmelo saber en los comentarios y te responderé a la brevedad. Recuerda que tu opinión es muy valiosa para mí a manera de retroalimentación.
Agradezco tu visita al blog. Si la publicación fue de tu interés, no olvides compartirla en tus redes sociales.
¡Nos vemos la próxima! (con la explicación del siguiente demo)
Cordialmente,
Luis