Rating Plug-In for RSS Bandit

archived comments edit

A while ago I wrote about AmphetaRate, a blog recommendation engine that takes user ratings of blog entries and serves an RSS feed of recommended blog entries.

Later on I wrote an article about how to build an IBlogExtension plugin which was added the the RSS Bandit documentation site.

As a warmup to writing that article I wrote an AmphetaRate plugin to work through the kinks of writing a plugin for RSS Bandit. However I never released that plug-in as I wasn't ever sure if it was working since all my recommendations were "training" recommendations.

This is a classic chicken and egg problem. If there aren't enough users using AmphetaRate, the quality of recommendations are poor.

In any case, I noticed today that Dare updated the RSS Bandit roadmap and the version (code named Nightcrawler) after the next version may include a "Thumbs Up/Thumbs Down" rating system, perhaps intergrated with AmphetaRate. This would certainly help solve the "Chicken Egg" problem.

In the meantime, I am releasing my plug-in with no warranties. Just copy the AmphetaRatePlugin.dll to the "plugins" subfolder of the RSS Bandit installation (on my computer that's at "C:\Program Files\RssBandit\plugins"). The VS.NET 2003 solution can be downloaded here.

Note that although this plug-in implements the IBlogExtension interface, the configuration form implements a feature specific to RSS Bandit. When you configure this plug-in, I wanted to provide an easy manner to subscribe to a user's recommendation feed. So I added a LinkLabel that when clicked does just that.

However, I had to cheat a bit to do that. Since the IBlogExtension interface doesn't define methods you may want to call on the calling application, I used Reflection to call a method to bring up a pre-populated "New Feeds" dialog. You can see the source for that call below.

private void lnkSubscribeURL_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)

{

    if(IsValidID(this.txtID.Text))

    {

        object banditApp = this.Owner.GetType().InvokeMember("GuiOwner", BindingFlags.Public | BindingFlags.Instance | BindingFlags.GetProperty, null, this.Owner, null);

        if(banditApp != null)

        {

            bool result = (bool)banditApp.GetType().InvokeMember("CmdNewFeed", BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod, null, banditApp, new object[] {null, this.lnkSubscribeURL.Text, "Personalized AmphetaRate Feed"});

        }

    }

}

At some point, it's possible this will become a fully supported feature of RSS Bandit. For now you're stuck with this hack. If anyone's interested, I'd love to discuss creating a new plug-in standard that's a little more full featured than IBlogExtension. It works great for simple plug-ins, but doesn't provide much support for a plug-in to interact with the application. I can think of several operations every aggregator pretty much supports that a plug-in might make use of such as "Subscribe To Feed", "Mark Item As Read", etc...

[Listening to: In da Club - 50 Cent - Get Rich or Die Tryin' (3:13)]

Comments