« April 2005 | Main | June 2005 »

May 27, 2005

How FeedBurner Rewrites Links

I've been meaning to write this post for a while ... it probably belongs somewhere on the FeedBurner site, but I'll just put it here for now. I wanted to document exactly how and when FeedBurner will rewrite <link> elements in feeds.

First thing you might be thinking is "Why is FeedBurner rewriting links?" Well, one of the service that we offer to publishers is "clickthrough tracking", where we report the number of clickthroughs on a per-item basis. To do this, we rewrite the URL associated with the item and when it's clicked on, we log the click and then forward it on to the original item URL.

The second thing you need to know is that we never rewrite the <guid> element in an RSS 2.0 feed, although we may switch the isPermaLink attribute from "true" to "false" in some cases. The guid element is used in many cases to unique identify a feed element, and we don't want to mess with that.

Last thing to know is that if we ever rewrite the link to an item, we'll stick the original value of the link in a <feedburner:origLink> element, which is useful for some search engines and other consumers of the feed to reconcile items that may be syndicated into multiple endpoints.

If you want more details on exactly how the rewriting works, it's in the extended entry. Here is how rewriting works with the different formats. I'm pretty sure this is how we're handling each case, but this is from an older document and I should probably go in and check, so it's possible there are minor errors. Also, this doesn't show the origLink element that will be added.

RSS 0.91, 0.92, 0.93:

S.O.L. ... have to rewrite the <link> element, and no namespace extensions are allowed.  Thankfully, use of these formats is declining.

RSS 1.0

Preserve rdf:about as the item unique id

Case
Source feed
Burned Feed
1
<item rdf:about="URL1">
  <link>URL1</link>
</item>
<item:rdf about="URL1">
  <link>Rewrite-URL1</link>
</item>
2
<item rdf:about="URL1">
  (no link element)
</item>
<item:rdf about="URL1">
  <link>Rewrite-URL1</link>
</item>
3
<item rdf:about="URI">
  <link>URL1</link>
</item>
<item:rdf about="URI">
  <link>Rewrite-URL1</link>
</item>

Some notes:
  • Clients should never use rdf:about as a link destination (except maybe in the case when no <link> is provided), as it is only guaranteed to be a URI, not a URL.  Bloglines violates this principle by putting the URI in the href for the item title, even when it's not a valid URL.
  • Obviously, the value for the URI is also used in the <items> element earlier in the feed as the attribute value for rdf:resource.

RSS 2.0

Preserve guid as the item unique id, but not necessarily the isPermaLink attribute

Case
Source Feed
Burned Feed
1
<item>
  <link>URL1</link>
  <guid isPermaLink="false">ID</guid>
</item>
<item>
  <link>Rewrite-URL1</link>
  <guid isPermaLink="false">ID</guid>
</item>
2
<item>
  <guid isPermaLink="true">URL1</guid>
</item>
<item>
  <link>Rewrite-URL1</link>
  <guid isPermaLink="false">URL1</guid>
</item>
3
<item>
  <link>URL1</link>
</item>
<item>
  <link>Rewrite-URL1</link>
  <guid isPermaLink="false">URL1</guid>
</item>
4
<item>
  <link>URL1</link>
  <guid isPermaLink="true">URL1</guid>
</item>
<item>
  <link>Rewrite-URL1</link>
  <guid isPermaLink="false">URL1</guid>
</item>
5
<item>
  <link>URL1</link>
  <guid isPermaLink="true">URL2</guid>
</item>
<item>
  <link>Rewrite-URL1</link>
  <guid isPermaLink="false">URL2</guid>
</item>

Some notes:
  • Case #5 is ambiguous by providing both an item/link and an item/guid[@isPermaLink!="false"] and having them refer to different URLs.  We disambiguate by treating the link as a link and the guid as a non-permalinked uid.
  • Clients and aggregators should use the guid as the item's id, but if not present then use the link.
  • In cases where neither an item/link nor an item/guid[@isPermaLink!="false"] are present, there's nothing to rewrite so the item should pass through unchanged.

Atom

Preserve id as the id for the item

Case
Source Feed
Burned Feed
1
<entry>
  <link rel="alternate" type="text/html" href="URL1"/>
  <id>ID</id>
</entry>
<entry>
  <link rel="alternate" type="text/html" href="Rewrite-URL1"/>
  <id>ID</id>
</entry>

Not much to say here.  In cases where there might be multiple entry/link[@rel="alternate"] elements, we will prefer to rewrite entry/link[@rel="alternate" and @type="text/html"]/@href or, if not found, the first entry/link[@rel="alternate"].

May 23, 2005

The Second Coming of Ken Jennings

Just in case you haven't set up your Season Pass, a reminder that the finals of the Jeopardy! Ultimate Tournament of Champions start today! Ken's going to have some real competition from Jerome Vered and smooth-talkin' Brad Rutter. Three days, winner takes home $2,000,000!

May 20, 2005

Yahoo! Music Engine? I'm In!

Okay, after a week of using Yahoo! Music Engine Unlimited, here's my summary: I'm in! I'm going to really enjoy this service, and it's already changed the way I think about music. Here are some quick thoughts.

Music Selection
I've generally been happy with the music selection, especially with new releases. So, while I haven't found:

  • Stars
  • Spoon
  • Mogwai
  • Lou Barlow
  • Styrofoam
I have listened to over the past week:
  • Braid, Frame and Canvas
  • Eels, Blinking Lights And Other Revelations
  • Gary Jules, Trading Snakeoil For Wolftickets (minus Mad World, unfortunatley)
  • Incubus, A Crow Left Of The Murder
  • Joseph Arthur, Our Shadows Will Remain
  • Kaiser Chiefs, Employment
  • Nine Inch Nails, With Teeth
  • Royksopp, Melody AM
  • Ryan Adams, Cold Roses
  • System Of A Down, Mezmerize
  • The Chemical Brothers, Push The Button
  • Tricky, Maxinquaye
  • Some live albums from Bjork that I didn't even know existed
So, as you can see, that's a pretty good hit rate.

Radio
When I first checked out the radio feature, the sound quality was horrible. But now it's just as good as all the other music (which is very good), so I don't know what was up with that. Maybe it's because I'm an Unlimited subscriber now or something. Anyway, the personalized radio works great, although it was a little kludgy accessing my station on different machines: I thought at first it didn't keep that information server-side, but once I messed around with the client it eventually located my server-side profile.

MyStation is a great way to slowly crawl your way to new music, and you can see the immediate benefits of rating musical artists as you go. When it plays a song, it tells you why it's playing the song ("Audioslave, Recommended by fans of Incubus"), and you can easily jump to the artist to play their music.

All in all, I really like the radio feature and I imagine this will become my new "Party Shuffle" -- why shuffle with just your own music?

Here's a link to my station: eric_lunt's Station.

The Player
The player is fine. Not great, but not bad. Certainly no worse than iTunes. It's annoying that it keeps trying to push Y! Messenger on me, and I've had to restart the client a few times, but the fact that it's a plug-in based client is promising. I'm sure the client will improve over time.

One thing I really miss is that there doesn't seem to be much of a sense of a "queue", so when I come across something that I want to listen to later, I have resorted to adding it to a "Listen Later" playlist.

And yes, the mini-mode sucks, but that's supposedly addressed by a plug-in I haven't installed yet.

DRM
So, is the music rental model really viable? For me, the answer is "for the right price, you bet!". Everything has a price, and for $4.99/mo I'm willing to endure quite a bit of inconvenience. And truthfully, it's really not bad. You can have your account active on up to three machines, it works great disconnected, and it's all handled invisibly by the client.

So, I'm sold. So much so that I'm now thinking about mothballing my iPod and looking for a "PlaysForSure" portable player that doesn't suck. Anyone have any suggestions? Also, I'd love to have this music work with my tried and true (maybe that should be "tired" and true at this point) Audtiotron, but I don't think that's in the cards. Guess I'll have to buy-in 100% and get a Windows Media Center machine.

Nice job, Yahoo! And Microsoft: you somehow got me to buy into your evil empire. I feel dirty, but I'll be enjoying lots of great music.

May 15, 2005

The Empire Strikes Back

Most fans cite Episode V as their favorite Star Wars movie, and I have to agree. A fantastic piece of storytelling and surprisingly deep character development, this movie is everything a "movie #2 of 3" should be.

Star Wars: Episode V - The Empire Strikes Back (****)

May 13, 2005

Star Wars

In preparation for the new movie, we thought we'd go back and watch all of the other Star Wars movies. ANH, as Jedi geeks like to refer to it, was a fun ride. I hadn't seen the new Lucasized version of the movie with the new cantina scenes and the Jabba scene, so that seemed a bit wierd, but it sure was great to watch the movie again, now fitting it into the larger context of the Star Wars universe that was created after it was originally released.

Star Wars (***1/2)

Syndicate Conference

I'll be at the Syndicate conference in NY next Tuesday and Wednesday. Hope to see you there!

May 11, 2005

Why Won't Yahoo! Take My Money?

So, I've just spent 30 minutes trying to get Yahoo! Music to take my credit card information so I can purchase their Unlimited subscription service. I enter all my info in, hit "Continue", and keep coming back to the payment page. No error message, no nothing. Try a different card? Same thing. Send support a message? Uh, how? Different browser? Nope, same thing.

Oh well. I guess I could use that $60 elsewhere. I had such high hopes, and now all I have is bad will.

Update: Well, it worked if I created an entirely new Y! account. I guess it didn't like my circa 1995 "elunt" account. I then had to restart the client a few times for it to correctly play streamed music.

Initial impressions are mixed. I think I really could like the subscription model, given how much time I sit in front of my computer listening to music. The Y! radio stations sounded like horrible flangy mp3s, like it was using a 32kbps bitrate or something -- pretty much unlistenable. Artist selection is okay, but I came across some albums (like Beck's Guero) that didn't offer all of the tracks!

Of course, for only $60 a year, I'll put up with a lot of awkwardness if I can get to even 50% of the music I really want to hear. I've got six more days to decide if I want to keep it.