termtter から growl に通知する
http://jugyo.org/blog/2931がおもしろそうなので、termtter から growl に通知してみた。
できていること
require 'meow' Termtter::Client.add_hook do |statuses, event| if !statuses.empty? && event == :update_friends_timeline growl = Meow.new("Termtter") statuses.reverse.each do |s| screen_name = s.user_screen_name text = s.text.gsub("\n",'') growl.notify(screen_name,text) end end end
これを好きなとこにおいて、.termtterから require すればOK*1。とりあえず、誰の発言かということとその内容はでる。
超簡単ですばらしいと思った。
よくわからないこと
現状よくわかんないのが、どうやってアイコンを出すかということで、
.termtterに、
module Termtter class Status %w( id text created_at truncated in_reply_to_status_id in_reply_to_user_id user_id user_name user_screen_name user_profile_image_url # ここに user_profile_image_url を追加した ).each do |attr| attr_accessor attr.to_sym end end class Client def get_timeline(uri, update_since_id = false) doc = Nokogiri::XML(open(uri, :http_basic_authentication => [@user_name, @password])) statuses = [] doc.xpath('//status').each do |node| status = Status.new %w( id text created_at truncated in_reply_to_status_id in_reply_to_user_id user/id user/name user/screen_name user/profile_image_url # ここにも user/profile_image_url を追加した ).each do |key| method = "#{key.gsub('/', '_')}=".to_sym status.send(method, node.xpath(key).text) end status.created_at = Time.utc(*ParseDate::parsedate(status.created_at)).localtime statuses << status end if update_since_id && !statuses.empty? @since_id = statuses[0].id end return statuses end end end
とかを書いて、user_profile_image_url にもアクセスできるようにして
Termtter::Client.add_hook do |statuses, event| if !statuses.empty? && event == :update_friends_timeline growl = Meow.new("Termtter") statuses.reverse.each do |s| screen_name = s.user_screen_name text = s.text.gsub("\n",'') tmp = OSX::NSURL.URLWithString_(s.user_profile_image_url) #ここと icon = OSX::NSImage.alloc.initWithContentsOfURL(tmp) #ここと growl.notify(screen_name,text,:icon=>icon) #ここを追加 end end end
というようにしてあげれば、いいのかなーと思ったのだけれど、OSX::NSURL.URLWithString_(s.user_profile_image_url)がとれるのもあったり、 nil になったりするのがあって、よくわからなくなっている。あとでちゃんと考えたい。
*1:ただし、meow必須