module Facebook::Client
Public Instance Methods
accept()
click to toggle source
# File lib/rest-core/client/facebook.rb, line 81 def accept ; headers['Accept'] ; end
accept=(val;)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 82 def accept= val; headers['Accept'] = val; end
access_token()
click to toggle source
# File lib/rest-core/client/facebook.rb, line 72 def access_token data['access_token'] || data['oauth_token'] if data.kind_of?(Hash) end
access_token=(token)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 76 def access_token= token data['access_token'] = token if data.kind_of?(Hash) end
exchange_sessions(query={})
click to toggle source
# File lib/rest-core/client/facebook.rb, line 255 def exchange_sessions query={}, opts={}, &cb q = {:client_id => app_id, :client_secret => secret, :type => 'client_cred'}.merge(query) post(url('oauth/exchange_sessions', q), {}, {}, opts, &cb) end
fbs()
click to toggle source
# File lib/rest-core/client/facebook.rb, line 195 def fbs "#{fbs_without_sig(data).join('&')}&sig=#{calculate_sig(data)}" end
for_pages(hash, pages=1, opts={}) { |nil| ... }
click to toggle source
# File lib/rest-core/client/facebook.rb, line 117 def for_pages hash, pages=1, opts={}, kind=:next_page, &cb if hash.nil? nil elsif pages <= 0 if block_given? yield(nil) self else nil end elsif pages == 1 if block_given? yield(hash) yield(nil) self else hash end else if block_given? yield(hash) send(kind, hash, opts){ |result| if result.nil? yield(nil) else for_pages(result, pages - 1, opts, kind, &cb) end } else merge_data( for_pages(send(kind, hash, opts), pages - 1, opts, kind), hash) end end end
fql(code, query={})
click to toggle source
# File lib/rest-core/client/facebook.rb, line 246 def fql code, query={}, opts={}, &cb old_rest('fql.query', {:query => code}.merge(query), opts, &cb) end
fql_multi(codes, query={})
click to toggle source
# File lib/rest-core/client/facebook.rb, line 250 def fql_multi codes, query={}, opts={}, &cb old_rest('fql.multiquery', {:queries => Json.encode(codes)}.merge(query), opts, &cb) end
lang()
click to toggle source
# File lib/rest-core/client/facebook.rb, line 83 def lang ; headers['Accept-Language'] ; end
lang=(val;)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 84 def lang= val; headers['Accept-Language'] = val; end
me(query={})
click to toggle source
# File lib/rest-core/client/facebook.rb, line 68 def me query={}, opts={} get('me', query, opts) end
next_page(hash, opts={}) { |nil| ... }
click to toggle source
# File lib/rest-core/client/facebook.rb, line 88 def next_page hash, opts={}, &cb if hash.nil? nil elsif hash['paging'].kind_of?(Hash) && hash['paging']['next'] # FIXME: facebook is returning broken URI.... get(URI.encode(hash['paging']['next']), {}, opts, &cb) elsif block_given? yield(nil) self else nil end end
old_rest(path, query={})
click to toggle source
old rest facebook api, i will definitely love to remove them someday
# File lib/rest-core/client/facebook.rb, line 237 def old_rest path, query={}, opts={}, &cb get("method/#{path}", {:format => 'json'}.merge(query), {:site => old_site}.merge(opts), &cb) end
parse_fbs!(fbs)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 168 def parse_fbs! fbs self.data = check_sig_and_return_data( # take out facebook sometimes there but sometimes not quotes in cookies ParseQuery.parse_query(fbs.to_s.sub(/^"/, '').sub(/"$/, ''))) end
parse_fbsr!(fbsr)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 174 def parse_fbsr! fbsr old_data = parse_signed_request!(fbsr) # beware! maybe facebook would take out the code someday return self.data = old_data unless old_data && old_data['code'] # passing empty redirect_uri is needed! arg = {:code => old_data['code'], :redirect_uri => ''} if block_given? authorize!(arg){ |r| self.data = old_data.merge(r) } else self.data = old_data.merge(authorize!(arg)) end end
parse_json!(json)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 188 def parse_json! json self.data = json && check_sig_and_return_data(Json.decode(json)) rescue Json::ParseError self.data = nil end
parse_rack_env!(env)
click to toggle source
cookies, app_id, secrect related below
# File lib/rest-core/client/facebook.rb, line 155 def parse_rack_env! env env['HTTP_COOKIE'].to_s =~ /fbs_#{app_id}=([^\;]+)/ self.data = parse_fbs!($1) end
parse_signed_request!(request)
click to toggle source
facebook’s new signed_request…
# File lib/rest-core/client/facebook.rb, line 201 def parse_signed_request! request sig_encoded, json_encoded = request.split('.') return self.data = nil unless sig_encoded && json_encoded sig, json = [sig_encoded, json_encoded].map{ |str| "#{str.tr('-_', '+/')}==".unpack('m').first } self.data = check_sig_and_return_data( Json.decode(json).merge('sig' => sig)){ Hmac.sha256(secret, json_encoded) } rescue Json::ParseError self.data = nil end
prev_page(hash, opts={}) { |nil| ... }
click to toggle source
# File lib/rest-core/client/facebook.rb, line 102 def prev_page hash, opts={}, &cb if hash.nil? nil elsif hash['paging'].kind_of?(Hash) && hash['paging']['previous'] # FIXME: facebook is returning broken URI.... get(URI.encode(hash['paging']['previous']), {}, opts, &cb) elsif block_given? yield(nil) self else nil end end
Also aliased as: previous_page
secret_access_token()
click to toggle source
# File lib/rest-core/client/facebook.rb, line 80 def secret_access_token; "#{app_id}|#{secret}" ; end
secret_old_rest(path, query={})
click to toggle source
# File lib/rest-core/client/facebook.rb, line 242 def secret_old_rest path, query={}, opts={}, &cb old_rest(path, query, {:secret => true}.merge(opts), &cb) end
Private Instance Methods
build_env(env={})
click to toggle source
Calls superclass method
# File lib/rest-core/client/facebook.rb, line 267 def build_env env={} super(env.inject({}){ |r, (k, v)| case k.to_s when 'secret' ; r['access_token'] = secret_access_token else ; r[k.to_s] = v end r }) end
calculate_sig(cookies)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 285 def calculate_sig cookies Digest::MD5.hexdigest(fbs_without_sig(cookies).join + secret) end
check_sig_and_return_data(cookies) { || ... }
click to toggle source
# File lib/rest-core/client/facebook.rb, line 277 def check_sig_and_return_data cookies cookies if secret && if block_given? yield else calculate_sig(cookies) end == cookies['sig'] end
default_data()
click to toggle source
# File lib/rest-core/client/facebook.rb, line 263 def default_data {} end
fbs_without_sig(cookies)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 289 def fbs_without_sig cookies cookies.reject{ |(k, _)| k == 'sig' }.sort.map{ |a| a.join('=') } end
merge_data(lhs, rhs)
click to toggle source
# File lib/rest-core/client/facebook.rb, line 293 def merge_data lhs, rhs [lhs, rhs].each{ |hash| return rhs.reject{ |k, v| k == 'paging' } if !hash.kind_of?(Hash) || !hash['data'].kind_of?(Array) } lhs['data'].unshift(*rhs['data']) lhs end