四苦八苦して、ようやく認証処理とツイートまでたどり着いた。
[ruby]
#coding: utf-8
require ‘twitter’
require ‘oauth’
class OauthController < ApplicationController
#—————————
# Twitter認証画面遷移
#—————————
def connect
#リクエストトークン取得
consumer = OAuth::Consumer.new("コンシューマキー", "コンシューマシークレット", :site => "http://twitter.com")
request_token = consumer.get_request_token(:oauth_callback => "http://コールバックURL/oauth/callback")
#リクエストトークンをセッションに格納
session[:request_token] = request_token
#Twitter認証画面へリダイレクト
authorized_url = request_token.authorize_url
redirect_to authorized_url
end
#————————–
# Twitter コールバック処理
#————————–
def callback
#リクエストトークン取得
request_token = session[:request_token]
#HTTPパラメータ取得
oauth_verifier = params[:oauth_verifier]
#アクセストークン取得
access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier)
#トークンとトークンシークレット取得
token = access_token.token
token_secret = access_token.secret
#アクセストークンをセッションに格納
session[:access_token] = access_token
#Twitter投稿処理
twitter = Twitter::Client.new(:oauth_access => { :key => token, :secret => token_secret})
twitter.status(:post, "Twitter4R からのTweet。成功するかな?")
end
end
[/ruby]
コツは、OAuth認証の仕組み。コンシューマキーとコンシューマシークレット。リクエストトークンやアクセストークンの概念と役割をしっかりと理解すること。
一番ハマッたのは、Twitter開発者のアプリ管理画面で、CallBack URL を設定しているのに、PINコードの画面に遷移してしまう現象。
consumer.get_request_token のところで、callback_url を設定しなければならない。なぜだかは不明。OAuth認証の仕様なのか、Ruby for OAuthの不備なのか?
リクエストトークンからアクセストークンを取得する部分や、Twitter::Client.new の方法。ドキュメントが少ない・・・。