Curiosity is bliss    Archive    Feed    About    Search

Julien Couvreur's programming blog and more

RFC: RSS one-click subscription

 

One reason RSS/Atom feeds aren't mainstream is there is no easy one-click subscription and the first feed encounter isn't user-friendly enough. Jon Udell and David Ely described the problem.

Current solutions:

  • have the aggregator clients register with some mime-type (for either RSS or OPML),
  • have a new protocol uri scheme (feed:),
  • support as many clients as possible via javascript (see QuickSub),
  • transform the RSS with XSL in the browser to help newbies (no really a one-click subscription solution though).


New solution:
Note that this is a draft. I am in the process of prototyping this. I'll post it when I have the complete working solution.

The solution relies on the use of the html object tag. That tag is used for embedding flash or quicktime in web pages, for example:

<object classid="clsid:166B1BCA-3F9C-11CF-8075-444553540000"
  codebase="http://download.macromedia.com/(...)"
  ID=demo width=20 height=40>
  <param name=src value="../demo.dcr">
</object>

Update: For cross-browser support, the object tag needs to include a embed tag as well. More about this in the follow-up.

The object tag has very nice properties: when you don't have the required object or if you have an old browser, it offers a fall back.
The "subscriber" button should support any platform that can run a flash player in the browser.

In the case of feed subscription:

  • if you have an aggregator installed, the embedded object could be handled by the aggregator or installed separately and configured for your specific aggregator. That's how you get one-click subscription,
  • if you don't have an aggregator, you click a regular feed button that takes you to a beautified feed page, that has a quick intro and a link to an aggregator repository. If you really want to see the feed's XML, you can click a javascript powered button.

Replace the orange Feed button:
The orange feed button needs to be wrapped with an object tag:

<object classid="clsid:0123456789ABCDEF [1]">
  <param name="feedurl" value="http://feedurl [2]">
  <param name="description" value="blah blah [3]">
  <param name="imageurl" value="http://buttonimageurl [4]">

  <a href="http://feedurl [2]"><img src="http://buttonimageurl [4]" /></a>
<object>

If the ActiveX control with class ID [1] is installed, it displays a custom "subscribe" button. When you click on it, it uses the feedurl parameter [3] to subscribe.
If the control isn't installed or the browser doesn't support embedded objects, the classic orange RSS button [4] is displayed as a link to the RSS.


Change the RSS:
The RSS feed should be transformed via client-side XSL (by inserting one line of XML: <?xml-stylesheet type="text/xsl" href="/rss2.0-to-html.xslt" media="screen" version="1.0" ?>) to look like:

<object classid="clsid:0123456789ABCDEF [1]">
  <param name="feedurl" value="http://feedurl [2]">
  <param name="feeddescription" value="blah blah [3]">
  You are missing a piece of software to properly use this content. You can get it from http://rssaggregatorsurl as well as get more information.
<object>

<button onclick="viewRawXML() [5]">View the feed</button>
<script>function viewRawXML() {
  (... remove the xsl stylesheet from the DOM ...)
} </script>

This part is meant to help new users understand what feeds and aggregators are. Very few users actually need to the the raw XML of the feed. My own RSS feed implements this kind of XSL transform, and more sites are starting to adopt this technique as well.

A list apart describes how to remove/switch a stylesheet using javascript.


Pros:

  • help new users understanding feeds and finding an aggregator to install,
  • one-click subscription for anyone that has an aggregator,
  • should fall back nicely for users that don't have an aggregator yet (will explain them how to get one) or to existing mechanisms like QuickSub, and in old browsers (users need to copy the link manually into their aggregator),
  • it should be possible to re-use the same ActiveX control for most aggregators. An aggregator would just need to configure a registry setting for the subscription url (say http://bloglines.com/sub?rssurl=%1&description=%2, or http://localhost:8003/sub?url=%1&info=%2). Aggregators that don't support registering using a url, should create their own control and install it.
  • no new mime-type or protocol,
  • it's still possible for power users to see the raw XML feed, but most users won't

Cons:

  • requires blogs to start using the control for both the orange Feed button and the XSL for the feed XML (it would help if MovableType could include the object tag in default template),
  • after the standard GUID and parameters for the object are decided, backward compatibility should be carefully maintained.


Parameters:
The component needs the url for the feed.
A parameter should specify the image that the button will display. This way the blog still has control over his layout and the button doesn't add any constraint.

It could also have a description for the feed, like "Curiosity is Bliss (RSS2.0)". This description could be used when the aggregator asks for confirmation, or maybe as a tooltip when hovering over the button.

Next steps:
I'm learning how to write a custom component for use as an embedded object. I'll write a sample for bloglines one-click subscription and will convert this blog to support this convention (the same way some blogs are currently using QuickSub).
I'd like to get feedback on whether bloggers and aggregators would be ready to support such a solution. Thanks for your comments on that and any technical aspects as well.

Update: I started the prototype and ran into an ActiveX warning issue in IE, when using parameters ("An ActiveX control on this page might be unsafe to interact with other parts of the page. Do you want to allow this interaction?"). I don't know yet how to get ride of it (signing, config, ...?).

Update: Removed warning with a registry setting (safe for initialization).

Update: The prototype is well underway. It basically works, but I still have work items:

  • Open a small/simple popup window on the url from the registry,
  • Add a right-click menu to the button with "subscribe", "learn more", "copy feed location", "copy subscriber", "preview" (users should never see a raw XML feed),
  • Prototype the xsl stylesheet switching in javascript,
  • Let the control size itself and accept a relative url for the image path,
  • Make it work in Mozilla,
  • Have some kind of effect (blurring?) when hover over button to differentiate from a regular image link,
  • Make an installer and configuration utility (to pick the aggregator you use).


Some of the things that I came accross so far:
For the button to work on the XSL-transformed feed page, some javascript is needed to pass in the current browser location into the button. The page should also include instructions on how to manually copy the feed url.

The Mozilla implementation will probably need a mime-type defined (for the <embed> tag, like flash)... which makes me think this turns out to be just a variant of the mime-type solution.
The difference is that instead of creating a new file type or format, the "media" (which is the feed information) is inlined in the <object> tag.
That works because a feed info is only a url, today, but this might evolve (say with WS-Eventing subscriptions). In that case we'll move toward a more complex format again, which probably will be loaded from a separate url as usual media are.
The button will be extensible to support these new/richer subscription models.

I thought about implementing the control using Flash, but that means an aggregator can't install it's own version of the "Feed Subscriber"... But still it should be possible to write Feed Subscribers for all platforms that Flash support.

Update: Fixed the mention of the feed: "protocol", as it is instead an URI scheme (thx Dare).

Update (2005-01-17): Winer brings up the one-click subscription problem again. Same solutions re-hashed in the comment thread, no single best solution stands out...

______________________________________

Good work - looks like you might be onto something.

Couple of thoughts: if possible Mozilla should use the <object> tag too, to keep with the specs (some related material here).
Also it would probably be desirable to provide the alternatives of View this Feed or Subscribeto this Feed.

Posted by: Danny (April 6, 2004 02:09 AM) ______________________________________

related material on object vs. embed:
http://www.protocol7.com/svg-wiki/ow.asp?EmbedingSvgInHTML

Posted by: Danny (April 6, 2004 02:10 AM) ______________________________________

Cool, thanks a lot. I'll make sure to read it.
AListApart also has an object vs. embed article: http://www.alistapart.com/articles/flashsatay/ (Flash Satay: Embedding Flash While Supporting Standards).

Posted by: Dumky (April 6, 2004 09:35 AM) ______________________________________

My, what a Rube-Goldbergeque contraption to make up for what is basically an OS deficiency!

All I do, to subscribe to an RSS/Atom feed is drag the link from my Browser's window into my Aggregator's window. _Bing!_ I'm subscribed.

At least on my blog, clicking on an RSS/Atom link brings up a popup window, instructing the reader to ... _ahem!_ ... drag the link from the Browser window into their Aggregator.

Posted by: Jacques Distler (April 9, 2004 07:21 PM)
comments powered by Disqus