Skip to content

Instantly share code, notes, and snippets.

@t-kashima
Created June 18, 2012 15:03
Show Gist options
  • Save t-kashima/2948802 to your computer and use it in GitHub Desktop.
Save t-kashima/2948802 to your computer and use it in GitHub Desktop.
SinatraとOAuthとTwitter
require 'rubygems'
require 'sinatra'
require 'oauth'
require 'twitter'
configure do
CONSUMER_KEY = "twitter_consumer_key"
CONSUMER_SECRET = "twitter_consumer_secret"
set :sessions, true
enable :sessions
end
def base_url
"#{request.scheme}://#{request.host}:#{request.port.to_s}"
end
def oauth_consumer
consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => "http://twitter.com")
end
before do
if session[:access_token]
Twitter.configure do |config|
config.consumer_key = CONSUMER_KEY
config.consumer_secret = CONSUMER_SECRET
config.oauth_token = session[:access_token]
config.oauth_token_secret = session[:access_token_secret]
end
@twitter = Twitter
else
@twitter = nil
end
end
get '/' do
if @twitter
erb %{
<p><%= @twitter.user.screen_name %></p>
<img src="<%= @twitter.profile_image() %>" alt="profile image">
}
else
erb %{ <a href="/request_token">OAuth Login</a> }
end
end
get '/request_token' do
callback_url = "#{base_url}/access_token"
request_token = oauth_consumer.get_request_token(:oauth_callback => callback_url)
session[:request_token] = request_token.token
session[:request_token_secret] = request_token.secret
redirect request_token.authorize_url
end
get '/access_token' do
request_token = OAuth::RequestToken.new(oauth_consumer, session[:request_token], session[:request_token])
begin
@access_token = request_token.get_access_token({}, :oauth_token => params[:oauth_token], :oauth_verifier => params[:oauth_verifier])
rescue OAuth::Unauthorized => @exception
return erb %{ oauth failed: <%=h @exception.message %> }
end
session[:access_token] = @access_token.token
session[:access_token_secret] = @access_token.secret
redirect '/'
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment