Foursquare live updates with the Push API using rails

Recently, I have been working extensively with the Foursquare API, also contributing to the open source foursquare2 gem.

While working on these features, I got a sneak peak preview to the new push API through Foursquare. Until I got that, I needed to pull checkins for each user, which was a slow and unefficient process.

Facebook had this feature for a while that for every checkin a user has, the application (he authorized) get a push notification to a callback URL – this is highly effective and more streamlined process.

So, Foursquare added it and like I said, I was happy to get a sneak peak to it.

Since it has no documentation yet, adding it to the application was not as smooth as I am used to, so I thought I would post the code for it on my blog, so you will have it easier then me :-)

Foursquare posts the json for the checkin to your controller with no parameter, so you need to use the post body in order to read it.

Here’s the controller code:

class FsRealtimeController < ApplicationController
protect\_from\_forgery :except => &#8216;post&#8217;

def post
posted_json =

if posted_json.blank?
render :nothing => true

parsed\_json = JSON.parse(posted\_json.to_s)

\# Do whatever you want with the parsed json

render :nothing => true

The typical json will look something like this:

"checkin": {
"createdAt": 1298129668,
"id": "4d5fe304d7206ea8e90aeef1",
"shout": "#4sqhackathon",
"timeZone": "America/New_York",
"type": "checkin",
"venue": {
"categories": [
"icon": "",
"id": "4bf58dd8d48988d125941735",
"name": "Tech Startup",
"parents": [
"Home / Work / Other",
"Corporate / Office"
"primary": true
"contact": {
"twitter": "gnrlassembly"
"id": "4c5c076c7735c9b6af0e8b72",
"location": {
"address": "902 Broadway, 4th Floor",
"city": "New York",
"crossStreet": "btw 20th and 21st",
"lat": 40.739197437761383,
"lng": -73.989760279655457,
"postalCode": "10010",
"state": "NY"
"name": "General Assembly",
"stats": {
"checkinsCount": 1357,
"usersCount": 557
"todos": {
"count": 0
"verified": false
"user": {
"firstName": "Neil",
"gender": "male",
"homeCity": "New York, NY",
"id": "2097",
"lastName": "Sanchala",
"photo": "",
"relationship": "self"

You can find some more details here (json from the link).

Submit to Hacker News

[NOTE] This post has been imported to Hugo from a Wordpress blog. It may be broken, missing images, code snippets or other information.

[NOTE] updated June 2, 2011. It's 2797 days old . This article may have outdated content.