はてなダイアリーの日記データをエクスポートするスクリプト

Spiderのお勉強のため、Rubyはてなダイアリーの日記データをエクスポートするスクリプトを書いてみました。はてなのログインページに継いでユーザ名、パスワードを送信してCookieを取得します。その後、はてなダイアリーの日記管理ページに継いで日記データをエクスポートします。
ファイル: he.rb

#!/usr/bin/env ruby

require 'ostruct'

$opts = OpenStruct.new(:debug => 0, :output_filename => 'export')

class HatenaSpider
  require 'net/https'
  require 'uri'
  require 'cgi'

  Net::HTTP.version_1_2

  def initialize(user, cookie)
    @user = user
    @cookie = cookie
  end

  def HatenaSpider.login(user, pass)
    uri = URI.parse('https://www.hatena.ne.jp/login')
    parm = "mode=enter&key=#{CGI.escape(user)}&password=#{CGI.escape(pass)}"
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    # XXX should check peer certificate...
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    http.start do
      res = http.post(uri.path, parm)
      cookie = res['set-cookie']
      raise 'invalid username or password.' unless cookie
      return new(user, cookie)
    end
  end

  def get(uri)
    http = Net::HTTP.new(uri.host, uri.port)
    http.start do
      res = http.get(uri.path, 'Cookie' => @cookie)
      return res.body
    end
  end

  def get_export
    get(URI.parse("http://d.hatena.ne.jp/#{@user}/export"))
  end
end

if __FILE__ == $0
  require 'optparse'

  Version = '0.1a'
  OptionParser.new do |opt|
    opt.banner = "Usage: he.rb [options] username password"
    opt.on('-d', '--debug', 'enable debug mode.') do
      $opts.debug += 1
    end
    opt.on('-o', '--output [filename]', 'output filename.') do |arg|
      $opts.output_filename = arg
    end
    opt.parse!(ARGV)
    if ARGV.size < 2
      puts opt.help
      exit
    end
  end
  user = ARGV.shift
  pass = ARGV.shift

  spider = HatenaSpider.login(user, pass)
  puts "login success user:#{user}." if $opts.debug > 0
  open($opts.output_filename, 'w') do |file|
    file.print spider.get_export
  end
  puts "export completed." if $opts.debug > 0
end

実行例:

$ he.rb ha-tan xxxxxx

BUGS: サーバ証明書を検証してません。プロキシに対応していません。