Hacking Huffduffer with Last.fm

The took place in London yesterday. Much nerdy fun was had by all and some very cool hacks were produced.

Nigel made a neat USB-powered arduino-driven ambient signifier à la availibot that lights up when one of your friends is listening to music. Matt made Songcolours which takes your recently listened-to music, passes the songs through LyricWiki, extracts words that are colours, passes them through the Google chart API and generates a sentence of cut up lyrics (Hannah’s was the best: love drunk home fuck good night). The winning hack, Staff Wars, is a Last.fm-powered quiz that allows people to battle for control of the office stereo—something that could prove very useful at Clearleft.

I knew I’d never be able to compete with the l33t hax0rs in attendance, so I cobbled together a very quick little hack to enhance Huffduffer. I hacked it together fairly quickly which gave me some time to hang out with Hannah in the tragically hip environs of Shoreditch. My hack has one interesting distinguishing feature: it doesn’t make use of the API. Instead, it uses two simpler technologies: microformats and .

  1. Microformats. User profiles on Last.fm are marked up with . If a URL is provided, the user profile also makes use of the most powerful value of : rel="me". If that URL also links back to the Last.fm profile with rel="me"—even if in a roundabout way—that reciprocal link will be picked by Google’s Social Graph API. I’m already making use of that API on Huffduffer to display links to other profiles under the heading Elsewhere. So if someone provides a URL when they sign up to Huffduffer and they’re linking to their social network profiles, I can find out if they use Last.fm and what their username is. The URL structure of user profiles is consistent: http://www.last.fm/user/USERNAME.
  2. RSS. Last.fm provides users with a list of recommended free MP3s. This list is also provided as RSS. More specifically, the RSS feed is a podcast. After all, a podcast is nothing more than an RSS feed that uses enclosures. The URL structure of these podcasts is consistent: http://ws.audioscrobbler.com/2.0/user/USERNAME/podcast.rss.

So if, thanks to magic of XFN, I can figure out someone’s Last.fm username, it’s a simple matter to pull in their recommended music podcast. I’m pulling in the latest three recommended MP3s and displaying them on Huffduffer user profiles under the heading Last.fm recommends. You can see it in action on my Huffduffer profile or the profiles of any other good social citizens like Richard, Tom or Brian.

This isn’t the first little Huffduffer hack I’ve built on top of the Social Graph API. If a Huffduffer user has a Flickr account, their Flickr profile picture is displayed on their Huffduffer profile. When I get some time, I need to expand this little hack to also check for Twitter profiles and grab the profile picture from there as a fallback.

None of these little enhancements are essential features but I like the idea of rewarding people on Huffduffer for their activity on other sites. Ideally I’d like to have Huffduffer’s recommendation engine being partially driven by relationships on third-party sites. So your user profile might suggest something like, You should listen to this because so-and-so huffduffed it; you know one another on Twitter, Flickr, Last.fm…

Have you published a response to this? :



Jeremy Kieth has an extended post at https://adactio.com/articles/1533 that describes some of the functionality of how Huffduffer pulls in all the information. Wanting to take advantage of the functionality, I’d also long ago linked my account to my website, which, as part of the IndieWeb movement, has an hcard with the relevant rel=”me” links (including one for last.fm.) Unfortunately I’m guessing that the Huffduffer site only scrapes the data once upon registration and isn’t set up to go back and rescrape the data when the website field is updated. To test things out, I created a new account, and counter-tested it against both my current site (www.boffosocko.com) as well as a self-hosted version of the IndieWeb compatible WithKnown and a free WithKnown account. None of these seems to find any user avatar, nor does it suck in any of the alternate accounts under the “elsewhere” section. I’m a bit befuddled as to what may be going on here as it would seem that recent Huffduffer user Erinjo (https://huffduffer.com/erinjo) who I know to be an IndieWeb ninja has a fully fleshed out “profile” (avatar and elsewhere sections). What are the rest of us doing wrong?

# Monday, August 10th, 2015 at 10:12pm

Chris Aldrich

Replied to What should the list look like? · Issue #43 · jkup/awesome-personal-blogs by Jon Kuperman (GitHub)

Hey @fjoshuajr @lipis @hugmanrique @aletaschner

All of you submitted awesome ideas for what the list should look like! PRs were coming in so fast yesterday it kind of got lost in the shuffle so I was hoping to move the conversation into a single thread.

My thinking was:

  1. Make it a Markdown table
  2. Maybe a separate table for each letter of the alphabet?
  3. Add at least a field for what subjects the person talks about

How does that sound? Should we do something different? Hope you don’t mind but I’m gonna close the other issues in favor of discussing it all in here!


I’ve seen a few somewhat similar directory projects like this that might have some useful ux/ui/design ideas:

For additional metadata, one could run a microformats parser on the homepages of these sites and return social media presences in other locations using XFN’s rel="me" set up. Something like this is done by Jeremy Keith on his Huffduffer.com service where one signs up and inputs one’s website. His service then doesn’t need to ask for Twitter, Facebook, or Github handles explicitly. Instead it relies on the service going to the homepage listed and pulling out the rel="me" values and doing it automatically on their behalf. Since many web platforms have this microformat value it can make the data acquisition easier and less manual in many cases.

Syndicated copies to: