Created
November 5, 2009 22:36
-
-
Save renatoalbano/227471 to your computer and use it in GitHub Desktop.
sinatra twitter client with oauth
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# sinatra twitter client with oauth | |
require 'rubygems' | |
require 'sinatra' | |
# use http://github.com/moomerman/twitter_oauth gem | |
# gem sources -a http://gems.github.com | |
# gem install moomerman-twitter_oauth | |
require 'twitter_oauth' | |
# use memcached based session | |
use Rack::Session::Memcache | |
set :host, 'localhost' | |
set :port, '4567' | |
before do | |
@consumer_key = '<INSERT APP KEY>' | |
@consumer_secret = '<INSERT APP SECRET>' | |
end | |
get '/' do | |
if !has_access? | |
session_clear() | |
"<p><a href='/login'><img src='http://apiwiki.twitter.com/f/1242697715/Sign-in-with-Twitter-darker.png' /></a></p>" | |
else | |
client = get_client() | |
if client.authorized? | |
list = "<div>" | |
client.user_timeline.each do |tweet| | |
list << "<p><strong>#{tweet['user']['screen_name']}:</strong> #{tweet['text']}</p>" | |
end | |
list << "</div>" | |
form = "<form action='/send' method='post'><label>What are you doing?</label><br /><textarea name='text'></textarea><br /><input type='submit' value='update' /></form>" | |
return form + list + "<p><a href='/logout'>logout</a></p>" | |
else | |
session_clear() | |
"<p>not authorized!</p><p><a href='/login'><img src='http://apiwiki.twitter.com/f/1242697715/Sign-in-with-Twitter-darker.png' /></a></p>" | |
end | |
end | |
end | |
get '/login' do | |
if session['token'].nil? && session['secret'].nil? && session['url'].nil? | |
client = get_client() | |
@request_token = client.request_token(:oauth_callback => "http://#{options.host}:#{options.port}/callback") | |
session['token'] = @request_token.token | |
session['secret'] = @request_token.secret | |
session['url'] = @request_token.authorize_url | |
end | |
redirect session['url'] | |
end | |
get '/callback' do | |
begin | |
client = get_client() | |
access_token = client.authorize( | |
session['token'], | |
session['secret'], | |
:oauth_verifier => params[:oauth_verifier] | |
) | |
session['access_token'] = access_token.token | |
session['access_secret'] = access_token.secret | |
redirect '/' | |
rescue OAuth::Unauthorized | |
session_clear() | |
redirect '/' | |
end | |
end | |
post '/send' do | |
if has_access? | |
client = get_client() | |
else | |
redirect '/sent?err=1' | |
end | |
if client.authorized? | |
client.update(params[:text]) | |
redirect '/sent' | |
else | |
redirect '/sent?err=1' | |
end | |
end | |
get '/sent' do | |
if params[:err] == '1' | |
"your tweet was not sent!<br /><a href='/'>back</a>" | |
else | |
"your tweet was sent!<br /><a href='/'>back</a>" | |
end | |
end | |
get '/logout' do | |
session_clear() | |
redirect '/' | |
end | |
def has_access? | |
return session['access_token'] && session['access_secret'] | |
end | |
def get_client() | |
if !has_access? | |
TwitterOAuth::Client.new( | |
:consumer_key => @consumer_key, | |
:consumer_secret => @consumer_secret) | |
else | |
TwitterOAuth::Client.new( | |
:consumer_key => @consumer_key, | |
:consumer_secret => @consumer_secret, | |
:token => session['access_token'], | |
:secret => session['access_secret']) | |
end | |
end | |
def session_clear | |
# yes, I don't know clean session :/ | |
session['token'] = nil | |
session['secret'] = nil | |
session['url'] = nil | |
session['access_token'] = nil | |
session['access_secret'] = nil | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment