なんでそんなものが必要なのかというと、インポートしたい記事がCSV形式でしか手元に残ってなかったから。で、Rubyでひょひょいとスクリプト書いてXML形式にしてみたけどインポートできてないみたいだ。うーん。
というか、[インポート]ボタン押しても「日記の読み込みを開始しました云々」と表示されるだけで、結局インポートがうまくいったのかいってないのか、それとも処理に時間がかかっているだけなのか何なのか全くわからないので困る。
しかたなく記事一覧から該当記事がインポートされているかどうかF5連打しながらチェックしたり。でも見つからないってことはたぶん失敗してるんだろうなぁ。
スクリプトでの変換がうまくいってない可能性はすごくある。でもとりあえずはてなダイアリー日記データ用 XML Schemaを使ってValidなことは確認はした。
うーんうーん。今日は寝る。
スクリプトは↓な感じ。
#!/usr/bin/ruby # # はてなダイアリーのCSV形式エクスポートデータをXML形式に変換する # 2008/09/18 written by ymkn ( http://d.hatena.ne.jp/ymkn/ ) # # 使い方: # 1. このスクリプトをUTF-8で保存する (ex. h_csv2xml.rb) # 2. 読み込むCSVデータをUTF-8に変換しておく (ex. hatena_utf8.csv) # 3. ruby h_csv2xml.rb < hatena_utf8.csv > hatena_utf8.xml # require 'csv' require 'rexml/document' doc = REXML::Document.new doc << REXML::XMLDecl.new('1.0', 'UTF-8') diary = doc.add_element('diary') csv = STDIN.read CSV.parse(csv) do |row| day = diary.add_element('day', {'date' => row[0], 'title' => row[1]}) day.add_element('body').add_text(row[2]) unless row[3] == nil comments = day.add_element('comments') row[3].split("\n").each do |c| /^(.+?)『(.+?)』/ === c comment = comments.add_element('comment') comment.add_element('username').add_text($1) comment.add_element('body').add_text($2) # CSV形式にはコメントのtimestampが含まれていないので、日記の日付で代用する t = row[0].split('-') comment.add_element('timestamp').add_text(Time.local(t[0], t[1], t[2]).to_i.to_s) end end end doc.write STDOUT