今回も前回同様、Ruby on RailsでTwitter Apiを使う方法です。
その中で、今回紹介するTwitter Apiは、ユーザーのスクリーン名「@〇〇」を取得する方法です。
はじめに
今回紹介する内容は「Ruby on Rails」で「Twitter Api」を使って、ユーザーのスクリーンネームを取得する方法です。
スクリーンネームというのは、Twitterの「@名前」の部分で、私のTwitterアカウントを例にとると「clr_memory」になります。
Twitter Apiを使うために必要になる「Consumer Key」や「Access Token」などの取得方法は、こちらの記事で紹介しているので、まず先に確認しておくと良いでしょう。
また、前回Twitter Apiでuser nameを取得する方法を紹介しています。
基本的な作業はこちらと同じになっており、またroutesなどの記述についても解説しているので、こちらをチェックしてください。
今回の記事では詳しく触れません。
今回の流れ
ではまず、今回の流れをチェックしましょう。
- Railsのプロジェクトを用意
- モデルを準備
- コントローラーを準備
- テンプレートを作成
- 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」というデータを取得しているだけです。
スクリーンネームは「@名前」という形式なので、先頭に@をつけておきました。
たったこれだけで、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」が便利だからなんです。
ぜひ参考にしてみてください。
ではまた。