Git Product home page Git Product logo

koala's Introduction

Koala

Koala (http://github.com/arsduo/koala) is a new Facebook library for Ruby, supporting the Graph API (including photo uploads), the old REST API, realtime updates, and OAuth validation. We wrote Koala with four goals:

  • Lightweight: Koala should be as light and simple as Facebook’s own new libraries, providing API accessors and returning simple JSON. (We clock in, with comments, just over 750 lines of code.)
  • Fast: Koala should, out of the box, be quick. In addition to supporting the vanilla Ruby networking libraries, it natively supports Typhoeus, our preferred gem for making fast HTTP requests. Of course, That brings us to our next topic:
  • Flexible: Koala should be useful to everyone, regardless of their current configuration. (We have no dependencies beyond the JSON gem. Koala also has a built-in mechanism for using whichever HTTP library you prefer to make requests against the graph.)
  • Tested: Koala should have complete test coverage, so you can rely on it. (Our complete test coverage can be run against either mocked responses or the live Facebook servers.)

1.0 beta

Version 1.0 is currently in beta, chock-full of great new features. To download the beta, just add --pre when installing the gem:

sudo gem install koala --pre

Graph API

The Graph API is the simple, slick new interface to Facebook's data. Using it with Koala is quite straightforward:

graph = Koala::Facebook::GraphAPI.new(oauth_access_token)
profile = graph.get_object("me")
friends = graph.get_connections("me", "friends")
graph.put_object("me", "feed", :message => "I am writing on my wall!")

The response of most requests is the JSON data returned from the Facebook servers as a Hash.

When retrieving data that returns an array of results (for example, when calling GraphAPI#get_connections or GraphAPI#search) a GraphCollection object (a sub-class of Array) will be returned, which contains added methods for getting the next and previous page of results:

# Returns the feed items for the currently logged-in user as a GraphCollection
feed = graph.get_connections("me", "feed")

# GraphCollection is a sub-class of Array, so you can use it as a usual Array
first_entry = feed[0]
last_entry = feed.last

# Returns the next page of results (also as a GraphCollection)
next_feed = feed.next_page

# Returns an array describing the URL for the next page: [path, arguments]
# This is useful for paging across multiple requests
next_path, next_args = feed.next_page_params

# You can use those params to easily get the next (or prevous) page
page = graph.get_page(feed.next_page_params)

Check out the wiki for more examples.

The old-school REST API

Where the Graph API and the old REST API overlap, you should choose the Graph API. Unfortunately, that overlap is far from complete, and there are many important API calls that can't yet be done via the Graph.

Koala now supports the old-school REST API using OAuth access tokens; to use this, instantiate your class using the RestAPI class:

@rest = Koala::Facebook::RestAPI.new(oauth_access_token)
@rest.fql_query(my_fql_query) # convenience method
@rest.rest_call("stream.publish", arguments_hash) # generic version

We reserve the right to expand the built-in REST API coverage to additional convenience methods in the future, depending on how fast Facebook moves to fill in the gaps.

(If you want the power of both APIs in the palm of your hand, try out the GraphAndRestAPI class.)

OAuth

You can use the Graph and REST APIs without an OAuth access token, but the real magic happens when you provide Facebook an OAuth token to prove you're authenticated. Koala provides an OAuth class to make that process easy: @oauth = Koala::Facebook::OAuth.new(app_id, app_secret, callback_url)

If your application uses Koala and the Facebook JavaScript SDK (formerly Facebook Connect), you can use the OAuth class to parse the cookies: @oauth.get_user_from_cookies(cookies) # gets the user's ID @oauth.get_user_info_from_cookies(cookies) # parses and returns the entire hash

And if you have to use the more complicated redirect-based OAuth process, Koala helps out there, too: # generate authenticating URL @oauth.url_for_oauth_code # fetch the access token once you have the code @oauth.get_access_token(code)

You can also get your application's own access token, which can be used without a user session for subscriptions and certain other requests: @oauth.get_app_access_token

That's it! It's pretty simple once you get the hang of it. If you're new to OAuth, though, check out the wiki and the OAuth Playground example site (see below).

Signed Requests: Excited to try out the new signed request authentication scheme? Good news! Koala now supports parsing those parameters: @oauth.parse_signed_request(request)

Exchanging session keys: Stuck building tab applications on Facebook? Wishing you had an OAuth token so you could use the Graph API? You're in luck! Koala now allows you to exchange session keys for OAuth access tokens: @oauth.get_token_from_session_key(session_key) @oauth.get_tokens_from_session_keys(array_of_session_keys)

Real-time Updates

The Graph API now allows your application to subscribe to real-time updates for certain objects in the graph.

Currently, Facebook only supports subscribing to users, permissions and errors. On top of that, there are limitations on what attributes and connections for each of these objects you can subscribe to updates for. Check the official Facebook documentation for more details.

Koala makes it easy to interact with your applications using the RealtimeUpdates class:

@updates = Koala::Facebook::RealtimeUpdates.new(:app_id => app_id, :secret => secret)

You can do just about anything with your real-time update subscriptions using the RealtimeUpdates class:

# Add/modify a subscription to updates for when the first_name or last_name fields of any of your users is changed
@updates.subscribe("user", "first_name, last_name", callback_token, verify_token)

# Get an array of your current subscriptions (one hash for each object you've subscribed to)
@updates.list_subscriptions

# Unsubscribe from updates for an object
@updates.unsubscribe("user")

And to top it all off, RealtimeUpdates provides a static method to respond to Facebook servers' verification of your callback URLs:

# Returns the hub.challenge parameter in params if the verify token in params matches verify_token
Koala::Facebook::RealtimeUpdates.meet_challenge(params, your_verify_token)

For more information about meet_challenge and the RealtimeUpdates class, check out the Real-Time Updates page on the wiki.

See examples, ask questions

Some resources to help you as you play with Koala and the Graph API:

  • Complete Koala documentation on the wiki
  • The Koala users group on Google Groups, the place for your Koala and API questions
  • The Koala-powered OAuth Playground, where you can easily generate OAuth access tokens and any other data needed to test out the APIs or OAuth

Testing

Unit tests are provided for all of Koala's methods. By default, these tests run against mock responses and hence are ready out of the box: # From the spec directory spec koala_spec.rb

You can also run live tests against Facebook's servers: # Again from the spec directory spec koala_spec_without_mocks.rb

Important Note: to run the live tests, you have to provide some of your own data: a valid OAuth access token with publish_stream, read_stream, and user_photos permissions and an OAuth code that can be used to generate an access token. You can get these data at the OAuth Playground; if you want to use your own app, remember to swap out the app ID, secret, and other values. (The file also provides valid values for other tests, which you're welcome to swap out for data specific to your own application.)

koala's People

Contributors

arsduo avatar imajes avatar jagthedrummer avatar joshk avatar kbighorse avatar rickyc avatar rjacoby avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.