クリアメモリ

プログラミングやガジェットレビュー、便利なアプリケーションなど雑多に記録するブログ

【Ruby on Rails】Twitter Apiでユーザー名を表示してみよう!

f:id:clrmemory:20170829165809p:plain

こんにちはクリアメモリです!

今回はRuby on RailsでTwitter Apiを使って、Twitterのユーザー名を表示させてみようと思います。Twitter Apiは、ユーザーの様々な情報を取得できるのですが、今回はその中からユーザー名を表示させる方法について紹介します。

はじめに

 

今回紹介する方法では、Ruby on Railsで、Twitterのユーザー名を表示できるようになります。この方法では、Twitter Apiを使うため、Consumer KeyConsumer Secretが必要です。

こちらで紹介されている方法を使って、あらかじめTwitter Apiを使うための準備を行っておいてください。

www.clrmemory.com

 

では早速ですが、Twitter Apiを使っていきましょう。

まずは新規プロジェクトを作成します。

 

プロジェクトを作成

 

Railsで新規プロジェクトを作成するためには「new」コマンドを使います。

www.clrmemory.com

 

今回は、こんな感じで作成してみました。

rails new twitter_api_user

 

このようなコマンドをターミナルなどで実行すると、新しくプロジェクトが作成されます。作成したフォルダの中にRailsに関する階層が作られていたらOKです。

 

コントローラーを作成

 

続いてTwitter Apiを操作するための「コントローラー」を作成しましょう。

Railsでコントローラーを作成するコマンドは以下の様になっています。

rails g controller users

 

この時、ターミナルで参照するファイルは、先ほど作成した「twitter_api_user」です。cdコマンドを使って、参照するファイルを移動しておいてください。

また、Railsの命名規則でコントローラー名は複数形になっている点にも注意しましょう。

www.clrmemory.com

 

これで、users_controller.rbというファイルが作成されました。

この段階では、まだ空のコントローラーです。

 

モデルを作成

 

今回の方法では、Userの名前などを格納しておくモデルを実装します。

ターミナルで、以下のコマンドを実行してください。

rails g model user name:text

 

この様にすると、「name」データを持つ「user」モデルを作成できます。

モデルを作成できたら「マイグレーション」を実行しておきましょう。

rake db:migrate

 

これでモデルにアクセスできるようになります。

 

テンプレートを作成

 

コントローラーだけでなく、テンプレートも先に作成してしまいましょう。

twitter_api_user > app > views > usersの中に「index.html.erb」と「user.html.erb」を作成してください。

ここにテンプレートなどを実装していくわけですね。実際に記述してみましょう。

 

indexを完成させる

 

今回の流れで言うと、インデックスページに「Twitterのユーザー名をチェック」と言う様なボタンを表示させておいて、それをクリックすると確認できるという様な形にしてみます。

index.html.erbを以下の様に書き換えてください。

<div class="content">
  <h1>INDEX</h1>
  <div class="user">
    <h2>User Name</h2>
    <%= form_for(@user, url:{ action: 'user' }) do |f| %>
      <%= f.submit 'ユーザーをチェック' %>
    <% end %>
  </div>
</div>

 

この様にすると、userというアクションを持つsubmitボタンを設置できました。

インデックスの処理はこれだけです。次回以降、ユーザー名以外の機能を使う時に追加で記述していく予定なので、ここでは「user」というクラスを実装しておきました。

 

userを完成させる

 

続いて、userテンプレートを完成させていきましょう。

userページには、設定したKeyを持つユーザーの名前を表示させるので、この様になりました。

<h1>User List</h1>

<table>
  <tr><th>name</th></tr>
  <td><%= @user.name %></td>
</table>

Userページも、今後Name以外の処理を記述していくのですが、現段階ではこれだけでOKです。

 

twitter gemを追加する

 

Ruby on RailsでTwitter Apiを使う時にGemという機能を使うことで、より簡単に実装できるようになります。dbの中にGemfileというファイルがあるので、その一番下に以下の様な記述を追加しましょう。

gem 'twitter'

 

これができたら、ターミナルでコマンドを実行します。

bundle install 

これを実行すると、twitter gemが使えるようになります。

現在ローカルサーバーを実行している場合は、一度サーバーを再起動させる必要があるので注意してください。

 

コントローラーを完成させる

 

先ほど作成したコントローラーは、まだ中身が空のままでしたね。

ここに、Twitter Apiを使うための処理を記述していきましょう。Ruby on RailsでTwitter Apiを使ってユーザー名を取得する場合、user.nameと言う処理を使います。

class UsersController < ApplicationController
  def index
    @user = User.new
  end
  
  def user
    require 'twitter'
    
    client = Twitter::REST::Client.new do |config|
      config.consumer_key = Rails.application.secrets.user_consumer_key
      config.consumer_secret = Rails.application.secrets.user_consumer_secret
      config.access_token = Rails.application.secrets.user_access_token
      config.access_token_secret = Rails.application.secrets.user_access_token_secret
    end

    @user = User.new(name: client.user.name)
    
  end
end

 

こんな感じのコントローラーを使います。

Twitter Apiを使っている部分は「client = Twitter::REST::Client.new do |config|」のあたりです。これを使うために「require ‘twitter’」を追加してあります。

これだけで、ユーザーのアカウント名を取得できるのですが、これだけだとYour credentials do not allow access to this resourceと言うようなエラーが発生しました。

これは、TwitterのKEYがうまく取得できていないと言う意味を持っています。

 

実は、このコードは「secrets.yml」と言うファイルに記述されたConsumer_keyを参照しているんです。この様にすることで、セキュリティ面で強くなるらしく、現在はこの方法が主流だそうです。

では、secrets.ymlに記述を追加しましょう。

 

secrets.ymlに記述を追加する

 

secrets.ymlは「config」の中にあります。

その中を以下の様に書き換えてください。

default: &default
  user_consumer_key: "取得したキー"
  user_consumer_secret: "取得したシークレット"
  user_access_token: "取得したアクセストークン"
  user_access_token_secret: "取得したアクセストークンのシークレット"
  
development:
  secret_key_base: XXX

test:
  secret_key_base: XXX 

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  user_consumer_key:  <%= ENV["USER_CONSUMER_KEY"] %>
  user_consumer_secret:  <%= ENV["USER_CONSUMER_SECRET"] %>
  user_access_token: <%= ENV["USER_ACCESS_TOKEN"] %>
  user_access_token_secret: <%= ENV["USER_ACCESS_TOKEN_SECRET"] %>
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

 

初めから記述されている箇所は維持しつつ、user_consumer_keyなどの記述を追加してください。この様にすることで、先ほど記述したコントローラーから表示できるというわけですね。

 

これでTwitter Apiでユーザー名を表示できるようになります。

cssを調整してから実際にアクセスすると、こうなりました!

f:id:clrmemory:20170829155554p:plain

 

routesを追加

 

最後に、作成したページへアクセスできるように

「routes.rb」に処理を追加していきましょう。

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  get 'users', to: 'users#index'
  
  get '/user', to: 'users#user'
  post '/user', to: 'users#user'
  
  root to: 'users#index'
end

 

このように入力しないと、

作成したページにアクセスできないので注意してください。

 

まとめ

 

今回紹介した様に、Twitter ApiをRuby on Railsで使うためには、RESTと言う処理が必要になります。他の機能を使う時にも、この様に記述するので、基本形として覚えておきましょう。

今後紹介していく機能でも同じ様に記述していく予定です。参考にしてみてください。

www.clrmemory.com

 

ではまた。

www.clrmemory.com

新着記事