Ruby
Twitter

Rubyで簡単なTwitter クライアントをつくる

今更ながら、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