今更ながら、Twitter Ruby Gem を使ってTerminal で動く簡単なTwitter クライアントを作成。
このTwitter クライアントができること
- タイムラインの取得
- リプライの取得
- 特定のリストのタイムラインの取得
- ツイート
この記事を読む対象の人
- Ruby で少しでもプログラムを書いたことがある人
- Twitter のクライアントのようなものを作ってみようかなと考えている人
- Mac やLinux でプログラムを書いている人(Mac やLinux で動作することは確認済)
事前に準備するもの
Ruby で書く前に下記を準備する。
- gem コマンドでtwitter ライブラリをインストール
- Twitterのdeveloper サイトでAPIキー を取得
gem でtwitter ライブラリをインストール
Terminal からgem コマンドでtwitterライブラリをインストールする。
gem install twitter
Twitter のdeveloper サイトからAPI キーを取得
developpers のApplication Management から下記の値を取得する。
- Consumer Key (API Key)
- Consumer Secret (API Secret)
- Access Token
- Access Token Secret
API キーを取得するにあたり、あらかじめTwitter のアカウントは取得し、Twitter に自分の電話番号を登録しておくこと。
実際にプログラムを書いてみる
twitter ライブラリの呼び出し
gem でインストールしたtwitterライブラリを呼び出す。
# twitterライブラリの呼び出し
require 'twitter'
アクセストークンなどの設定
あらかじめ取得したTWitter のAPIキーを追加する。
config.xxx=""には、各自取得した値を記述する。
# アクセストークンなどを設定
@client = Twitter::REST::Client.new do |config|
config.consumer_key = "Consumer Key (API Key)"
config.consumer_secret = "Consumer Secret (API Secret)"
config.access_token = "Access Token"
config.access_token_secret = "Access Token Secret"
end
はじめてプログラムを実行したときのメソッド
下記のように実行コマンドにオプションをつけ、そのオプションによってタイムラインを取得させたり、リプライを取得させたりしたい。ruby client.rb
で実行させた時、実行時にはオプションつけてください、と説明書きを表示させるメソッドを作成する。
-
ruby client.rb -t
でタイムライン取得 -
ruby client.rb -m
でリプライ取得 -
ruby client.rb -l
で特定のリストを取得 -
ruby 何かしらの文字列
でツイート
# client tutorial
def tutorial
puts "Welcome to Hoge Client."
puts "このclientを起動時する際、末尾にオプションをつけてください"
puts "-t HomeのTimeline取得"
puts "-m リプライの取得"
puts "-l リストの取得"
puts "ツイートしたい内容 ツイートする!"
end
タイムラインを取得するメソッド
client.home_timeline
でタイムラインを取得し、each文で繰り返して最新のツイート20件をputsで表示させるメソッドを作成する。
# display timeline
def homeTimeline
@client.home_timeline.each do |tweet|
puts "\e[33m" + tweet.user.name + "\e[32m" + "[ID:" + tweet.user.screen_name + "]"
puts "\e[0m" + tweet.text
end
end
リプライを取得するメソッド
client.mentions_timeline
でリプライを取得し、each文で繰り返して最新のリプライ20件をputsで表示させるメソッドを作成する。
# display mentions
def mentionTimeline
@client.mentions_timeline.each do |tweet|
puts "\e[33m" + tweet.user.name + "\e[32m" + "[ID:" + tweet.user.screen_name + "]"
puts "\e[0m" + tweet.text
end
end
特定のリストのタイムラインを取得するメソッド
client.list_timeline("リストを作ったユーザID", "リスト名")
で"リスト名"に記述したリストのツイート取得し、each文で繰り返して最新のリスト内のツイートを20件をputsで表示させるメソッドを作成する。
# display list
def listTimeline
@client.list_timeline("リストを作ったユーザID", "リスト名").each do |tweet|
puts "\e[33m" + tweet.user.name + "\e[32m" + "[ID:" + tweet.user.screen_name + "]"
puts "\e[0m" + tweet.text
end
end
留意点
リスト名に日本語やアンダースコアが含まれていると取得できないため、リスト名は半角英字で作成したものを記述する。(2018年2月1日追記)
ツイートするメソッド
client.update(ARGV[0])
でコマンドラインに入力された文字列をツイートするメソッドを作成する。
# tweet
def tweet
@client.update(ARGV[0])
puts "Tweetしたぞい"
end
各メソッドの呼び出し
それぞれ作成したメソッドを、実行コマンドにつけたオプションの文字列で判断し、呼び出すようにする。実行コマンドのオプションはARGV配列に格納されているため、文字列に変換する必要がある。
option = ARGV[0].to_s
if option == "" then
tutorial
elsif option == "-t" then
homeTimeline
elsif option == "-m" then
mentionTimeline
elsif option == "-l" then
listTimeline
else
tweet
homeTimeline
end
補足
タイムラインやリプライを取得し、取得した内容をputsで表示する際、ユーザ名、ユーザID、ツイート内容を表示している。
-
tweet.user.name
でユーザ名を取得 -
tweet.user.screen.name
でユーザID を取得 -
tweet.text
でツイート内容を取得
今回はユーザ名を黄色、ユーザID を緑色、ツイート内容を白色で表示させるようにした。
ソースコード
GitHub にて公開しています。(2018年2月1日追記)
https://github.com/shimisunet/twitter-client
参考URL
ほとんど公式サイトです。日本語サイトもとても参考になりました。
http://www.rubydoc.info/gems/twitter/5.16.0
http://route477.net/w/RubyTwitterJa.html