twitter gemを使ったruby一行野郎(ツイート・トレンド・検索・フォロー&フォロワー一覧・リスト一覧&操作…)

注意:Twitter gemのバージョンが5未満の設定ですので、5以上だと以下の手順は無効ですゴメンナサイ

前準備

前提としてTwitter Application Managementでconsumer_key, consumer_secret, oauth_token, access_token, oauth_token_secretを取得済みであるとします。
もちろんtwitter gemもインストール済みである必要があります。
設定ファイルset.rbを作業ディレクトリに用意します。

def set
  Twitter::Client.new(:consumer_key => "********",
                      :consumer_secret => "********",
                      :oauth_token => "********",
                      :oauth_token_secret => "********")
end

▼ツイート

ruby -rtwitter -e 'load "./set.rb"; t = set; t.update("tweet by one liner!")'

▼タイムライン

ruby -rtwitter -e 'load "./set.rb"; t = set; t.user_timeline("riocampos", count: 200).each{ |i| puts i.text }'

▼数字idとアカウント名との変換

  • 数字のidをアカウント名または名前に
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.user(56997313).to_hash[:screen_name]' => "riocampos"
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.user(56997313).to_hash[:name]' # => "riocampos/火田理央"
  • アカウント名をidに
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.user("riocampos").to_hash[:id]' # => 56997313

▼ツイートIDで表示

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.user("riocampos").status(383794792125054976)' # => 長文なのでこちらに

statusの代わりにstatusesを使うと複数のIDを指定できます。結果はArrayで返ってきます。

▼キーワード検索

アカウント名とツイートを列挙(件数100件上限でAPI1回消費)
例えば「riocampos」を検索。

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.search("riocampos", {:count => 100}).to_hash[:statuses].map{ |i| "@#{i[:user][:screen_name]}: #{i[:text]}"}'

▼トレンド

日本のトレンド

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.local_trends(23424856).map{ |i| i.to_hash[:name] }'

おまけ情報:
世界のトレンドはlocal_trends(23424856)をtrendsに変更してください。
日本各地のトレンドはlocal_trends(23424856)の数字部分*1を以下に従って変更してください。

北九州 1110809
埼玉 1116753
千葉 1117034
福岡 1117099
Hamamatsu 1117155
広島 1117227
川崎 1117502
神戸 1117545
熊本 1117605
名古屋 1117817
新潟 1117881
Sagamihara 1118072
札幌 1118108
仙台 1118129
高松 1118285
東京 1118370
横浜 1118550
沖縄 2345896
大阪 15015370
京都 15015372
日本 23424856
岡山 90036018

▼新しい順のフォロワー一覧(アカウント名で)

ちなみに検索系APIなのでリミットは180回/15分です。

最近フォローされた20人(API1回消費)

どちらでも同じです。

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.followers.to_hash[:users].map{ |i| i[:screen_name] }'
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.followers.attrs[:users].map{ |i| i[:screen_name] }'
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.followers.collection.map{ |i| i[:screen_name] }'

おまけ情報:

  • 以下でもto_hash[:users]の部分はcollectionに置き換え可能です。
  • [:screen_name]を[:name]に変更するとアカウント名ではなく名前で表示できます。
全員(API(フォロワー数/20)回消費)
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.followers.all.map{ |i| i[:screen_name] }'

▼新しい順のフォロワー一覧(全員。API(フォロワー数/5000)回消費。ただし数字ID)

どちらも同じです。

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.follower_ids.all'
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.follower_ids.to_hash[:ids]'

▼新しい順のフォロー一覧

最近フォローした20アカウント(API1回消費)

どちらも同じです。ただfriendsと言われてもイメージが湧かないのでfollowingメソッドのほうが好きです。

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.following.to_hash[:users].map{ |i| i[:screen_name] }'
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.friends.to_hash[:users].map{ |i| i[:screen_name] }'
全員(API(フォロワー数/20)回消費)

どちらも同じです。

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.following.all.map{ |i| i[:screen_name] }'
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.friends.all.map{ |i| i[:screen_name] }'

▼新しい順のフォロー一覧全員(API(フォロー数/5000)回消費 ただし数字ID)

設定系APIなのでリミットは15回/15分です。

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.friend_ids.to_hash[:ids]'

▼フォローする(APIリミット無し、ただし上限1000アカウント/日)

@riocamposと@riocampos2とをフォローする。

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.follow(["riocampos", "riocampos2"])'

▼リムーブ/アンフォローする(APIリミット無し)

@riocamposと@riocampos2とをリムーブする。

ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.unfollow(["riocampos", "riocampos2"])'

▼新しい順のリストメンバー

ユーザriocamposのitリストを表示するとします。

最近フォローした20人(API1回消費)
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.list_members("riocampos", "it").collection.map{ |i| i[:screen_name] }'

おまけ情報:

  • 自分のsampleリストを表示する場合にはlist_members("riocampos", "it")をlist_members("sample")に変更してください。
全員(API(フォロワー数/20)回消費)
ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.list_members("riocampos", "it").all.map{ |i| i[:screen_name] }'

▼リストメンバーの追加・削除

自分のアカウントのsampleリストのメンバー追加・削除。

sampleリストに@riocamposを追加
ruby -rtwitter -e 'load "./set.rb"; t = set; t.list_add_member("sample", "riocampos")'
複数のアカウント@aaa, @bbb, @cccを追加
ruby -rtwitter -e 'load "./set.rb"; t = set; t.list_add_members("sample", [aaa, bbb, ccc])'

一回100アカウントまで。ただしAPIリミット無しです(多分)。

sampleリストから@riocamposを削除
ruby -rtwitter -e 'load "./set.rb"; t = set; t.t.list_remove_member("sample", "riocampos")'

sampleリストに含まれていなくてもエラーは出ません。

複数のアカウント@aaa, @bbb, @cccを削除
ruby -rtwitter -e 'load "./set.rb"; t = set; t.t.list_remove_members("sample", [aaa, bbb, ccc])'
sampleリストのメンバー全てを削除!
ruby -rtwitter -e 'load "./set.rb"; t = set; t.list_remove_members("sample", t.list_members("sample").all.map{ |i| i[:screen_name] })'

もちろん空のリストが残ります。

*1:ruby -rtwitter -e 'load "./set.rb"; t = set; puts t.trends_available.map{ |i| puts("#{i.to_hash[:name]} #{i.to_hash[:woeid]}") if i.to_hash[:country] == "日本"}'で出力できます