Ok, soy muy seguidor de muchas fuentes de información Sindicalizada, creo que todo geek tecnológico lo es, son nuestros “periódicos” para estar al día en cada nueva tecnología y en nuevos eventos, más hoy que nunca con todos los eventos que hay en el área de software, así que una buena forma de hacerlo es creando un lector básico de RSS usando Silverlight.
Lo primero que debes hacer será crear un nuevo proyecto (Yo siempre inicio un proyecto Silverlight en Expression Blend para no generar páginas .aspx pues creo que usar html es más factible a ser alojado en cualquier servidor web sin limitarme a una sola tecnología).
Ya que estas en Blend, vamos a añadir tres controles que serán los únicos que realmente utilizarás, un TextBox, un Button y un DataGrid quedando únicamente de la siguiente forma.
Por la parte de la interfaz es lo único que necesitas, ahora sí, nos brincamos a Visual Studio para la parte funcional (antes de seguir con este paso, recomiendo que le establezcas un nombre a cada control).
Ya dentro de Visual Studio, lo primero que harás es crear una clase sencilla para poder organizar de una forma adecuada la información que vas a recibir.
public class RssFeed { public string Titulo { get; set; } public string Link { get; set; } public string Descripcion { get; set; } } [/sourcecode] Ya teniendo la clase creada te vas al evento Click del botón que creaste y de ahí partir, primero verifica que exista algo de texto en la caja de texto de dirección, y en caso afirmativo, vas a mandar llamar el método CargarRSS al que después le darás funcionalidad. [sourcecode language='csharp'] private void btnCargar_Click(object sender, RoutedEventArgs e) { if (txtRSS.Text != String.Empty) CargarRSS(txtRSS.Text); } |
Como puedes ver el método está recibiendo un parámetro, en este caso el contenido del texto, así que considerando esto ya le puedes meter funcionalidad a este método, quedando de la siguiente forma
Private void CargarRSS(string uri) { WebClient wc = new WebClient(); wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); Uri feedUri = new Uri(uri, UriKind.Absolute); wc.OpenReadAsync(feedUri); } |
Mandamos llamar a un webClient, ojo, para que este elemento pueda funcionar correctamente, necesitas mandar llamar a la librería System.Net
using System.Net; |
Ya que no tenemos ningún error, podemos ver uqe hicimos, primero creamos un objeto de tipo WebClient, después creamos un EventHandler para la el método OpenReadCompleted del objeto que recién creaste, por último crea otro objeto de tipo Uri que recibirá el parámetro y que a su vez lo mandará al WebCLient.
Después solo te faltará escribir la funcionalidad del Event Handler, que es la siguiente
if (e.Error != null) { txtRSS.Text = "Error al cargar el RSS. Intente nuevamente!!!"; return; } using (Stream s = e.Result) { SyndicationFeed feed; using (XmlReader reader = XmlReader.Create(s)) { feed = SyndicationFeed.Load(reader); var posts = from item in feed.Items select new RSSFeed() { Titulo = item.Title.Text, Link = item.Links[0].Uri.AbsoluteUri, Descripcion = item.Summary.Text }; dgRSS.ItemsSource = posts; dgRSS.Visibility = Visibility.Visible; } } |
En donde verificarás que no exista ningún error al cargar la dirección web, en caso de que si exista, te mandará un mensaje de texto, de lo contrario utilizando el resultado crearás un objeto XMLReader para leerlo y por medio de LINQ crearemos un elemento por cada ítem recibido que al final irá a parar al data grid.
Si eres de los míos y prefieres ver las cosas funcionando para entenderle mejor, aquí está el código.
Lector RSS
el comentario es fantástico, gracias por compartirlo