Untitled
By: a guest | Mar 22nd, 2010 | Syntax:
Ruby | Size: 1.82 KB | Hits: 131 | Expires: Never
require 'rubygems'
require 'digest/md5'
require 'rest_client'
require 'json'
require 'pp'
module Facebook
Config ={
:key => 'xxx',
:secret => 'xx',
:restserver => 'http://api.facebook.com/restserver.php'
}
module API
Defaults = {
'v' => '1.0',
'format' => 'json',
'api_key' => Config[:key]
}
class Session
attr_reader :auth_token, :auth_session
def initialize(opts = {})
@auth_token, @auth_session = nil, nil
end
def request_auth_token
return @auth_token unless @auth_token.nil?
token = request( 'method' => 'Auth.createToken')
@auth_token = token.to_a.first.strip.tr('"', '')
@auth_token
end
def request_auth_session
return @auth_session unless @auth_session.nil?
request_auth_token
session = request({'method' => 'Auth.getSession', 'auth_token' => @auth_token})
@auth_session = session
end
def query(q)
request('method' => 'Fql.query', 'query' => q, 'call_id' => Time.now.to_i)
end
private
def request(args, url="http://api.facebook.com/restserver.php")
args = API::Defaults.merge(args)
@response = ""
RestClient.post(url, args.merge('sig' => signature_for(args))) do |response|
@response = JSON.parse(response.body) rescue response.body.strip
yield @response rescue LocalJumpError
end
return @response
end
def signature_for(params)
request_str = params.keys.sort.map{|k| "#{k.to_s}=#{params[k.to_s]}" }.join
Digest::MD5.hexdigest(request_str + Config[:secret])
end
end
end
end
fbs = Facebook::API::Session.new
pp fbs.query("SELECT name FROM user WHERE username='lkundrak'")