Exclusive: How To Get OPML For Google Reader

Now Updated
This Really Is How TO Get OPML For Google Reader

For full details see the second half of this article

This isn’t a typical “how To” article, because currently this feature doesn’t exist, but it could with just a little 20% time at Google.

Whilst you can download an OPML file to import into other feed readers, or to upload to the web in another location, you can’t currently access it directly.

Whilst many tech sites are lauding the new blogroll for Google Reader users, it isn’t really very useful, and is without doubt extremely ugly compared to many widgets that use OPML, such as SpringWidgets, or even a work-around previously available.

The Key To OPML With Google Reader

It isn’t some secret hidden interface, but a person, Steve Lacey who created the widget blogroll in his 20% time at Google.

All you need to do is impress upon him that you really would like to do more with your collection of feeds in Google Reader and he might be persuaded to make some small additions to his existing code.

Steve already seems to be receptive to the idea, asking open questions. All that might be required is to make him a blogging superstar with lots of links and comments ;)

Google is meant to be all about “Open” these days but whilst I think they have made some mistakes, there is a chance for one aspect of our online presence to become truly open… and useful.

If you want access to an OPML version of your subscriptions in Google Reader, directly from a server rather than having to export it, I suggest you raise your voices.

Exclusive: How To Get OPML For Google Reader

Sometimes you just have to ask for the right features at the right time, and doors open.

Mihai Parparita from the Google Reader team popped by and gave away the secret to what is currently an unannounced feature of Google Reader, that isn’t currently in the interface but can be accessed.

Actually, OPML export for blogrolls is already supported, we just couldn’t figure out where to put it in the UI. To get at it, look at an existing blogroll URL. For example, here is Steve’s:


http://www.google.com/reader/public/javascript-sub/user/06964043342831417138/label/my-feeds

To get at the OPML version, replace “javascript-sub” with “subscriptions”, giving you:


http://www.google.com/reader/public/subscriptions/user/06964043342831417138/label/my-feeds

Mihai Parparita
Google Reader Engineer

Expect a more extensive tutorial to be added to this story in the next few hours.

Update 2

This doesn’t seem to be quite what we are looking for.

If you access the file via a web browser, you get to download your OPML as a file google-reader-subscriptions.xml

If you access using a web application, such as a tool to check headers, you see that it is being returned as an attachment.

1. Requesting: http://www.google.com/reader/public/subscriptions/user/06964043342831417138/label/my-feeds
GET /reader/public/subscriptions/user/06964043342831417138/label/my-feeds HTTP/1.1
Connection: Keep-Alive
Keep-Alive: 300
Accept:*/*
Host: www.google.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8) Gecko/20051111 Firefox/1.5

Server Response: 200 OK
Content-Type: text/xml; charset=UTF-8
Content-Disposition: attachment;filename=google-reader-subscriptions.xml
Content-Encoding: gzip
Cache-Control: private
Date: Thu, 08 Nov 2007 17:21:19 GMT
Server: GFE/1.3
X-Cache: MISS from .
Via: 1.0 .:80 (squid)
Connection: close

This doesn’t work the same way as accessing your Technorati favorites as an opml file such as http://feeds.technorati.com/faves/AndyBeard?format=opml

1. Requesting: http://feeds.technorati.com/faves/AndyBeard?format=opml
GET /faves/AndyBeard?format=opml HTTP/1.1
Connection: Keep-Alive
Keep-Alive: 300
Accept:*/*
Host: feeds.technorati.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8) Gecko/20051111 Firefox/1.5

Server Response: 200 OK
Date: Thu, 08 Nov 2007 17:05:33 GMT
Server: Apache
Set-Cookie: tvisitor=216.154.235.143.1194541533975889; path=/; expires=Tue, 06-Nov-12 17:05:33 GMT; domain=.technorati.com
Cache-Control: max-age=1800
Expires: Thu, 08 Nov 2007 17:35:37 GMT
Content-Type: text/xml; charset=UTF-8
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Transfer-Encoding: chunked

This isn’t the easily access OPML we are looking for

Example With SpringWidgets

Whilst the OPML will not work when creating a new RSS reader widget, you can force it to work with an existing widget.

If you just provide the OPML file direct from Google Reader, it returns an error.

Update 3

Now comparing this with Bloglines, which also returns the OPML as an attachment

http://www.bloglines.com/export?id=AndrewBeard

Here are the headers returned

1. Requesting: http://www.bloglines.com/export?id=AndrewBeard
GET /export?id=AndrewBeard HTTP/1.1
Connection: Keep-Alive
Keep-Alive: 300
Accept:*/*
Host: www.bloglines.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8) Gecko/20051111 Firefox/1.5

Server Response: 200 OK
Date: Thu, 08 Nov 2007 17:53:38 GMT
Server: Apache/2.2.6-dev (Unix) mod_ssl/2.2.6-dev OpenSSL/0.9.7a
P3P: CP=”NOI DSP COR NID CURa ADMa DEVa TAIa PSAa PSDa OUR STP IND UNI COM NAV INT STA”
Content-Disposition: attachment;filename=export.opml
Vary: User-Agent,Accept-Encoding
Content-Encoding: gzip
Content-Length: 472
Keep-Alive: timeout=300, max=100
Connection: Keep-Alive
Content-Type: text/xml; charset=utf-8

Lets compare the XML returned

Google returns the following

<opml version="1.0">
    <head><base href="http://www.google.com/reader/public/subscriptions/user/06964043342831417138/label/my-feeds">
        <title>"my-feeds" subscriptions via Steve Lacey in Google Reader</title>
    </head>

Here is the Bloglines Header

<?xml version="1.0" encoding="utf-8"?>
<opml version="1.1">
<head><base href="http://www.bloglines.com/export?id=AndrewBeard">
    <title>Bloglines Subscriptions</title>
    <dateCreated>Thu, 08 Nov 2007 17:58:31 GMT</dateCreated>
    <ownerName>AndrewBeard</ownerName>
</head>

Thus there is a difference in the headers being returned

If you add the following

<?xml version="1.0" encoding="utf-8"?>

You get a working OPML feed, here is an example
http://andybeard.eu/google-reader-test-opml.xml

Liked this post? Follow this blog to get more. Follow

Comments

  1. says

    Actually, OPML export for blogrolls is already supported, we just couldn’t figure out where to put it in the UI. To get at it, look at an existing blogroll URL. For example, here is Steve’s:

    http://www.google.com/reader/public/javascript-sub/user/06964043342831417138/label/my-feeds

    To get at the OPML version, replace “javascript-sub” with “subscriptions”, giving you:

    http://www.google.com/reader/public/subscriptions/user/06964043342831417138/label/my-feeds

    Mihai Parparita
    Google Reader Engineer

  2. says

    Andy, Great stuff! And great timing. It’s not more than 48 hours since I was poking around Google Reader trying to work out how to connect to the OPML file for an upcoming post about who’s in my feed reader (of course you’re in there). I was thinking it would be cool if I could create a live blogroll from Google Reader and was disappointed when I couldn’t. Seems like this is going to be commonplace very shortly.

    Thanks for breaking the news (to me at least) and for following this up and helping to get a better result for us all.

Trackbacks