AideRSS provides a service that ranks online content such as RSS feeds, blog posts and so on. I have always been impressed with AideRSS and wanted to educate myself with writing REST interface logic, ASP.Net and Web 2.0 in general. AideRSS also provides a PostRank API to their service so I decided to write a .NET client wrapper for this API to make it easier to use. You can download the API including source and binaries from here:
Why Did I Write This?
My goal with the API beyond learning some new stuff was to leverage TDD and allow emergent design to surface an underlying domain model. I wanted to avoid a simple static functional wrapper for the API and instead provide a design that would allow more powerful usages of the PostRank API. I wanted TDD to help evolve a reasonable domain model which would include classes to represent feeds, posts and so on. To do this I systematically applied the XP rules of simplicity:
- Testable – has a test
- Communicative – classes and methods are intent revealing
- Factored – no duplication of logic or structure
- Minimal – minimum number of classes and methods
While I am not an expert on RSS or the PostRank API I am quite happy with the resulting API. The classes that emerged make sense, at least to me! There is also a safety net of 105 unit tests that I can use for future refactoring and enhancements.
What Does it Do?
The API provides full access to the underlying PostRank API. Besides creating unit tests for the code I also included a demo command line application and a demo ASP.Net project.
The demo command line program takes a single command line argument which is the RSS feed you are interested in and defaults to Ilya Grigorik’s blog:
The ASP.Net project provides an interactive UI allowing you to enter an RSS feed and see AideRSS PostRank features such as top posts in a given time period. The screen shots below show some of the features of the API:
Note that there is an alternate .NET API written by William Spaetzel that you can get from http://spaetzel.com/postranksharp.
I welcome any feedback you may have on this API.