その方法では問題が発生する場合があることがわかり、その対処を行ったので紹介します。
その問題は、最近の(処理速度の速い)PCを使うと気がつかないかもしれません。
しかし、少し前の(処理速度の遅い)PCを使うとCPU100%状態が続き、プログラムの処理が追いつかなくなって、エラー終了することが頻繁に発生します。
以前はとりあえず動作することが目的だったので、速いPCで動作すれば良かったのですが、その後、限られた資源の効率よい役割配分が求められたので、必要に迫られて試行錯誤しました。
結論としては、以前は不採用としたTwitterStreamを使う方法できちんと動作することを確認しました。
古いPC上でのCPU負荷を、ざっくりとした比較をすると
http接続による処理 → 100%オーバー
TwitterStreamを使用 → 数%程度
となりました。TwitterStreamを使用 → 数%程度
■前準備
インストールには、Development Kitが必要です。
(1) Linux
(2) Windows
■gemのインストール(1) Linux
ruby-develをインストールします
そのほかに、g++など基本的な開発ツール見つからずにエラーになる場合もあるようです。適宜インストールしてください。
yum install ruby-devel
そのほかに、g++など基本的な開発ツール見つからずにエラーになる場合もあるようです。適宜インストールしてください。
(2) Windows
gem install tweetstream
■サンプルコード
1時間単位で別ファイルに、TweetID、日時、ユーザID、Tweet内容を出力します。
コンシュマーキーやアクセストークンは別途取得してください。
コンシュマーキーやアクセストークンは別途取得してください。
require "tweetstream" require "date" consumer_key = "xxxxxxxx" consumer_secret = "xxxxxxxx" access_token = "xxxxxxxx" access_token_secret = "xxxxxxxx" TweetStream.configure do |config| config.consumer_key = consumer_key config.consumer_secret = consumer_secret config.oauth_token = access_token config.oauth_token_secret = access_token_secret config.auth_method = :oauth end TweetStream::Client.new.sample do |status| next unless status.user dt = status.created_at.to_s.split( /[ :-]/ ) fname = "#{dt[0]}#{dt[1]}#{dt[2]}_#{dt[3]}.txt" daytime = "#{dt[0]}-#{dt[1]}-#{dt[2]} #{dt[3]}:#{dt[4]}:#{dt[5]}" f = open( fname, "a:utf-8" ) f.puts "#{status.id}\t#{daytime}\t#{status.user.screen_name}\t#{(status.text).gsub(/[\r\n\t]+/, " ")}" f.close end exit
※Webを検索するとTweetStreamにパッチの必要性との情報もありますが、最新環境ではパッチ不要で動作しています。RubyやGemのバージョンおよび動作環境に依存する場合もあるので、状況に応じて対応してください。