Twitter Ruby Gemを使って、RubyでTwitterキーワード検索を試す

More than 1 year has passed since last update.

Twitter Ruby Gemを使って、引数で受け取った単語でTwitterキーワード検索して、結果を取得するRubyプログラムのサンプルです。
since_idを用いて最新結果を取得して、古いものから順(Tweet IDで昇順)に表示させます。

環境

サンプルコード

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 検索ワード