redmineのチケットをgrowlで表示してみる

問題点

redmineでチケット管理しるんですが、本格的には使い切ってないのでたまにチケットをほったらかしにしてしまう。

これは、、、やう゛ぁい、、、

解決法

growlにstickyモードで毎日表示すればさすがにやるだろ?俺!なぁ??
redmineには自分のチケットをATOMフィードにしてくれる機能があるので、それを毎日取得すればチケットのデータは取れるんじゃね??

redmineのチケットATOMフィードに関して

画面でフィルタをかけていると、ATOMのリンクも勝手にそれに即したデータをくれるのかと思っていたのですが、、、リーダーに入れるとうまく取れなくなる(すべて取得しちゃう)。もしや???と思ってATOMのURLにquery_id=NNNを追加で設定してみると「ビンゴ!!」。いい感じのデータが取得できるように。

コード

参考サイトです(すばらしくわかりやすい!!)
http://d.hatena.ne.jp/griffin-stewie/20080824/p1

require 'rubygems'
require 'meow'
require "feed-normalizer"
require 'net/https'

# growlのpreferenceでの表示
GROWL_TITLE = "paco's script notify"
# redmineのチケット一覧にあるATOMフィードのURLをデータとして使用。query_id=でフィルタ適用できまっせ
# [[domain,query,priority]....]
REDMINE_TICKET_ATOMS = [
  ["***.***.***.***","/issues?format=atom&key=passkey&query_id=3",2] , # 自分マターの未終了、期限切れ
  ["***.***.***.***","/issues?format=atom&key=passkey&query_id=5",1] , # 自分が起票者で未終了、期限切れ
]

def notify(title,message,option={},&block)
  @meep ||= Meow.new(GROWL_TITLE)
  option[:sticky] = true unless option.key?(:sticky) # 一応強制sticky
  @meep.notify(title,message,option,&block)
end

def get_url(text)
  text.sub(/(https?\:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/){|url| return url }
  return nil
end

def redmine(domain,query,priority=1)
  begin
    https = Net::HTTP.new(domain, 443)
    https.use_ssl = true
    https.start do |w|
      body = w.get(query).body
      if body
        feed = FeedNormalizer::FeedNormalizer.parse(body, :force_parser => FeedNormalizer::SimpleRssParser)
        feed.entries.each do |ticket|
          url = ticket.urls[0] if ticket.urls != nil && ticket.urls.size > 0
          if url
            notify("redmine",ticket.title,{:priority=>priority}){system "open -a Firefox3 #{url}"}
          else
            notify("redmine",ticket.title,{:priority=>priority})
          end
        end
      else
        raise "body nil"
      end
    end
  rescue => e
    notify("redmine"," データ取得エラー(#{e.message})",{:priority=>2})
  end
end

REDMINE_TICKET_ATOMS.each{|atom|redmine(atom[0],atom[1],atom[2])}

後は

実践あるのみ