Module: Koala::Facebook::GraphAPIMethods
- Included in:
- GraphAPI, GraphAndRestAPI
- Defined in:
- lib/koala/graph_api.rb
Instance Method Summary collapse
- #delete_object(id) ⇒ Object
- #get_connections(id, connection_name, args = {}) ⇒ Object
-
#get_object(id, args = {}) ⇒ Object
A client for the Facebook Graph API.
- #get_objects(ids, args = {}) ⇒ Object
- #get_page(params) ⇒ Object
- #get_picture(object, args = {}) ⇒ Object
- #graph_call(*args) ⇒ Object
- #put_comment(object_id, message) ⇒ Object
- #put_like(object_id) ⇒ Object
- #put_object(parent_object, connection_name, args = {}) ⇒ Object
- #put_wall_post(message, attachment = {}, profile_id = "me") ⇒ Object
- #search(search_terms, args = {}) ⇒ Object
Instance Method Details
#delete_object(id) ⇒ Object
169 170 171 172 |
# File 'lib/koala/graph_api.rb', line 169 def delete_object(id) # Deletes the object with the given ID from the graph. graph_call(id, {}, "delete") end |
#get_connections(id, connection_name, args = {}) ⇒ Object
103 104 105 106 107 |
# File 'lib/koala/graph_api.rb', line 103 def get_connections(id, connection_name, args = {}) # Fetchs the connections for given object. result = graph_call("#{id}/#{connection_name}", args) result ? GraphCollection.new(result, self) : nil # when facebook is down nil can be returned end |
#get_object(id, args = {}) ⇒ Object
A client for the Facebook Graph API.
See developers.facebook.com/docs/api for complete documentation for the API.
The Graph API is made up of the objects in Facebook (e.g., people, pages, events, photos) and the connections between them (e.g., friends, photo tags, and event RSVPs). This client provides access to those primitive types in a generic way. For example, given an OAuth access token, this will fetch the profile of the active user and the list of the user’s friends:
graph = Koala::Facebook::GraphAPI.new(access_token)
user = graph.get_object("me")
friends = graph.get_connections(user["id"], "friends")
You can see a list of all of the objects and connections supported by the API at developers.facebook.com/docs/reference/api/.
You can obtain an access token via OAuth or by using the Facebook JavaScript SDK. See developers.facebook.com/docs/authentication/ for details.
If you are using the JavaScript SDK, you can use the Koala::Facebook::OAuth.get_user_from_cookie() method below to get the OAuth access token for the active user from the cookie saved by the SDK.
86 87 88 89 |
# File 'lib/koala/graph_api.rb', line 86 def get_object(id, args = {}) # Fetchs the given object from the graph. graph_call(id, args) end |
#get_objects(ids, args = {}) ⇒ Object
91 92 93 94 95 96 |
# File 'lib/koala/graph_api.rb', line 91 def get_objects(ids, args = {}) # Fetchs all of the given object from the graph. # We return a map from ID to object. If any of the IDs are invalid, # we raise an exception. graph_call("", args.merge("ids" => ids.join(","))) end |
#get_page(params) ⇒ Object
98 99 100 101 |
# File 'lib/koala/graph_api.rb', line 98 def get_page(params) result = graph_call(*params) result ? GraphCollection.new(result, self) : nil # when facebook is down nil can be returned end |
#get_picture(object, args = {}) ⇒ Object
110 111 112 113 |
# File 'lib/koala/graph_api.rb', line 110 def get_picture(object, args = {}) result = graph_call("#{object}/picture", args, "get", :http_component => :headers) result["Location"] end |
#graph_call(*args) ⇒ Object
180 181 182 183 184 185 186 187 188 189 |
# File 'lib/koala/graph_api.rb', line 180 def graph_call(*args) response = api(*args) do |response| # check for Graph API-specific errors if response.is_a?(Hash) && error_details = response["error"] raise APIError.new(error_details) end end response end |
#put_comment(object_id, message) ⇒ Object
159 160 161 162 |
# File 'lib/koala/graph_api.rb', line 159 def put_comment(object_id, ) # Writes the given comment on the given post. self.put_object(object_id, "comments", {:message => }) end |
#put_like(object_id) ⇒ Object
164 165 166 167 |
# File 'lib/koala/graph_api.rb', line 164 def put_like(object_id) # Likes the given post. self.put_object(object_id, "likes") end |
#put_object(parent_object, connection_name, args = {}) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/koala/graph_api.rb', line 115 def put_object(parent_object, connection_name, args = {}) # Writes the given object to the graph, connected to the given parent. # # For example, # # graph.put_object("me", "feed", :message => "Hello, world") # # writes "Hello, world" to the active user's wall. Likewise, this # will comment on a the first post of the active user's feed: # # feed = graph.get_connections("me", "feed") # post = feed["data"][0] # graph.put_object(post["id"], "comments", :message => "First!") # # See http://developers.facebook.com/docs/api#publishing for all of # the supported writeable objects. # # Most write operations require extended permissions. For example, # publishing wall posts requires the "publish_stream" permission. See # http://developers.facebook.com/docs/authentication/ for details about # extended permissions. raise APIError.new({"type" => "KoalaMissingAccessToken", "message" => "Write operations require an access token"}) unless @access_token graph_call("#{parent_object}/#{connection_name}", args, "post") end |
#put_wall_post(message, attachment = {}, profile_id = "me") ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/koala/graph_api.rb', line 141 def put_wall_post(, = {}, profile_id = "me") # Writes a wall post to the given profile's wall. # # We default to writing to the authenticated user's wall if no # profile_id is specified. # # attachment adds a structured attachment to the status message being # posted to the Wall. It should be a dictionary of the form: # # {"name": "Link name" # "link": "http://www.example.com/", # "caption": "{*actor*} posted a new review", # "description": "This is a longer description of the attachment", # "picture": "http://www.example.com/thumbnail.jpg"} self.put_object(profile_id, "feed", .merge({:message => })) end |
#search(search_terms, args = {}) ⇒ Object
174 175 176 177 178 |
# File 'lib/koala/graph_api.rb', line 174 def search(search_terms, args = {}) # Searches for a given term result = graph_call("search", args.merge({:q => search_terms})) result ? GraphCollection.new(result, self) : nil # when facebook is down nil can be returned end |