はてなダイアリーの日記データをエクスポートするスクリプト
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: サーバ証明書を検証してません。プロキシに対応していません。