51
56

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.

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

Last updated at Posted at 2013-03-30

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?