Extending the blogpost data

Apr 14, 2009 at 10:53 PM
Is it possible to extend the blogposts with additional meta data?
Here's what I want to do:
1. Allow the user to "geocode" a blogpost when they write a new post, and optionally attach an icon with it (by entering a longitude/latitude or clicking on a map).
2. Store this metadata as extra XML tags in the individual posts in /App_Data/posts/*.xml
3. Create a service that pulls all the post links and coordinates out.
4. Show the location at the bottom of each post.
5. Ultimately support GeoRSS in the RSS feed too (http://en.wikipedia.org/wiki/GeoRSS). At the moment BlogEngine only supports location for the entire feed, but not the individual posts.

I've created a mockup of what I'm trying to accomplish here: http://socaldaily.sharpgis.net
See the map on the right side. What this map is currently doing is pulling the RSS feed, searching for the text "Location: " (each blog post has this at the end), and then parses the longitude and latitude. It also pulls the first image src in the blogpost and uses this for the icon on the map.
However I think this approach is a bit of a hack, and I'd like to do this as a real full-blown plugin for blogengine.

So I guess what I'm asking: Is this approach possible using only the public extension points? (I don't want to fork BE). If not, can you suggest other ways to do this? What parts of the blogengine API should I start getting my head around, and are there any plugins that does something similar I can learn from?

Second thing I'm asking: Can we get full GeoRSS support for BE? :-)

Apr 15, 2009 at 10:16 PM
The problem really comes down to storage, I think. There's no real way right now to extend post meta data and really, the capability to do so is a lot of added complexity for only very specialized utility. If I were looking to do this in an extension, I'd coopt PostTags and hook into the Post events to validate them. I haven't done anything of that nature, so I couldn't say what all would be involved, but that's where I'd start.