22
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-26

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

22
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?