Module: Koala::Facebook::GraphAPIMethods
- Included in:
- API
- Defined in:
- lib/koala/graph_api.rb
Instance Method Summary collapse
-
#batch(http_options = {}, &block) ⇒ Object
Batch API.
- #delete_connections(id, connection_name, args = {}, options = {}) ⇒ Object
- #delete_like(object_id, options = {}) ⇒ Object
- #delete_object(id, options = {}) ⇒ Object
- #get_comments_for_urls(urls = [], args = {}, options = {}) ⇒ Object
-
#get_connections(id, connection_name, args = {}, options = {}) ⇒ Object
Connections.
-
#get_object(id, args = {}, options = {}) ⇒ Object
Objects.
- #get_objects(ids, args = {}, options = {}) ⇒ Object
-
#get_page(params) ⇒ Object
GraphCollection support.
-
#get_page_access_token(object_id) ⇒ Object
Convenience Methods.
-
#get_picture(object, args = {}, options = {}) ⇒ Object
Media (photos and videos) to delete photos or videos, use delete_object(object_id) note: you’ll need the user_photos or user_videos permissions to actually access media after upload.
-
#graph_call(path, args = {}, verb = "get", options = {}, &post_processing) ⇒ Object
Direct access to the Facebook API see any of the above methods for example invocations.
-
#put_comment(object_id, message, options = {}) ⇒ Object
Comments to delete comments, use delete_object(comment_id) to get comments, use get_connections(object, “likes”).
- #put_connections(id, connection_name, args = {}, options = {}) ⇒ Object
-
#put_like(object_id, options = {}) ⇒ Object
Likes to get likes, use get_connections(user, “likes”).
- #put_object(parent_object, connection_name, args = {}, options = {}) ⇒ Object
-
#put_picture(*picture_args) ⇒ Object
Can be called in multiple ways:.
- #put_video(*video_args) ⇒ Object
-
#put_wall_post(message, attachment = {}, profile_id = "me", options = {}) ⇒ Object
Wall posts To get wall posts, use get_connections(user, “feed”) To delete a wall post, just use delete_object(post_id).
-
#search(search_terms, args = {}, options = {}) ⇒ Object
Search.
Instance Method Details
#batch(http_options = {}, &block) ⇒ Object
Batch API
202 203 204 205 206 207 208 209 210 |
# File 'lib/koala/graph_api.rb', line 202 def batch( = {}, &block) batch_client = GraphBatchAPI.new(access_token, self) if block yield batch_client batch_client.execute() else batch_client end end |
#delete_connections(id, connection_name, args = {}, options = {}) ⇒ Object
83 84 85 86 87 |
# File 'lib/koala/graph_api.rb', line 83 def delete_connections(id, connection_name, args = {}, = {}) # Deletes a given connection raise APIError.new({"type" => "KoalaMissingAccessToken", "message" => "Delete requires an access token"}) unless @access_token graph_call("#{id}/#{connection_name}", args, "delete", ) end |
#delete_like(object_id, options = {}) ⇒ Object
165 166 167 168 169 |
# File 'lib/koala/graph_api.rb', line 165 def delete_like(object_id, = {}) # Unlikes a given object for the logged-in user raise APIError.new({"type" => "KoalaMissingAccessToken", "message" => "Unliking requires an access token"}) unless @access_token graph_call("#{object_id}/likes", {}, "delete", ) end |
#delete_object(id, options = {}) ⇒ Object
64 65 66 67 68 |
# File 'lib/koala/graph_api.rb', line 64 def delete_object(id, = {}) # Deletes the object with the given ID from the graph. raise APIError.new({"type" => "KoalaMissingAccessToken", "message" => "Delete requires an access token"}) unless @access_token graph_call(id, {}, "delete", ) end |
#get_comments_for_urls(urls = [], args = {}, options = {}) ⇒ Object
186 187 188 189 190 191 192 |
# File 'lib/koala/graph_api.rb', line 186 def get_comments_for_urls(urls = [], args = {}, = {}) # Fetchs the comments for given URLs (array or comma-separated string) # see https://developers.facebook.com/blog/post/490 return [] if urls.empty? args.merge!(:ids => urls.respond_to?(:join) ? urls.join(",") : urls) get_object("comments", args, ) end |
#get_connections(id, connection_name, args = {}, options = {}) ⇒ Object
Connections
72 73 74 75 |
# File 'lib/koala/graph_api.rb', line 72 def get_connections(id, connection_name, args = {}, = {}) # Fetchs the connections for given object. graph_call("#{id}/#{connection_name}", args, "get", ) end |
#get_object(id, args = {}, options = {}) ⇒ Object
Objects
34 35 36 37 |
# File 'lib/koala/graph_api.rb', line 34 def get_object(id, args = {}, = {}) # Fetchs the given object from the graph. graph_call(id, args, "get", ) end |
#get_objects(ids, args = {}, options = {}) ⇒ Object
39 40 41 42 43 44 |
# File 'lib/koala/graph_api.rb', line 39 def get_objects(ids, args = {}, = {}) # Fetchs all of the given objects from the graph. # If any of the IDs are invalid, they'll raise an exception. return [] if ids.empty? graph_call("", args.merge("ids" => ids.respond_to?(:join) ? ids.join(",") : ids), "get", ) end |
#get_page(params) ⇒ Object
GraphCollection support
195 196 197 198 199 |
# File 'lib/koala/graph_api.rb', line 195 def get_page(params) # Pages through a set of results stored in a GraphCollection # Used for connections and search results graph_call(*params) end |
#get_page_access_token(object_id) ⇒ Object
Convenience Methods
180 181 182 183 184 |
# File 'lib/koala/graph_api.rb', line 180 def get_page_access_token(object_id) result = get_object(object_id, :fields => "access_token") do result ? result["access_token"] : nil end end |
#get_picture(object, args = {}, options = {}) ⇒ Object
Media (photos and videos) to delete photos or videos, use delete_object(object_id) note: you’ll need the user_photos or user_videos permissions to actually access media after upload
93 94 95 96 97 98 |
# File 'lib/koala/graph_api.rb', line 93 def get_picture(object, args = {}, = {}) # Gets a picture object, returning the URL (which Facebook sends as a header) graph_call("#{object}/picture", args, "get", .merge(:http_component => :headers)) do |result| result["Location"] end end |
#graph_call(path, args = {}, verb = "get", options = {}, &post_processing) ⇒ Object
Direct access to the Facebook API see any of the above methods for example invocations
214 215 216 217 218 219 220 221 222 223 224 225 |
# File 'lib/koala/graph_api.rb', line 214 def graph_call(path, args = {}, verb = "get", = {}, &post_processing) result = api(path, args, verb, ) do |response| error = check_response(response) raise error if error end # turn this into a GraphCollection if it's pageable result = GraphCollection.evaluate(result, self) # now process as appropriate for the given call (get picture header, etc.) post_processing ? post_processing.call(result) : result end |
#put_comment(object_id, message, options = {}) ⇒ Object
Comments to delete comments, use delete_object(comment_id) to get comments, use get_connections(object, “likes”)
152 153 154 155 |
# File 'lib/koala/graph_api.rb', line 152 def put_comment(object_id, , = {}) # Writes the given comment on the given post. self.put_object(object_id, "comments", {:message => }, ) end |
#put_connections(id, connection_name, args = {}, options = {}) ⇒ Object
77 78 79 80 81 |
# File 'lib/koala/graph_api.rb', line 77 def put_connections(id, connection_name, args = {}, = {}) # Posts a certain connection raise APIError.new({"type" => "KoalaMissingAccessToken", "message" => "Write operations require an access token"}) unless @access_token graph_call("#{id}/#{connection_name}", args, "post", ) end |
#put_like(object_id, options = {}) ⇒ Object
Likes to get likes, use get_connections(user, “likes”)
160 161 162 163 |
# File 'lib/koala/graph_api.rb', line 160 def put_like(object_id, = {}) # Likes the given post. self.put_object(object_id, "likes", {}, ) end |
#put_object(parent_object, connection_name, args = {}, options = {}) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/koala/graph_api.rb', line 46 def put_object(parent_object, connection_name, args = {}, = {}) # Writes the given object to the graph, connected to the given parent. # See http://developers.facebook.com/docs/api#publishing for all of # the supported writeable objects. # # For example, # graph.put_object("me", "feed", :message => "Hello, world") # writes "Hello, world" to the active user's wall. # # 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_picture(*picture_args) ⇒ Object
Can be called in multiple ways:
put_picture(file, [content_type], ...)
put_picture(path_to_file, [content_type], ...)
put_picture(picture_url, ...)
You can pass in uploaded files directly from Rails or Sinatra. (See lib/koala/uploadable_io.rb for supported frameworks)
Optional parameters can be added to the end of the argument list:
-
args: a hash of request parameters (default: {})
-
target_id: ID of the target where to post the picture (default: “me”)
-
options: a hash of http options passed to the HTTPService module
put_picture(file, content_type, => “Message”, 01234560) put_picture(params, => “Message”)
(Note that with URLs, there’s no optional content type field) put_picture(picture_url, => “Message”, my_page_id)
120 121 122 |
# File 'lib/koala/graph_api.rb', line 120 def put_picture(*picture_args) put_object(*parse_media_args(picture_args, "photos")) end |
#put_video(*video_args) ⇒ Object
124 125 126 127 128 |
# File 'lib/koala/graph_api.rb', line 124 def put_video(*video_args) args = parse_media_args(video_args, "videos") args.last[:video] = true put_object(*args) end |
#put_wall_post(message, attachment = {}, profile_id = "me", options = {}) ⇒ Object
Wall posts To get wall posts, use get_connections(user, “feed”) To delete a wall post, just use delete_object(post_id)
134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'lib/koala/graph_api.rb', line 134 def put_wall_post(, = {}, profile_id = "me", = {}) # attachment is a hash describing the wall post # (see X for more details) # For instance, # # {"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 = {}, options = {}) ⇒ Object
Search
173 174 175 176 |
# File 'lib/koala/graph_api.rb', line 173 def search(search_terms, args = {}, = {}) args.merge!({:q => search_terms}) unless search_terms.nil? graph_call("search", args, "get", ) end |