redmineのチケットをgrowlで表示してみる
解決法
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])}
後は
実践あるのみ