Accessing Bizo API using Ruby OAuth

Alex Boisvert - 08 Jun 2010

During a recent HackDay, I wrote a search-engine-like frontend to our multi-dimensional business demographic database.

Among other things, the interface provides search term suggestions based on business title classification, using the Classify operation of the Bizo API.

I chose to use Ruby and the lightweight Sinatra web framework for fast prototyping and since the Bizo API uses OAuth for authentication, I reached out for the excellent OAuth gem.

Now, while the documentation is good it took me a little time to grok the OAuth API and figure out how to use it. The Bizo API does not use a RequestToken; instead we use an API key and a shared secret. Since the OAuth gem documentation didn't include any example for this use-case, I figured I'd post my code here as a starting point for other people to reuse.

Without further ado, here's the short code fragment:require 'rubygems'

    require 'oauth'
    require 'oauth/consumer'
    require 'json'

    key = 'xxxxxxxx'
    secret = 'yyyyyyyy'

    consumer = OAuth::Consumer.new(key, secret, {
      :site         => "http://api.bizographics.com",
      :scheme       => :query_string,
      :http_method  => :get
    })

    title = "VP of Marketing"
    path = URI.escape("/v1/classify.json?api_key=#{key}&title=#{title}")

    response = consumer.request(:get, path)

    # Display response
    p JSON.parse(response.body)

If you're curious, here's the JSON response for the "VP of Market..." title classification,

    {
      "usage" => 1,
      "bizographics" => {
        "group" => { "name" => "High Net Worth", "code" => "high_net_worth" },
        "functional_area" => [
          {"name" => "Sales", "code" => "sales" },
          {"name" => "Marketing", "code" => "marketing" }
        ],
        "seniority" => {"name" => "Executives", "code" => "executive" }
      }
    }

Hopefully this is useful to Rubyists out there needing quick OAuth integration using HTTP GET and a query string and don't need to go through the token exchange process.

comments powered by Disqus