Class: Koala::Facebook::API
- Inherits:
-
Object
- Object
- Koala::Facebook::API
- Includes:
- GraphAPIMethods
- Defined in:
- lib/koala/api.rb,
lib/koala/api/graph_collection.rb
Defined Under Namespace
Classes: GraphCollection
Instance Attribute Summary collapse
-
#access_token ⇒ Object
readonly
Returns the value of attribute access_token.
-
#app_secret ⇒ Object
readonly
Returns the value of attribute app_secret.
-
#rate_limit_hook ⇒ Object
readonly
Returns the value of attribute rate_limit_hook.
Instance Method Summary collapse
-
#api(path, args = {}, verb = "get", options = {}) ⇒ Object
Makes a request to the appropriate Facebook API.
-
#graph_call(path, args = {}, verb = "get", options = {}) { ... } ⇒ Object
Make a call directly to the Graph API.
-
#initialize(access_token = Koala.config.access_token, app_secret = Koala.config.app_secret, rate_limit_hook = Koala.config.rate_limit_hook) ⇒ Koala::Facebook::API
constructor
Creates a new API client.
Methods included from GraphAPIMethods
#batch, #debug_token, #delete_connections, #delete_like, #delete_object, #get_connection, #get_object, #get_object_metadata, #get_objects, #get_page, #get_page_access_token, #get_picture, #get_picture_data, #get_user_picture_data, #put_comment, #put_connections, #put_like, #put_object, #put_picture, #put_video, #put_wall_post, #search, #set_app_restrictions
Constructor Details
#initialize(access_token = Koala.config.access_token, app_secret = Koala.config.app_secret, rate_limit_hook = Koala.config.rate_limit_hook) ⇒ Koala::Facebook::API
If no access token is provided, you can only access some public information.
Creates a new API client.
19 20 21 22 23 |
# File 'lib/koala/api.rb', line 19 def initialize(access_token = Koala.config.access_token, app_secret = Koala.config.app_secret, rate_limit_hook = Koala.config.rate_limit_hook) @access_token = access_token @app_secret = app_secret @rate_limit_hook = rate_limit_hook end |
Instance Attribute Details
#access_token ⇒ Object (readonly)
Returns the value of attribute access_token.
25 26 27 |
# File 'lib/koala/api.rb', line 25 def access_token @access_token end |
#app_secret ⇒ Object (readonly)
Returns the value of attribute app_secret.
25 26 27 |
# File 'lib/koala/api.rb', line 25 def app_secret @app_secret end |
#rate_limit_hook ⇒ Object (readonly)
Returns the value of attribute rate_limit_hook.
25 26 27 |
# File 'lib/koala/api.rb', line 25 def rate_limit_hook @rate_limit_hook end |
Instance Method Details
#api(path, args = {}, verb = "get", options = {}) ⇒ Object
You’ll rarely need to call this method directly.
Makes a request to the appropriate Facebook API.
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/koala/api.rb', line 101 def api(path, args = {}, verb = "get", = {}) # we make a copy of args so the modifications (added access_token & appsecret_proof) # do not affect the received argument args = args.dup # If a access token is explicitly provided, use that # This is explicitly needed in batch requests so GraphCollection # results preserve any specific access tokens provided args["access_token"] ||= @access_token || @app_access_token if @access_token || @app_access_token if .delete(:appsecret_proof) && args["access_token"] && @app_secret args["appsecret_proof"] = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha256"), @app_secret, args["access_token"]) end # Translate any arrays in the params into comma-separated strings args = sanitize_request_parameters(args) unless preserve_form_arguments?() # add a leading / if needed... path = "/#{path}" unless path.to_s =~ /^\// # make the request via the provided service result = Koala.make_request(path, args, verb, ) if result.status.to_i >= 500 raise Koala::Facebook::ServerError.new(result.status.to_i, result.body) end result end |
#graph_call(path, args = {}, verb = "get", options = {}) { ... } ⇒ Object
Make a call directly to the Graph API. (See any of the other methods for example invocations.)
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/koala/api.rb', line 46 def graph_call(path, args = {}, verb = "get", = {}, &post_processing) # enable appsecret_proof by default = {:appsecret_proof => true}.merge() if @app_secret response = api(path, args, verb, ) error = GraphErrorChecker.new(response.status, response.body, response.headers).error_if_appropriate raise error if error # if we want a component other than the body (e.g. redirect header for images), provide that http_component = [:http_component] desired_data = if [:http_component] http_component == :response ? response : response.send(http_component) else # turn this into a GraphCollection if it's pageable API::GraphCollection.evaluate(response, self) end if rate_limit_hook limits = %w(x-business-use-case-usage x-ad-account-usage x-app-usage).each_with_object({}) do |key, hash| value = response.headers.fetch(key, nil) next unless value hash[key] = JSON.parse(response.headers[key]) rescue JSON::ParserError => e Koala::Utils.logger.error("#{e.class}: #{e.} while parsing #{key} = #{value}") end rate_limit_hook.call(limits) if limits.keys.any? end # now process as appropriate for the given call (get picture header, etc.) post_processing ? post_processing.call(desired_data) : desired_data end |