termtter から growl に通知する の続き
引き続きtwitter、というかtermtterの話。
termtter から growl に通知する - Learning to be Me の続き。growlで通知するとこまではできたのだが、ユーザのアイコンが表示できていなかった。url指定しても、うまくいったり行かなかったりなので、結局一度ダウンロードして、画像を表示することにした。
~/sketch/ruby/growl-send.rb とかそんな感じの適当なファイルに、
require 'meow' require 'uri' def get_icon(s) cache_file = "#{Termtter::CACHE_DIR}/#{s.user_id}" unless File.exist? cache_file buf = "" open(URI.encode(s.user_profile_image_url)) do |r| buf = r.read end open(cache_file,"w") do |r| r.write(buf) end end return OSX::NSImage.alloc.initWithContentsOfFile(cache_file) end 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",'') icon = get_icon(s) growl.notify(screen_name,text,:icon=>icon) end end end
を保存してあげて、
.termtter を、
module Termtter CACHE_DIR = '/tmp/termtter-icon-cache-dir' 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 ).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 ).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 Dir.mkdir(Termtter::CACHE_DIR) unless File.exist?(Termtter::CACHE_DIR) require File.expand_path('~/sketch/ruby/growl-send.rb') configatron.user_name = 'ユーザ名' configatron.password = 'パスワード'
という感じにしてあげれば、アイコン付きで、termtterからgrowlに通知がいく、はず。