クリアメモリ

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

【Ruby on Rails】Twitter Apiを使ってスクリーンネーム(@名前)を取得してみよう!

f:id:clrmemory:20170830165323p:plain

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

今回も前回同様、Ruby on RailsでTwitter Apiを使う方法です。その中で、今回紹介するTwitter Apiは、ユーザーのスクリーン名「@〇〇」を取得する方法です。

はじめに

 

今回紹介する内容は「Ruby on Rails」で「Twitter Api」を使って、ユーザーのスクリーンネームを取得する方法です。スクリーンネームというのは、Twitterの「@名前」の部分で、私のTwitterアカウントを例にとると「clr_memory」になります。

Twitter Apiを使うために必要になる「Consumer Key」や「Access Token」などの取得方法は、こちらの記事で紹介しているので、まず先に確認しておくと良いでしょう。

www.clrmemory.com

 

また、前回Twitter Apiでuser nameを取得する方法を紹介しています。

基本的な作業はこちらと同じになっており、またroutesなどの記述についても解説しているので、こちらをチェックしてください。今回の記事では詳しく触れません。

www.clrmemory.com

 

今回の流れ

 

ではまず、今回の流れをチェックしましょう。

  1. Railsのプロジェクトを用意
  2. モデルを準備
  3. コントローラーを準備
  4. テンプレートを作成
  5. Twitter Apiを操作

 

こんな感じで実装できます。

いくつも手順がある様に見えますが、実際にスクリーンネームを取得するの処理は、とても簡単に実装できます。

 

プロジェクトを用意

 

まずはRailsのプロジェクトを用意します。

前回の記事で紹介したプロジェクトと同じ「twitter_api_user」を使います。まだ、プロジェクトを作成していない方は、以下のコマンドをターミナルに入力します。

rails new twitter_api_user

 

モデルを用意

 

続いてモデルを用意します。

こちらも前回の記事と同じものを使うことができるので、作成していない方のみ、こちらのコマンドを実行してください。

rails g model user name:text screen_name:text

 

さて、前回は「User」モデルに「name」というデータを用意しておきました。

今回は「スクリーンネーム」を操作したいので、「screen_name」というデータを用意しましょう。

rails g migration add_screen_name_to_users screen_name:text

 

この様なコマンドを実行すると、すでに保存されている「User」というモデルに「screen_name」というデータを追加できます。

うまくいったら、以下のコマンドを実行してマイグレーションを実行してください。

rake db:migrate

 

gemを追加

 

RailsのGemfileというファイルの一番下に以下の記述を追加します。

gem 'twitter'

 

続いて「ターミナル」で以下のコマンドを実行すると、twitter gemを使える様になります。

bundle install

 

コントローラーを用意

 

今回のコントローラーは、userというメソッドの中に処理していきます。

前回のコードはこんな感じでしたね。

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

 

このコードに、スクリーンネームを取得するための処理を記述していきましょう。

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

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,
      screen_name: client.user.screen_name,
    )

  end
end

 

具体的には、User.newの部分に「screen_name: client.user.screen_name」という処理が追加されています。この様にすることで、スクリーンネームを保持したuserを作成できる様になりました。

コントローラーに加える変化は、たったこれだけです。

簡単ですね!

 

テンプレートを作成

 

続いてテンプレートも書き換えていきましょう。

まだuser.html.erbとindex.html.erbがない場合は、「app > views > users」の中に新規追加してください。

<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>

 

こちらが前回のコードです。

index.html.erbに関しては、特に変更する必要ありません。

ここで設置したボタンをクリックすると、前回と同じページに飛ぶ様になっています。飛んだ先でスクリーンネームを表示するというわけですね。

 

user.html.erbは、以下の様に書き換えてください。

<h1>User List</h1>

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

 

こちらも大した処理をしているわけではなく、「@user」が持つ「screen_name」というデータを取得しているだけです。

スクリーンネームは「@名前」という形式なので、先頭に@をつけておきました。

f:id:clrmemory:20170830140001p:plain

 

たったこれだけで、Twitter Apiでスクリーンネームを取得できちゃいました!

 

secrets.yml

 

secrets.ymlは前回と全く同じコードです。

というか、使用するアカウントが変わらない限り、ここを編集することはありません。

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

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.screen_nameを使うだけで、簡単にユーザーのスクリーンネームを取得できる様になりました。

基本的なコードは同じもので、コントローラーに追加していくだけなので簡単でしたね!これはRuby on Railsの「Twitter Gem」が便利だからなんです。

www.clrmemory.com

 

ぜひ参考にしてみてください。

ではまた。

新着記事