Aggreger plusieurs flux rss dans un gridview

Description

Ce bout de code utilise RssToolKit pour permettre l'aggregation de plusieurs flux RSS dans un seul objet dans le but de le databinder à un contrôle GridView

Source / Exemple :


public partial class Aggregation : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //configuration
        Dictionary<string, string> bloggers = new Dictionary<string, string>();

        bloggers.Add("Florent Santin", "http://blogs.developpeur.org/azra/rss.aspx");
        bloggers.Add("Christian Robert", "http://blogs.developpeur.org/christian/rss.aspx");
        bloggers.Add("Nixounet", "http://blogs.developpeur.org/nix");
        bloggers.Add("JavaScript warrior", "http://blogs.developpeur.org/cyril");

        int NbMessageAffiche = 10;

        List<BlogMessage> elem;

        //gestion du cache
        if (Cache["LastData"] == null)
        {
        //algo, on va creer la liste
        elem = new List<BlogMessage>();

        //récupération des derniers messages
        foreach (KeyValuePair<string, string> pair in bloggers)
        {
            GenericRssChannel c = GenericRssChannel.LoadChannel(pair.Value);
        
            IEnumerator Ienum = c.Items.GetEnumerator();
            while (Ienum.MoveNext())
            {
                GenericRssElement curr = (GenericRssElement)Ienum.Current;
                elem.Add(
                    new BlogMessage(pair.Key, curr.Attributes["title"], curr.Attributes["link"],
                                    DateTime.Parse(curr.Attributes["pubDate"])));
            }
        }
         elem.Sort();
            
         //mise en cache de liste pour une heure
          Cache.Insert("LastData", elem, null, Cache.NoAbsoluteExpiration, new TimeSpan(1, 0, 0),
                         CacheItemPriority.Default, null);
        }
        else
        {
            //l object est deja en cache, on le récupére
            elem = Cache["LastData"] as List<BlogMessage>;
        }

        GridView1.DataSource = elem.GetRange(0, NbMessageAffiche);
        GridView1.DataBind();
    }
}

public class BlogMessage : IComparable<BlogMessage>
{
    private string _nom;

    public string Nom
    {
        get { return _nom; }
        set { _nom = value; }
    }

    private string _title;

    public string Title
    {
        get { return _title; }
        set { _title = value; }
    }

    private DateTime _pubdate;

    public DateTime PubDate
    {
        get { return _pubdate; }
        set { _pubdate = value; }
    }

    private string _link;

    public string Link
    {
        get { return _link; }
        set { _link = value; }
    }

    public BlogMessage(string nom, string title, string link, DateTime pubdate)
    {
        _nom = nom;
        _title = title;
        _link = link;
        _pubdate = pubdate;
    }

    #region IComparable<BlogMessage> Members

    public int CompareTo(BlogMessage other)
    {
        if (this.PubDate > other.PubDate)
            return -1;
        else if (this.PubDate < other.PubDate)
            return 1;
        else
            return 0;
    }

    #endregion
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.