さるさる日記をHTMLで保存

思い出のさるさる日記がついに終了してしまう。

大学入学のため京都に向かったところからの2年間の黒歴史がつまった日記が、人には決して見せられず、自分でも直視できないとはいえ、この世から消滅してしまうのはもったいない。

Movable Type形式でログを保存しておこうとダウンロードしたら、日付に投稿日時がマッピングされていて、日記上に設定した(画面に表示される)日付が取得できなかったので、HTMLのままでも保存することにした。

CSSがべた書きだったので、スクリプトで保存したHTMLファイルをブラウザで開くと、さるさる日記のレイアウトのまま読めた。

スクリプトの定数のUSER_ID(日記のアドレスに表示される6桁?の数字)、STAR_YEAR(日記を書き始めた年を4桁整数)、END_YEAR(日記を最後に更新した年)を変えればたぶん動くと思う。

"http://www3.diary.ne.jp/"のホスト名の数字"3"も日記によって違うので、そこも要修正。


さるさる日記ってはてなとかと比べるとめちゃくちゃレスポンス速い!

# -*- coding: sjis -*-
require 'open-uri'

USER_ID = "XXXXXX"
START_YEAR = 2003
END_YEAR = 2005
TARGET_DIR = "./result"

Dir.mkdir(TARGET_DIR) unless FileTest.exist?(TARGET_DIR)

uri = "http://www3.diary.ne.jp/logdisp.cgi?user=#{USER_ID}"
years = START_YEAR.upto(END_YEAR).map{ |y| y.to_s}
months = 1.upto(12).map{ |d| d.to_s.rjust(2, "0")}
yyyymms = []
years.each do |y|
  months.each do |m|
    yyyymms << y + m
  end
end
yyyymms.each do |yyyymm|
  yyyymm_uri = uri + "&log=#{yyyymm}"
  file = open(yyyymm_uri).read
  unless %r!日記件数! =~ file
    puts "#{yyyymm}...nothing"
    next
  end
  File.open(TARGET_DIR + "/#{yyyymm}_1.html", "w"){ |f| f.puts file}
  maxcount = file.scan(%r!日記件数\s<b>(\d*)!)[0][0].to_i
  page_num = (maxcount-1) / 10
  if page_num >= 1
    1.upto(page_num).each do |p|
      File.open(TARGET_DIR + "/#{yyyymm}_#{p + 1}.html", "w") { |f| f.puts open(yyyymm_uri + "&start=#{p}1&maxcount=#{maxcount}").read}
    end
  end
  puts "#{yyyymm}...#{page_num + 1}files #{maxcount}diaries saved"
end


こんな感じ

ruby sarusaru_diary.rb > log.txt

log.txt

200301...nothing
200302...nothing
200303...1files 3diaries saved
200304...3files 29diaries saved
200305...3files 23diaries saved
200306...2files 20diaries saved
200307...2files 20diaries saved
200308...2files 13diaries saved
200309...3files 21diaries saved
200310...3files 24diaries saved
200311...3files 21diaries saved
200312...3files 24diaries saved
200401...3files 21diaries saved
200402...3files 23diaries saved
200403...2files 17diaries saved
200404...3files 23diaries saved
200405...3files 24diaries saved
200406...3files 21diaries saved
200407...4files 37diaries saved
200408...1files 10diaries saved
200409...3files 27diaries saved
200410...3files 30diaries saved
200411...3files 26diaries saved
200412...3files 21diaries saved
200501...3files 30diaries saved
200502...3files 23diaries saved
200503...2files 19diaries saved
200504...3files 21diaries saved
200505...2files 18diaries saved
200506...2files 14diaries saved
200507...3files 23diaries saved
200508...2files 16diaries saved
200509...2files 20diaries saved
200510...2files 12diaries saved
200511...2files 15diaries saved
200512...1files 8diaries saved