ついでに、URLをtweetburnerで短縮するプラグインも書いてみた

# -*- coding: utf-8 -*-

require 'net/http'

config.plugins.tweetburner.set_default(:length_to_shorten, '40')
config.plugins.tweetburner.set_default(:open_timeout, '4')
config.plugins.tweetburner.set_default(:read_timeout, '6')
length_to_shorten = config.plugins.tweetburner.length_to_shorten.to_i
open_timeout = config.plugins.tweetburner.open_timeout.to_i
read_timeout = config.plugins.tweetburner.read_timeout.to_i

Termtter::Client.register_hook(
  :name => :tweetburner,
  :points => [:modify_arg_for_update],
  :exec_proc => lambda {|cmd, arg|
    long_url = []
    arg.gsub(URI.regexp) {|uri|
      long_url.push(uri) unless uri.size < length_to_shorten || /^http:\/\/twurl\.nl\// =~ uri
    }
    return arg if long_url.empty?

    Net::HTTP.version_1_2
    http = Net::HTTP.new('tweetburner.com')
    http.open_timeout = open_timeout
    http.read_timeout = read_timeout
    begin
      http.start do
        long_url.each {|longurl|
          response = http.post('/links', "link[url]=#{longurl}")
          if response.code == '200'
            arg.sub!(longurl, response.body)
          else
            puts "Tweetburner error : #{response.code}"
          end
        }
      end
    rescue Timeout::Error
      puts 'Tweetburner access timeout'
    end
    arg
  }
)
#Optional setting.
#  config.plugins.tweetburner.length_to_shorten = '40'

もののついでに、tweetburnerでURLを短縮するプラグインも書いてみました。
せっかくなので、見よう見まねでタイムアウトの処理も書いてみましたが、タイムアウト時間などが設定できても、あまりうれしくないですね。

「bit.lyに登録するのは面倒だけど、ちょっと統計情報があったらうれしい」という時につかえるかと思ったのですが、総じてAPIを使うよりWeb上から利用したほうが便利なサービスのようです。