En algunas ocasiones tenemos la necesidad de conectarnos a un sitio web y obtener cierta información, por ejemplo usando la API REST de algún servicio como Twitter y no sabemos exactamente cómo hacer. Bien, acá les comentaré uno de los métodos más simples de cumplir nuestro objetivo y es utilizando WebClient que nos permite conectarnos a un sitio web y obtener el contenido que necesitamos.
Para empezar debemos conocer la URI a la cuál nos conectaremos y como mencioné anteriormente utilizaré el API de Twitter como ejemplo y accederé a https://api.twitter.com/1/statuses/user_timeline.xml?screen_name=<nombreusuario>&count=<cantidaddetweetsarecuperar> para obtener los últimos cantidaddetweetsarecuperar tweets de mi time line, si quieres conocer más de la sintaxis de la API de Twitter visita la documentación.
Es importante conocer la forma en la que los datos nos son entregados es por ello que voy al navegador y escribo https://api.twitter.com/1/statuses/user_timeline.xml?screen_name=mspeliel&count=1 para obtener una visión de la estructura que es devuelta y se puede observar que devuelve un arreglo de «status» y estos están formados entre otras cosas por «text» que es donde está el texto de la actualización y es el campo que nos interesa.
Una vez que tenemos la URI procedemos a crear nuestro proyecto de tipo Aplicación de Windows Phone en Visual Studio y en el ContentPanel agregamos un ListBox y lo llamaremos lstTimeLine.
Ahora agregamos un manejador al evento Loaded de PhoneApplicationPage, para ello vamos a la primera etiqueta y al final de la misma agregamos Loaded=»PhoneApplicationPage_Loaded». Hacemos clic derecho sobre PhoneApplicationPage_Loaded y luego sobre Navegar al controlador de eventos.
En el manejador de eventos escribiremos lo siguiente:
string screenname = "mspeliel"; int count = 5; String uri = String.Format("https://api.twitter.com/1/statuses/user_timeline.xml?screen_name={0}&count={1}", screenname, count.ToString()); WebClient wc = new WebClient(); wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted); wc.DownloadStringAsync(new Uri(uri, UriKind.Absolute));
Con esto tendremos libertad de cambiar más adelante el nombre del usuario y la cuántos tweets queremos recuperar, si se fijan, luego de instanciar wc de tipo WebClient agregamos al evento DownloadStringCompleted el manejador de eventos llamado wc_DownloadStringCompleted (si has usado VS sabrás que con unos toques a la tecla TAB tendrás este código sin escribir mucho). Y finalmente llamamos al médito DownloadStringAsync y le pasamos la uri a la que queremos acceder, esto provoca una llamada asíncrona y es por ello que se debe manejar el evento DownloadStringCompleted.
Ahora en el manejador del evento DownloadStringCompleted escribiremos lo siguiente:
if (e.Error == null && !e.Cancelled) { XDocument doc = XDocument.Parse(e.Result); foreach (var elemento in doc.Descendants("status")) { ListBoxItem lbi = new ListBoxItem(); lbi.Content = new TextBlock() { Text = elemento.Element("text").Value, TextWrapping=TextWrapping.Wrap, Margin = new Thickness(12,12,0,12) }; lstTimeLine.Items.Add(lbi); } }
Para que esté disponible XDocument debemos agregar la referencia a System.Xml.Linq y agregar using System.Xml.Linq a nuestro código fuente.
Es muy importante asegurarse de que no hubo ningún error (aunque en este caso no estoy haciendo nada por manejar el error simplemente si hay error no hago nada) y que la descarga no haya sido cancelada (tampoco le he dado al usuario aún la posibilidad de cancelar la descarga pero hay que tener en cuenta esta situación). Finalmente recorremos la colección de status y creamos un objetivo de tipo ListBoxItem al que agregamos en su contenido un TextBlock al que asignamos el texto del tweet y la propiedad TextWrapping la colocamos en Wrap para que se ajuste el texto al ancho de la pantalla y finalmente un margen para que no se vean los tweets montados uno sobre otro.
Y bueno, una vez que todo está listo compilamos y este es el resultado (válido para el momento en el que se hizo la captura).
te agradesco demasiado me habia atorado haciendo una aplicacion (La primera) al querer cargar un xml remoto, me sirvio de mucho sigue asi y esperemos mas tutoriales como este, se agradece!
Genial que te haya servido. Esa es la idea, ayudar a quien lo necesite. Saludos.
Tengo un ListBox y quiero pasar los datos que están dentro de el a otra pagina, como podría hacerlo?? espero que me puedas ayudar, gracias
Hola, la forma más fácil es que persistas ese objecto (o esos objectos) en el diccionario de recursos de la aplicación y lo utilices luego en la página a la que deseas navegar.