Frankie (facethesinatra.com) is a plugin for the Sinatra web framework (sinatrarb.com) that allows you to easily create a Facebook application by using the Facebooker gem.
Written by Ron Evans (www.deadprogrammersociety.com)
Based on merb_facebooker (github.com/vanpelt/merb_facebooker) by Chris Van Pelt, which was based on the Rails classes in Facebooker (facebooker.rubyforge.org/) by Mike Mangino, Shane Vitarana, & Chad Fowler
2/20/2009 - Now updated to Sinatra 0.9 and facebooker thanks to mjfreshyfresh.
Thanks, everyone!
require 'rubygems' require 'frankie' configure do set_option :sessions, true load_facebook_config "./config/facebooker.yml", Sinatra.env end ## facebooker helpers before do ensure_authenticated_to_facebook ensure_application_is_installed_by_facebook_user end ## the site get '/' do body "<h1>Hello #{session[:facebook_session].user.name} and welcome to frankie!</h1>" end
Install the frankie gem (which will install both Sinatra and Facebooker if you do not already have them)
sudo gem install frankie
Create the application directories for your new app
mkdir myapp cd myapp mkdir config
Put your facebooker.yml file into the /myapp/config directory, and set the values to your information. Here is a simple example of the file:
development: api_key: apikeyhere secret_key: secretkeyhere canvas_page_name: yourcanvashere callback_url: http://localhost:4567 test: api_key: apikeyhere secret_key: secretkeyhere canvas_page_name: yourcanvashere callback_url: http://localhost:4567 production: api_key: apikeyhere secret_key: secretkeyhere canvas_page_name: yourcanvashere callback_url: http://yourrealserver.com
Make sure you have setup your Facebook application on the facebook site. Google “setup new facebook application” if you are unsure how to do this. I recommend starting with an IFrame application. A more advanced and cooler approach uses a tunneling script, which is included with Frankie. You do need to have “autossh” installed in order to use it, as well as a publicly addressable server. From a command prompt type tunnel <host> <remote_port> <local_port> like this:
tunnel app.myhost.com 10000 4567
You will also need to make sure your server’s /etc/ssh/sshd_config contains the following line:
GatewayPorts clientspecified
Thanks to the many people like Evan Weaver, Blake Mizerany, and whoever else that have provided the code used in this tunneling script.
Create your application, based on the sample above, and then run it:
ruby sample.rb
Test your app by going to apps.facebook.com/yourappname
Have fun!