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必須