さるさる日記を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