その方法では問題が発生する場合があることがわかり、その対処を行ったので紹介します。
その問題は、最近の(処理速度の速い)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のバージョンおよび動作環境に依存する場合もあるので、状況に応じて対応してください。