Ruby GData API, Google Calendar, and redirects

6
May/10
0

The Ruby GData API provides for accessing a number of Google data sources: Google Apps, Analytics, YouTube, you name it (http://code.google.com/apis/gdata/docs/directory.html).

When you access a Google Calendar that is managed through a Google Apps username (e.g., you@example.com, as opposed to you@gmail.com), the standard lookup feed (example: http://www.google.com/calendar/feeds/default/owncalendars/full) redirects after you access it. (Not the case for calendars owned by gmail.com addresses, it would seem.)

Well, bizarrely, in the Ruby implementation (which you can find here: http://code.google.com/p/gdata-ruby-util/ Ruby 1.9 version here: http://code.google.com/u/hoanga/), redirects are not handled properly.

Handling a redirect is a “must have” to get into the Calendar data for a Google Apps user.

The master code repository is hosted on code.google.com, so since it doesn’t provide for submitting patches as easily as Github, I’ll just lob a monkeypatch fix here . . .


# Fix for GData::Client::Calendar failure to follow redirects
module GData
  module Client
    class Calendar
      def make_request(method, url, body = '', retries = 4)
        response = super(method, url, body)
        if response.status_code == 302 and retries > 0
          @session_cookie = response.headers['set-cookie']
          # original wasn't capturing the redirect location
          redirect_url = response.headers['location']
          return self.make_request(method, redirect_url, body, retries - 1)
        else
          return response
        end
      end
    end
  end
end

For Rails, you can put this into a file in config/initializers

Filed under: Code
Comments (0) Trackbacks (0)

No comments yet.

Leave a comment

No trackbacks yet.