RVM 環境下で ruby 1.9.2 を使用しました。Ruby on Rails は 3.0.7 を使用。ソースがほしい方は oauth.tar.gz をダウンロードして下さい。
アプリケーションの登録
分かりにくいですが、以下のようにして設定ページへ飛びます。
以下のように設定してください。入力が終わったら「Register application」ボタンをクリックします。
TWITTER API TERMS OF SERVICE というダイアログが表示されるので I Accept を選択します。
コンシューマー・キー (consumer_key) とコンシューマー・シークレット (consumer_secret) が発行されますので、それを控えておいてください。あと、それを他人に見られないようにしてください。
下ごしらえ
$ rails new oauth -d mysql $ cd oauth/
Gemfile
を開いて
gem 'mysql2'
を
gem 'rake', '~>0.8.7' gem 'mysql2', '<0.3' gem 'oauth' gem 'twitter'
とする。
$ bundle install
データベースは今回使用しないけど config/database.yml
を適当に設定しておきます。
$ rake db:create
Consumer インスタンスを保持するクラスを作成
config/initializers/consumer.rb
の作成
class Consumer
@@consumer = nil
def self.consumer
unless @@consumer
@@consumer = OAuth::Consumer.new(
"consumer_key",
"consumer_secret",
{ :site => 'http://twitter.com' }
)
end
@@consumer
end
end
OAuth コールバック URL へのルーティングの追加
config/routes.rb
に以下を追加します。
match 'index/oauth' => 'index#oauth', :as => 'oauth'
match 'index/oauth_callback' => 'index#oauth_callback', :as => 'oauth_callback'
OAuth コントローラーの作成
OAuth を行うために IndexController
を作成します。
$ rails generate controller index index
app/controllers/index_controller.rb
の編集
# -*- coding: utf-8 -*-
class IndexController < ApplicationController
def index
end
def oauth
# コンシューマーの取得
c = Consumer.consumer
# callback url の指定
request_token = c.get_request_token(
:oauth_callback => oauth_callback_url
)
session[:request_token] = request_token.token
session[:request_token_secret] = request_token.secret
# twitter.comで認証する
redirect_to request_token.authorize_url
end
def oauth_callback
# コンシューマーの取得
c = Consumer.consumer
request_token = OAuth::RequestToken.new(
c,
session[:request_token],
session[:request_token_secret]
)
access_token = request_token.get_access_token(
{},
:oauth_token => params[:oauth_token],
:oauth_verifier => params[:oauth_verifier]
)
consumer_key = access_token.consumer.key
consumer_secret = access_token.consumer.secret
token = access_token.token
secret = access_token.secret
# Ruby Twitter Gem の初期化
Twitter.configure do |config|
config.consumer_key = consumer_key
config.consumer_secret = consumer_secret
config.oauth_token = token
config.oauth_token_secret = secret
end
# 挨拶と現在時刻をツイートする
Twitter.update("(。・ω・)ノ゙ コンチャ #{Time.now} #sample")
session = nil
redirect_to :action => :index
end
end
app/views/index/index.html.erb
の編集
<h1>Index#index</h1>
<p>Find me in app/views/index/index.html.erb</p>
<p>
<%= link_to('OAuthで認証する', oauth_path) %>
</p>
これで完成です。
動かしてみる
http://localhost:3000/index/index にアクセスします。
「アプリを認証」ボタンをクリックします。
ツイートされたら成功。
参考
投稿者紹介
-
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。
最近のエントリ
- レポート2019.10.28ユニキャストレストランを開催しました🍳
- レポート2019.08.29社内研修ワークショップ~マシュマロ・チャレンジ~
- レポート2019.08.06Computex/InnoVEX 出展者・通訳として参加してきました。
- レポート2018.06.12Computex 2018 レポート