Twitter Ruby Gemを使って、引数で受け取った単語でTwitterキーワード検索して、結果を取得するRubyプログラムのサンプルです。
since_idを用いて最新結果を取得して、古いものから順(Tweet IDで昇順)に表示させます。
環境
- Ruby (Ver 2.0.0-p0)
- Ruby 2.0.0-p0 リリース
- Twitter Ruby Gem (Ver 4.6.2)
- Twitter API (Ver 1.1)
- Overview: Version 1.1 of the Twitter API | Twitter Developers
サンプルコード
Twitter_KeywordSearch.rb
#!/bin/env ruby
#encoding:UTF-8
require "twitter"
# アプリケーションキー(consumer key/secret)の読み込み
Twitter.configure do |cnf|
cnf.consumer_key = "XXXX"
cnf.consumer_secret = "XXXX"
end
# OAuth アクセストークンの読み込み
@client = Twitter::Client.new(
:oauth_token => "XXXX",
:oauth_token_secret => "XXXX"
)
# 変数の初期化
since_id = 0
counter = 0
# 無限ループ
while counter == 0 do
# 60秒待機
sleep(60)
begin
# 引数で受け取ったワードを元に、検索結果を取得し、古いものから順に並び替え
# ※最初はsince_id=0であるため、tweet ID 0以降のTweetから最新のもの上位100件を取得
@client.search(ARGV[0], :count => 100, :result_type => "recent", :since_id => since_id).results.reverse.map do |status|
# Tweet ID, ユーザ名、Tweet本文、投稿日を1件づつ表示
"#{status.id} :#{status.from_user}: #{status.text} : #{status.created_at}"
p status.id
p "@" + status.from_user
p status.text
p status.created_at
print("\n")
# 取得したTweet idをsince_idに格納
# ※古いものから新しい順(Tweet IDの昇順)に表示されるため、
# 最終的に、取得した結果の内の最新のTweet IDが格納され、
# 次はこのID以降のTweetが取得される
since_id=status.id
end
# 検索ワードで Tweet を取得できなかった場合の例外処理
rescue Twitter::Error::ClientError
# 60秒待機し、リトライ
sleep(60)
retry
end
end
実行
% ruby Twitter_KeywordSearch.rb 検索ワード