# Saturday, August 15, 2009
« Creating my activity aggregator | Main | Tip of the Day: Creating an Extension me... »

I have to get some landscape rock put out before my home owner's association has a cow, but I decided to do some more work on my activity aggregator. Today, I decided to integrate my blog feed into it, so when I post here, it will automatically update this activity on my home page (and soon to be in my developer's area).

Here's what the end result looks (for now).

Doing it was fairly easy with the design I implemented in my last post. My BlogFeed class inherits the BaseFeed class, which means I need to implement the ParseFeed() method. Since the RSS feed from my blog is XML, I was easily able to adapt the same code from my TwitterFeed class to work for this RSS feed (which should actually work for any RSS feed I pass in).

I also created another Extension method (for practice) to convert the RSS feed date time to a C# DateTime object. I will post that code as "Tip of the Day" but I have to give Dan Wahlin credit for it, as I adapted some sample code he provided.

Here's how the RSS feed (aka BlogFeed) uses LINQ to XML for creating my activity object.

    internal class BlogFeed : BaseFeed

    {

 

        public override int ParseFeed(XDocument doc)

        {

            try

            {

                ReturnCode code = ReturnCode.Success;

                if (doc != null)

                {

                    var activityList = from e in doc.Descendants("item")

                                       select new RubiconPortal.BusinessObjects.Activity

                                       {

                                           ActivityTypeID = ActivityTypes.Blog.Code,

                                           ActivityDate = e.Element("pubDate").Value.RSSDateTime().ToShortDateString() + " " + e.Element("pubDate").Value.RSSDateTime().ToShortDateString(),

                                           ActivitySummary = HttpUtility.HtmlDecode(e.Element("title").Value),

                                           ActivityDetailsURL = e.Element("link").Value

                                       };

 

                    foreach (Activity item in activityList)

                    {

                        //We need to check and see if the item exists

                        if (!Activity.CheckEntryExists(item.ActivityTypeID, item.ActivityDetailsURL))

                        {

                            int results = item.Save();

                            if (results != ReturnCode.Success.Code)

                                code = ReturnCode.Failure;

                        }

                        else

                            return code.Code;   //we can break once we hit one we've already logged (for performance reasons

 

 

                    }

 

 

                }

                return code.Code;

            }

            catch (Exception ex)

            {

                ErrorHandler(ex, "An unexpected error occurred in TwitterFeed.ParseFeed() - " + ex.Message);

                return ReturnCode.Failure.Code;

            }

        }

    }

 

My next step will be to integrate some AJAX so when the user hovers over the link, they can see things like the date, more of the topic, etc. I also need to integrate my "Useful Links" dicussion as well.

All Things | ASP.Net | C# | CSharp | Design | General