Skip to content

Latest commit

 

History

History
57 lines (47 loc) · 1.93 KB

README.rdoc

File metadata and controls

57 lines (47 loc) · 1.93 KB

foursquare APIv2 Sinatra Example

This shows how easy it is to use Foursquare APIv2 via the OAuth2 gem (requires v0.4.1).

code

require 'rubygems'
require 'sinatra'
gem 'oauth2', '=0.4.1'
require 'oauth2'
require 'json'
require 'net/https'

# as found on https://foursquare.com/oauth/
CLIENT_ID = your_client_id
CLIENT_SECRET = your_client_secret
CALLBACK_PATH = '/auth/foursquare/callback'

def client
    OAuth2::Client.new(CLIENT_ID, CLIENT_SECRET, 
      :site => 'http://foursquare.com/v2/',
      :request_token_path => "/oauth2/request_token",
      :access_token_path  => "/oauth2/access_token",
      :authorize_path     => "/oauth2/authenticate?response_type=code",
      :parse_json => true
    )
end

get '/auth/foursquare/callback' do
  # access_token = client.web_server.get_access_token(params[:code], :redirect_uri => redirect_uri)
  # It would be better to use the line above but it returns a 301 error, so I use the hack below instead.

  # start hack
  uri = URI.parse("https://foursquare.com/oauth2/access_token?client_id=#{CLIENT_ID}&client_secret=#{CLIENT_SECRET}&grant_type=authorization_code&redirect_uri=#{redirect_uri}&code=" + params[:code])
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE

  request = Net::HTTP::Get.new(uri.request_uri)
  response = JSON.parse(http.request(request).body)
  access_token = OAuth2::AccessToken.new(client, response["access_token"])
  # end hack

  # some user data as an example
  user = access_token.get('https://api.foursquare.com/v2/users/self')
  user.inspect
end

def redirect_uri()
  uri = URI.parse(request.url)
  uri.path = CALLBACK_PATH
  uri.query = nil
  uri.to_s
end

get '/' do
  redirect client.web_server.authorize_url(:redirect_uri => redirect_uri)
end