jpinnix (owner)

Fork Of

Revisions

gist: 107666 Download_button fork
public
Public Clone URL: git://gist.github.com/107666.git
Embed All Files: show embed
facebook_client.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Lo-fi client for the Facebook API. E.g.:
#
# fb = FacebookClient.new(:api_key => 'api-key', :secret => 'secret')
# fb.call 'users.getInfo', :session_key => 'session-key', :uids => 'user-id', :fields => 'birthday'
#
class FacebookClient
  def initialize(default_params={})
    @default_params = default_params.reverse_merge({
      :rest_server => 'http://api.new.facebook.com/restserver.php',
      :format => 'JSON',
      :v => '1.0',
      :api_key => '',
      :secret => '',
    })
  end
 
  def call(method, params={})
    params = @default_params.merge(params)
    params[:method] ||= 'facebook.' + method
    params[:call_id] ||= Time.now.to_f.to_s
    secret = params.delete(:secret)
    rest_server = params.delete(:rest_server)
 
    raw_string = params.inject([]) { |args, pair| args << pair.join('=') }.sort.join
    params[:sig] = Digest::MD5.hexdigest(raw_string + secret)
 
    response = Net::HTTP.post_form(URI.parse(rest_server), params)
    begin
      JSON.parse(response.read_body)
    rescue JSON::ParserError
      # some FB API methods, like send notification, don't return valid JSON, but rather JSON tokens, like '"123123"'
      response.read_body
    end
  end
end