Sunflat のブログ

ソフトウェア開発についての話題が多いかも

はてなダイアリー と はてなブックマーク をローカルマシンへバックアップする

はてなのサービスの中では、はてなダイアリーはてなブックマークをよく使っている。
これらのデータが消えると悲しいので、定期的にローカルマシンへダウンロードしてバックアップすることにした。
(多分サーバ側でもちゃんとバックアップしてあるだろうけど、念のため)

やり方

rubyを使う。
まず、WWW::Mechanizeを入れておく

gems install mechanize

あとは、cronやタスクなどで、定期的に以下のコマンドを実行させればOK!

ruby ./hatena_backup.rb "ユーザ名" "パスワード"

./backup ディレクトリに、データが月ごとに"diary[現在の月].xml"のようなファイル名で保存される。


以下、スクリプト本体

hatena_backup.rb
#!ruby -Ku

require 'date'
require 'rubygems'
require 'mechanize'

BackupDir='backups'

# write backup data to file
def write_data(basename, ext, data)
  Dir.mkdir(BackupDir) unless FileTest.directory?(BackupDir)
  File.open("#{BackupDir}/#{basename}" + Time.now.strftime("%m") + ext, 'wb') do |f|
    f.write data
  end
end

# init
username=ARGV[0]; password=ARGV[1]
raise 'give me parameters' if (!username || !password)

mechanize = WWW::Mechanize.new
mechanize.user_agent_alias = 'Windows IE 6'

# login
page=mechanize.get('https://www.hatena.ne.jp/login')
form = page.forms[0]
form['name'] = username
form['password'] = password
mechanize.submit(form)

# hatena bookmark
data=mechanize.get_file('http://b.hatena.ne.jp/dump')
write_data 'bookmark', '.xml', data

# hatena diary
data=mechanize.get_file( "http://d.hatena.ne.jp/#{username}/export" )
write_data 'diary', '.xml', data

# logout
mechanize.get("https://www.hatena.ne.jp/logout")

mechanize.get_file, write_data をしている箇所を書き換えれば、ほかのサービスのデータをバックアップすることもできると思う。