クリアメモリ

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

【Ruby on Rails】Twitter Apiで特定のユーザーを指定して情報を取得してみよう!

f:id:clrmemory:20171121144711p:plain

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

今回はRuby on RailsでTwitter Apiを使って、特定ユーザーの情報を取得する方法です。この方法を使えば、自分以外のユーザー情報を取得できるので、ぜひ使いこなしてみましょう。

はじめに

 

これまで何回かに分けて、Ruby on Railsで

Twitter Apiを使ったユーザー名などを取得する方法を紹介して来ました。

www.clrmemory.com

 

実は、同じようなコードで、

特定のユーザーを指定して取得することもできちゃうので紹介します。

 

ユーザー名やスクリーンネーム、説明文を取得する方法を過去に記事にしました。

先にそちらを確認しておくことで、

よりスムーズに実装できるのでチェックしておいてください。

www.clrmemory.com

 

では、今回の方法で取得したユーザー情報を表示する、

テンプレート」を作成していきましょう。

 

ユーザーページのテンプレート

 

まずは、指定したユーザーの情報を表示するテンプレートを作成します。

テンプレート自体は、前回まで作ってきたものと同じなのですが、ファイル名が違います。views > usersの中に「select_user.html.erb」という名前で、新しいファイルを追加してください。

ファイルが作成できたら、以下のように記述しましょう。

<h1>User List</h1>

<table>
  <tr>
    <th>name</th><th>screen</th><th colspan="3">description</th>
  </tr>
  <tr>
    <td><%= @select_user.name %></td>
    <td>@<%= @select_user.screen_name %></td>
    <td><%= @select_user.description %></td>
  </tr>
</table>

 

これで、指定したユーザーの

「名前」「スクリーンネーム」「説明文」を表示できるようになります。

 

続いて、ユーザー名を設定する

トップページのテンプレートを書き換えていきましょう。

 

トップページのテンプレート

 

トップページのhtml.erbは、以下のようになっていました。

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

 

これを、以下のように書き換えてください。

 

<div class="content">
  <h1>INDEX</h1>
  <div class="user">
    <h2>User</h2>
    <%= form_for(@user, url:{ action: 'user' }) do |f| %>
      <%= f.submit 'ユーザーをチェック' %>
    <% end %>
    
    <%= form_for(@select_user, url:{ action: 'select_user' }) do |f| %>
      <%= f.text_field :name %>
      <%= f.submit '名前を指定してチェック' %>
    <% end %>
  </div>
</div>

 

このようにすることで、

トップページにテキストフィールドとボタンを設置できました。

f:id:clrmemory:20170910050315p:plain

 

コントローラーを調整

 

先ほど設置した「テキストフィールド」に、

ユーザー名を入力してボタンをクリックした場合の処理を追加していきます。

以下を参考にして、users_controller.rbを書き換えてください。

class UsersController < ApplicationController
  def index
    @user = User.new
    @select_user = User.new
  end
  
  def user

    @user = User.new(
      name: client.user("yama_nobe").name,
      screen_name: client.user("yama_nobe").screen_name,
      description: client.user("yama_nobe").description,
    )
    
  end
  
  def select_user
    
    if request.post? 
      @select_user = User.new(
        name: client.user(params[:text]).name,
        screen_name: client.user(params[:text]).screen_name,
        description: client.user(params[:text]).description,
      )
    end
  end
  
  private
  def client
    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
    
    return client
  end
end

 

このように入力すると、

Userというデータの中に、指定したユーザーの情報を追加できます。

処理自体は、これまでやってきたのと同じなのでだいたいわかると思います。

 

コードの中に「params[:text]」とありますが、

このように記述することで、テキストフィールドに入力したテキストを取得できるわけですね。

 

routesを設定

 

ここまで作成したコードだけではエラーが出るはずです。

ページにアクセスするための「routes」が足りないんですね。

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'
  
  get 'select_user', to: 'users#select_user'
  post 'select_user', to: 'users#select_user'
  
  root to: 'users#index'
end

 

こんな感じで記述すると、select_userというURLにアクセスできるようになります。

テキストフィールドで情報を取得するので、postで記述しているわけですね。

f:id:clrmemory:20170910051412p:plain

 

まとめ

 

今回紹介した方法を使えば、

ユーザーの名前を指定して情報を取得できるようになりました。

データを受け取るコード自体は同じなので、ぜひ色々試してみてください。

www.clrmemory.com

 

ではまた。

新着記事