Ruby on Rais 3 で Twitter OAuth な Web アプリケーションを作成する(Hello World)

Pocket

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 にアクセスします。

「アプリを認証」ボタンをクリックします。

ツイートされたら成功。

参考

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください