Snarl: Windows 上で Mac OS X の Growl みたいにできるやつ
Growl みたいなの欲しかったので探しました.すると Snarl ってのがあることを知り,早速導入してみると本当に Growl みたいですね!
なぜ Growl っぽいものが欲しかったかというと,Twitter の更新情報を PowerPoint 使ってるときも,Putty 使ってるときも,Meadow 使ってるときも表示して欲しかったから.
しかもRubyのインターフェイスがあるので、こりゃいいやということで、Rubyでプログラムを書いて更新情報を出せるようにしました。
Twitterの更新をSnarl(OSXのGrowlみたいなの)で表示する方法
ここを参考に,ruby-snarl を入れて,以下のスクリプトを使って Snarl でメッセージを表示できちゃいました☆引用したサイトのコードは,昔の twitter 用でして,今はそのままでは動きません.
require 'rubygems' require 'snarl' require 'net/http' require 'time' require 'rexml/document' include REXML require 'uri' user = ARGV.shift pass = ARGV.shift HOST = "twitter.com" CURDIR = Dir.pwd DATADIR = "#{CURDIR}/.twitter2snarl" LASTMOD = "#{DATADIR}/lastmod" ICONSDIR = "#{DATADIR}/icons" Dir.mkdir(DATADIR) unless File.directory?(DATADIR) # make uri u = URI::HTTP.build([ nil, HOST, nil, "/statuses/friends_timeline.xml", nil, nil]); # load last update begin f = File.open(LASTMOD, "r") lastupdate = f.gets f.close u.query = "since=" + URI.escape(lastupdate) rescue => evar puts "You are first time using twitter2snarl. Thanx!" end # request xml to twitter xml = nil Net::HTTP.version_1_2 req = Net::HTTP::Post.new(u.request_uri) req.basic_auth user, pass Net::HTTP.start(HOST, 80) { |http| res = http.request(req) xml = res.body } # check icons dir Dir.mkdir(ICONSDIR) unless FileTest.exists?(ICONSDIR) # parse xml and send message to snarl img_cache = Hash[] doc = Document.new xml doc.elements.each("statuses/status") { |s| text = s.elements["text"].text screen_name = s.elements["user/screen_name"].text image_url = s.elements["user/profile_image_url"].text ext = image_url.gsub(/^.*\.(jpg|png|gif)(?:\?\d+)?$/i, '\1') icon = "#{ICONSDIR}/#{screen_name}.#{ext}" # fetch profile icon if !img_cache[image_url] && !FileTest.exist?(icon) then u = URI.parse(image_url); File.open(icon, 'wb') { |f| Net::HTTP.start(u.host, u.port) { |http| res = http.get(u.request_uri) f.write res.body f.close } } img_cache[image_url] = 1 end Snarl.show_message("Twitter: " + screen_name, text, icon, 10) } # write last update to file f = File.open(LASTMOD, "w"); f.write Time.now.httpdate f.close
例によって,CodeRepos に入れたので,もっと洗練させましょうね!