Make Your Own Google Plus Feed

Plus Feed

Background

I recently mentioned why I like feeds as a developer:

I know RSS has been dead since 1982, but I’m still finding it very useful for powering status updates on my homepage (http://mahemoff.com). Whether Twitter, WordPress, Posterous, Lanyrd, Plancast, I know I can always scrape the most recent item with a one-liner.

It’s not clear if and when Google will release RSS feeds for Plus, though the comments there certainly indicate they’ve given it a lot of thought. There’s really too many variables to make speculation anything more than a fun discussion in the pub.

Fortunately, Russell Beattie has stepped up to make a third-party feed service, PlusFeed. but it seems to have been hammered in 2 waves: first, by an army of hungry feed bots; and second, by an increase in App Engine pricing. Even at this early stage, it’s costing $35/day, though there are probably optimisations possible as referenced in the comments. (UPDATE: Russell’s service is now offline due to the price whack, but the open-source project lives on. Follow the instructions here to roll your own for free.)

In any event, since I’m using PlusFeed for my homepage, I want to be sure it’s running, so I wondered about writing my own feed service. But in a second stroke of awesome, I don’t have to, as Plus Feed is actually open source.

Install A Feed Server on Google App Engine

It’s very easy to fork and deploy PlusFeed, even if you’ve not used App Engine before …

  1. Sign up for an App Engine account if you don’t already have one, and install the Python SDK. I recommend running the GUI for ease of use.
  2. From your App Engine dashboard, hit “Create Application” and give your feed a unique name. Let’s say “whataplusfeed”.
  3. Download Russell’s project: git clone https://github.com/russellbeattie/plusfeed.git. (You may wish to fork it on GitHub so you can maintain your updates.)
  4. You only need to make two changes – here you can see what I did. Specifically, change the project name in app.yaml to “whataplusfeed”. Then in plusfeed.py, replace the “idurls” regular expression with your own plus ID (the big number you see in your profile URL, e.g. https://plus.google.com/106413090159067280619/posts).
  5. Import your project into the GUI, test it locally, and deploy it! Now your personal Plus feed is running at http://whataplusfeed.appspot.com/<your-plus-id>

You could easily whitelist a handful of IDs too, e.g. for all the staff in a company or a group of friends. Or you could just use the original project as is; it would make a nice public service, but unless a lot of others step up too, you’re going to be liable for big bucks once the feed bots find your server. In any event, you can choose which feeds are offered by providing an appropriate regular expression in plusfeed.py (step 3).

The Javascript Grid

Google App Engine launched this week and one controversial aspect was that it only works for Python. It wasn’t a big deal to me. Firstly, it’s a good way for Google to limit the initial market. Secondly, Google specialises in Python and not Ruby – quoth Yegge: “One of the fences in this big playground is your choice of programming language. You have to play inside the fence defined by C++, Java, Python, and JavaScript.” After all, Google has Guido but not Matz or DHH. (I wonder how many times someone has asked that guy if he’d consider a position at Google!) Thirdly, who cares? Do you really think it will stay Python-only for long? Heavens to Murgatroyd!!!

Dion’s take (read his post for the full detail):

Anyway, I have a dream and surprisingly it doesn’t involve Ruby and unsurprisingly it does involve the magic bullet that is server-side Javascript.

How cool would it be if Google bought Aptana or AppJet – or did their own work with Jaxer or Rhino – and made a robust, elastic, server-side Javascript platform? Then roll in Rhino and Rails, hopefully reworked from Rails considerably to take into account the synergies delivered by dual-side Javascript. Backed by BigTable of course!

That’s the tipping point right there!