読者です 読者をやめる 読者になる 読者になる

Rails3.1でTwitter認証しTwitter APIを呼び出す

Gemfile

gem 'devise'
gem 'omniauth'
gem 'twitter'

config/initialisers/devise.rb

Devise.setup do |config|
  config.omniauth :twitter, 'CONSUMER KEY', 'CONSUMER SECRET'
end

config/initializers/twitter.rb

Twitter.configure do |config|
  config.consumer_token = Devise.omniauth_configs[:twitter].args.first
  config.consumer_secret = Devise.omniauth_configs[:twitter].args.last
end

app/models/user.rb

class User < ActiveRecord::Base

  devise :omniauthable
  attr_accessor :client

  def follower_ids
    set_client
    @client.follower_ids.ids
  end

  private

  def set_client
    @client = Twitter.new(oauth_token: token, oauth_token_secret: secret)
  end

end
  • -

補足:コントローラーでAPIを呼び出して結果をmemcachedにキャッシュする

Gemfile

gem 'devise'
gem 'omniauth'
gem 'twitter'
gem 'dalli'

config/environments/production.rb

SampleApp::Application.configure do
  config.cache_store = :dalli_store
end

app/controllers/users_controller.rb

class UsersController < ApplicationController

  def index
    follower_ids = Rails.cache.fetch("#{current_user.name}_follower_ids") { current_user.follower_ids }
    # ...
  end

end