Ruby で Tumblr の OAuth Token を入手する一手法

背景

Tumblr API を使っていろいろやりたい*1. 私は,その第一歩を今日,踏み出したのです.

概要

API 関連の操作は tumblr_client GitHub - tumblr/tumblr_client: A Ruby Wrapper for the Tumblr v2 API という gem が出ているので,これを使えばよさそうです.でも,以下のように,consumer_key と secret だけでなく,access token と access token secret が必要とのこと.まずはこれを手に入れようと言うのが今回の挑戦です.

Tumblr.configure do |config|
  config.consumer_key = "consumer_key"
  config.consumer_secret = "consumer_secret"
  config.oauth_token = "access_token"
  config.oauth_token_secret = "access_token_secret"
end

実践

さて探してみると,php などの参考プログラムはわりかしありますが,ruby があまりありません.数少なく引っかかる情報も,いまいちちゃんと動かないので困りました.結局以下のコードで解決しました.

require 'rubygems'
require 'oauth' # 場合によっては gem install oauth する

# これは tumblr api にアプリ登録するともらえる
CONSUMER_KEY = "xxxx"
CONSUMER_SECRET = "xxxx"

consumer = OAuth::Consumer.new( CONSUMER_KEY,CONSUMER_SECRET,
 {
     :site => "http://www.tumblr.com",
     :request_token_path => "/oauth/request_token",
     :access_token_path => "/oauth/access_token",
     :authorize_path => "/oauth/authorize"
 }
)
# ruby 単体でやる場合はこの :exclude_callback が重要
request_token = consumer.get_request_token(:exclude_callback => true)

# ここで出力される URL にアクセスして,
# アプリのアカウントに対するアクセスを許可する
puts request_token.authorize_url

# callback 先の url にくっついている oauth_verifier の文字列をここへコピペする
# callback 先を http://sasquatch.github.io/tumblr.html とかにするとクエリ出してくれてべんりですよ
# strip がないと改行がはいってしまって,400 Bad Request になってしまう
# (こんなくだらない理由でハマった)
verifier = gets.strip

access_token = request_token.get_access_token(:oauth_verifier => verifier)

puts access_token.token
puts access_token.secret

それと見つけたツール

上記を ruby で動かせばいけますが,なんやわからないけど動かない場合は↓のツールを使うのがよいかもしれません. https://gist.github.com/monde/4577106 基本的に書いてあるとおりにコマンド実行すれば,良い感じに対話形式でやってくれるので,すてきです.

*1:特に,機械学習をつかって,過去のReblogから趣味趣向を学習して,それに沿ったReblogを行うBOTとか作りたい