Saltar al contenido
Menú
El blog de Kañaz
  • Inicio
  • Acerca de
  • Github
  • Youtube
  • LinkedIn
  • Twitter
El blog de Kañaz

Lector de RSS en Silverlight 4

Publicada el 11 enero, 201116 julio, 2012
Twittear

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);
}

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);
}

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;

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;
}
}

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

1 comentario en «Lector de RSS en Silverlight 4»

  1. Rosa | vuelos a china dice:
    19 abril, 2012 a las 11:55 am

    el comentario es fantástico, gracias por compartirlo

    Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Busca en este sitio

MI perfil de Github

Github profile

Sígueme en Twitter

Seguir a @aminespinoza
©2023 El blog de Kañaz | Funciona con SuperbThemes y WordPress