Twitter Streaming APIで日本語の内容をにポストするIRCサーバー

rubyのnet/ircを使ってみた。
パスワードと名前を設定して使う。Streaming APIここを参考にした。

#!/usr/bin/env ruby

require 'net/http'
require 'uri'
require 'rubygems'
require 'net/irc'
require 'json'

class TwitterStreaming < Net::IRC::Server::Session
 def initialize(*args)                                            
    super                                                             
  end        

  def server_name
    "twitterStream"
  end
  
  def main_channel
    "#TwitterStream"
  end

  def on_user(m)
    super

    post server_name, MODE, @nick, "+o"
    post @prefix, JOIN, main_channel
    post server_name, MODE, main_channel, "+mto", @nick
    post server_name, MODE, main_channel, "+q", @nick
    @streaming_thread = Thread.start do
      streaming_main      
    end
  end
  
  def on_disconnected
    @streaming_thread.kill rescue nil
  end

  def streaming_main
    uri = URI.parse("http://stream.twitter.com/spritzer.json")
    Net::HTTP.start(uri.host, uri.port) do |http|
      request = Net::HTTP::Get.new(uri.request_uri)
      request.basic_auth(@opts.user, @opts.pass)
      http.request(request) do |response|
        raise "Response is not chuncked" unless response.chunked?
        response.read_body do |chunk|
          status = JSON.parse(chunk) rescue next
          next unless status['text']
          tweet = status['text']
          if /[ぁ-ん]|[ァ-ヴー]/ =~ tweet
            screen_name = status['user']['screen_name']
            post screen_name + "@" + server_name, JOIN, main_channel
            post server_name, MODE, main_channel, "+o", screen_name
            post screen_name, PRIVMSG, main_channel, tweet
          end
        end
      end
    end
  end
end

opts = {
  :user => "username",
  :pass => "password"
}

Net::IRC::Server.new("localhost", 6668, TwitterStreaming, opts).start