Skip to content

Instantly share code, notes, and snippets.

@xtuaok
Created February 22, 2012 04:30
Show Gist options
  • Save xtuaok/1881387 to your computer and use it in GitHub Desktop.
Save xtuaok/1881387 to your computer and use it in GitHub Desktop.
tumblrのOAuthを処理してaccess_tokenを得る
#!/usr/bin/ruby1.9.1
require 'oauth'
require 'webrick'
require 'yaml'
CONFIG_TUMBLR = "#{ENV['HOME']}/.tumblr_oauth"
config = {}
if File.exist? CONFIG_TUMBLR
config = YAML.load_file( CONFIG_TUMBLR )
end
port = 54321
consumer_key = ''
consumer_secret = ''
options = {
:site => 'http://api.tumblr.com',
:request_token_url => 'http://www.tumblr.com/oauth/request_token',
:authorize_url => 'http://www.tumblr.com/oauth/authorize',
:access_token_url => 'http://www.tumblr.com/oauth/access_token',
:oauth_callback => "http://localhost:#{port}"
}
$request_token = nil
$access_token = nil
class Servlet < WEBrick::HTTPServlet::AbstractServlet
def do_GET(req, res)
res['Content-Type'] = 'text/plain'
if req.query['oauth_token'] && req.query['oauth_verifier']
$access_token = $request_token.get_access_token( :oauth_verifier => req.query['oauth_verifier'] )
res.body = "access_token : #{$access_token.token}\n" +
"access_token_secret : #{$access_token.secret}\n"
config = {}
config['access_token'] = $access_token.token
config['access_token_secret'] = $access_token.secret
File.open( CONFIG_TUMBLR, 'w+' ) do |fp| fp.write config.to_yaml end
File.chmod( 0600, CONFIG_TUMBLR )
puts " => Shutdown HTTPd with CTRL-C"
else
res.body = "Failed.\n"
end
end
end
puts "ConsumerKey: #{consumer_key}"
puts "ConsumerSecret: #{consumer_secret}"
consumer = OAuth::Consumer.new consumer_key, consumer_secret, options
$request_token = consumer.get_request_token
if config['access_token'] && config[ 'access_token_secret' ]
$access_token = OAuth::AccessToken.new( consumer, config[ :access_token ], config[ :access_token_secret ] )
puts "AccessToken: #{config['access_token']}"
puts "AccessTokenSecret: #{config['access_token_secret']}"
else
begin
server = WEBrick::HTTPServer.new( { :Port => port, :BindAddress => '127.0.0.1',
:Logger => WEBrick::Log.new('/dev/null'),
:AccessLog => [nil, nil] } )
server.mount( '/', Servlet )
rescue
$stderr.print "Cannot bind on 127.0.0.1:#{port}\n"
exit
end
trap( :INT ) { server.shutdown }
puts "Open in browser: #{$request_token.authorize_url}"
# system('x-www-browser', $request_token.authorize_url})
server.start
puts ""
puts "AccessToken: #{$access_token.token}"
puts "AccessTokenSecret: #{$access_token.secret}"
puts "saved in #{CONFIG_TUMBLR}"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment