Guest
Public paste!

Untitled

By: a guest | Mar 22nd, 2010 | Syntax: Ruby | Size: 1.82 KB | Hits: 131 | Expires: Never
Copy text to clipboard
  1. require 'rubygems'
  2. require 'digest/md5'
  3. require 'rest_client'
  4. require 'json'
  5. require 'pp'
  6.  
  7. module Facebook
  8.   Config ={
  9.     :key => 'xxx',
  10.     :secret => 'xx',
  11.     :restserver => 'http://api.facebook.com/restserver.php'
  12.   }
  13.    
  14.   module API
  15.     Defaults = {
  16.       'v' => '1.0',
  17.       'format' => 'json',
  18.       'api_key' => Config[:key]
  19.     }
  20.  
  21.     class Session
  22.  
  23.       attr_reader :auth_token, :auth_session
  24.  
  25.       def initialize(opts = {})
  26.         @auth_token, @auth_session = nil, nil
  27.       end
  28.    
  29.       def request_auth_token
  30.         return @auth_token unless @auth_token.nil?
  31.         token = request( 'method' => 'Auth.createToken')
  32.         @auth_token = token.to_a.first.strip.tr('"', '')
  33.         @auth_token
  34.       end
  35.  
  36.       def request_auth_session
  37.         return @auth_session unless @auth_session.nil?
  38.         request_auth_token
  39.         session = request({'method' => 'Auth.getSession', 'auth_token' => @auth_token})
  40.         @auth_session = session
  41.       end
  42.  
  43.       def query(q)
  44.         request('method' => 'Fql.query', 'query' => q, 'call_id' => Time.now.to_i)
  45.       end
  46.  
  47.       private
  48.  
  49.       def request(args, url="http://api.facebook.com/restserver.php")
  50.         args = API::Defaults.merge(args)
  51.         @response = ""
  52.         RestClient.post(url, args.merge('sig' => signature_for(args))) do |response|
  53.           @response = JSON.parse(response.body) rescue response.body.strip
  54.           yield @response rescue LocalJumpError
  55.         end
  56.         return @response
  57.       end
  58.  
  59.       def signature_for(params)
  60.         request_str = params.keys.sort.map{|k| "#{k.to_s}=#{params[k.to_s]}" }.join
  61.         Digest::MD5.hexdigest(request_str + Config[:secret])
  62.       end
  63.  
  64.     end
  65.   end
  66.  
  67. end
  68.  
  69. fbs = Facebook::API::Session.new
  70. pp fbs.query("SELECT name FROM user WHERE username='lkundrak'")