I finally got to do a bit of hacking this evening and noodled around with Net::Social. I'm not entirely sure on the name but this module will probably go nowhere since it's mostly just satisfying my curiousity.
I currently have plugins for LJ, Vox, Flickr and Dopplr working. If the underlying CPAN modules weren't horked then I'd have Orkut and Gmail too. I'm waiting on some clarification on one of the Jabber modules and then I'll have Jabber Roster support too. And Paul Mison contributed a Twitter plugin. I think del.icio.us, MySpace and FaceBook support will probably be next.
Net::Social doesn't really do anything clever - each plugin defines what parameters it needs passing in to do its work and then exposes a friends() method that returns a list of hash refs which contain information about each of your friends. At the moment the plugins only populate a 'user' field but I can see stuff like 'real_name', 'private', 'mutual' being filled in.
Then, on top of that, I'd build a DB backed Web App which would use Net::Social to populate its tables when the user adds their credentials for each site.
It's all a bit hacky but its been a fun few hours and its exposed the rather parlous state of web API authentication.
I should clean the code up, add some docs and maybe write some coherent thoughts on what I've learnt but for now I'm going to have some hot chocolate and try and wind down in the hope of getting a decent night's sleep tonight.