RSS Aggregator User Control

I think this is probably the last of the fun user controls that I created for my web sites, but this one was one of the more important ones for my website.  When I created NoCommonGround, I wanted a site that would take all the info that I wanted, and put it into one place.  I figured the easiest way to do that, was to integrate all the RSS feeds into one simple place.  Thus, I needed an RSS feed user control.

There are a few bugs with this, I don’t do complete checking for nulls every where, but I do in some of the more important places.  I also import my own schema, because I was having problems pulling the schema down from other websites sometimes, and things weren’t working right.

Lets have a look at the code:

<%@ Control Language=”C#” ClassName=”BlogAgg” %>
<%@ Import Namespace=”System.Data” %>

<script runat=”server”>
public string BlogRSSFeed = “”;
public string BlogTitle = “”;

protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
if (BlogRSSFeed == “”)
this.Visible = false;
DataSet dsBlog = null;
dsBlog = (DataSet)Cache.Get(BlogRSSFeed);
if (dsBlog == null)
System.Net.WebProxy myProxy = new System.Net.WebProxy(“http://MyProxy/”, true);
dsBlog = new DataSet();
System.Net.WebRequest wr = System.Net.WebRequest.Create(BlogRSSFeed);
wr.Proxy = myProxy;
System.Net.WebResponse wresp = wr.GetResponse();
dsBlog.ReadXmlSchema(Server.MapPath(“~”) + “\\App_Data\\rss_schema.xsd”);
dsBlog.ReadXml(wresp.GetResponseStream(), XmlReadMode.IgnoreSchema);
Cache.Add(BlogRSSFeed, dsBlog, null, DateTime.Now.AddHours(1), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);
hlTitleLink.Text = BlogTitle;
if (dsBlog.Tables[“channel”].Rows[0][“link”] != System.DBNull.Value)
hlTitleLink.NavigateUrl = (string)dsBlog.Tables[“channel”].Rows[0][“link”];
hlTitleLink.Text = BlogTitle;
hlTitle.Text = (string)dsBlog.Tables[“item”].Rows[0][“title”];
hlTitle.NavigateUrl = (string)dsBlog.Tables[“item”].Rows[0][“link”];
if (dsBlog.Tables[“item”].Rows[0][“description”] != System.DBNull.Value)
lblEntry.Text = (string)dsBlog.Tables[“item”].Rows[0][“description”];
lblEntry.Text = “”;

int iRows = 10;
if (dsBlog.Tables[“item”].Rows.Count < iRows)
iRows = dsBlog.Tables[“item”].Rows.Count;
LiteralControl lcStart = new LiteralControl(“<ul>”);
for (int i = 1; i < iRows; i++)
LiteralControl lcOpen = new LiteralControl(“<li>”);
LiteralControl lcClose = new LiteralControl(“</li>”);
HyperLink hl = new HyperLink();
hl.Text = (string)dsBlog.Tables[“item”].Rows[i][“Title”];
hl.NavigateUrl = (string)dsBlog.Tables[“item”].Rows[i][“link”];
hl.Target = “_blank”;
LiteralControl lcStop = new LiteralControl(“</ul>”);
catch (Exception ex)
if ((Request.QueryString[“debug”] != null) && (Request.QueryString[“debug”].ToLower().Equals(“true”)))
lblEntry.Text = ex.ToString();
this.Visible = false;

And the HTML:

<h2 class=”title”>
<asp:HyperLink ID=”hlTitleLink” runat=”server”/></h2>
<div id=”BorderDiv”>
<td style=”vertical-align:top; text-align:justify;” width=”60%”>
<asp:HyperLink ID=”hlTitle” runat=”server” Target=”_blank” Text=”No Recent Entries” />
<asp:Label ID=”lblEntry” style=”text-align: justify;” runat=”server” >
<td style=”vertical-align:top;” width=”40%”>
Previous Entries:</h2>
<asp:Panel ID=”pnlRecent” runat=”server” />


Overall, it’s pretty simple, you can see an example at  The photo user controls at the top are just a slight variation on this code, and do some special processing on the data that is handed back so it’ll show the picture correctly.


Comments (3)

  1. Simone says:

    sorry but not a real need for this since we have this

  2. Thanks for the link love, Simone. I do need to update RssFeed sooner than later to support Atom, though. But right now it works equally well with RSS and RDF.

  3. Simone says:

    Nice updates on the new 1.9 Scott.