GrowlでTwitter

今までTwitterrificを使ってたんだけど、うっとおしくなってきたので、ターミナルでTwitterを表示するスクリプトを作りました。やっぱターミナルだよね。
下記のページを参考というかほぼパクらしていただきました。ありがとうございました。

ターミナルにTwitterのメッセージが流れます。GrowlTwitterが読めます。

#!/usr/bin/env ruby

require 'net/http'
require 'kconv'
require 'json'
require 'base64'

require File.join(File.dirname(__FILE__), 'Growl')

class Twitterminal
  def initialize(user, pass)
    @notifier = register
    Net::HTTP.version_1_2
    @req = Net::HTTP::Get.new("/statuses/friends_timeline.json")
    @req.basic_auth user,pass
  end

  def register
    #アイコンに使うNSImageを生成
    icon = icon=OSX::NSImage.alloc.initWithContentsOfFile(
      File.join(File.dirname(__FILE__), 'app.icns'))
    #GrowlNotifierを生成
    notifier = GrowlNotifier.new('Twitter', ['new Message'], nil, icon)
    #登録実行
    notifier.register
    notifier
  end

  def crowl
    trap("SIGINT")  { exit! 0 }
    trap("SIGHUP")  { exit! 0 }
    trap("SIGTERM") { exit! 0 }

    prev = Time.at(0)
    while true
      show(prev); prev = Time.now
      sleep(30)
    end
  end

  def show(prev)
    json = Net::HTTP.start('twitter.com',80) {|http|
      http.request(@req).body
    }
    JSON.parse(json).reverse.each do |st|
      created_at = Time.parse(st['created_at'])
      next if (created_at - prev) < 0
      puts "-----"
      puts "#{st['user']['screen_name']} #{created_at.strftime('%Y/%m/%d %X')}"
      puts "#{st['text']}"
      @notifier.notify("new Message", "#{st['user']['screen_name']}", "#{st['text']}",
                       nil, nil, true, -2)
    end
  end
end

user = ARGV.shift
pass = ARGV.shift
Twitterminal.new(user, pass).crowl