地震情報通知アプリ”Quake Notifier”のソースコードを公開してみた。
前回の記事で書いた「Growl+Rubyで地震情報通知アプリ”Quake Notifier”」ですが、ブックマークを頂いたこともあり、Growl+Rubyのサンプルコードとして公開することにしました(またしても近隣からの突込みも)
http://d.hatena.ne.jp/dot_h2o2/20090815/p1
つたないソースコードですが公開します、より多くの人のお役に立つよう改良希望です(ライセンスはとりあえずGPLにしておきます)。
#!/usr/bin/ruby # Based on twitter notifier (http://d.hatena.ne.jp/snaka72/) # # Quake Notifier # 0.1 .h2o write http://d.hatena.ne.jp/dot_h2o2/ # require 'net/http' require 'rubygems' require 'json' require 'pit' require 'ruby_gntp' #Default Config $polling_time = 30 # Seconds $check_location = "札幌" # Filter Location #$twitter_feed = '/statuses/user_timeline/4104111.json' #earthquake_jp $twitter_feed = '/statuses/user_timeline/23551157.json' #p2pquake $after_flag=false $tweeted = {} $growl = GNTP.new $growl.register({ :app_name => "Twitter", :notifications => [{ :name => "Quake", :enabled => true }, { :name => "Error", :enabled => true }] }) def get_timeline max_count = 2 Net::HTTP.version_1_2 req = Net::HTTP::Get.new($twitter_feed) proxy_host, proxy_port = (ENV["HTTP_PROXY"] || '').sub(/http:\/\//, '').split(':') Net::HTTP::Proxy(proxy_host, proxy_port).start('twitter.com') {|http| res = http.request(req) if res.code != '200' $growl.notify({ :name => "Error", :title => "Error occurd", :test => "Can not get messages" }) puts res if $DEBUG return end results = JSON.parser.new(res.body).parse() results.reverse! results.length.times do |i| break if i >= max_count id = results[i]["id"] next if $tweeted.include?(id) puts screen_name = results[i]["user"]["screen_name"] text = results[i]["text"] icon = results[i]["user"]["profile_image_url"] if text =~ /#{$check_location}/ && $after_flag #Debug #puts "match" $growl.notify({ :name => "Quake", :title => screen_name, :text => text, :icon => icon, :sticky=> true }) else puts "done" end $after_flag = true $tweeted[id] = true sleep 1 end } end # Check timeline. while true do get_timeline sleep $polling_time end
注意点:
- コードはUTF-8として保存してください。(Twiiterから取得する文字コードがUTF-8のため)
- 通知希望地域は$check_locationで設定してください(標準は札幌)
- 地震情報のソース(標準はp2pquakeさん)はサンプルとして2件、記述しているので好きなほうを選んでください。
動作確認:
WindowsXP SP3 ruby 1.8.7(i386-mswin32) with Growl v2.0 Beta 20
もし、バイナリ(Rubyのインストール不要)版が欲しい方が居られましたら、コメント等で連絡くください。