Hatena::ブログ(Diary)

gan2 の Ruby 勉強日記 このページをアンテナに追加 RSSフィード

この日記のはてなブックマーク数 PV/ 1594219 Subscribe with livedoor Reader 役立つリンク集

2008-02-23

はてなダイアリーの日記データを hatena-mode 用のファイルに変換する

はてなダイアリーのエントリを hatena-mode 用に全部ローカルに持ってこようと思ったんだけど、hatena-modehatena-get-webdiary はなんか自分の環境だとうまく機能しないので、Ruby でやることにした。

はてなダイアリーエクスポート


hatena-diary-export2hatena-mode-files.rb

名前ながっ!

でもってネーミングセンスがよろしくない…。

だけど本質はそこじゃないので大丈夫。ちゃんと使えます。

もしこのスクリプトを使う場合は

#!/usr/local/bin/ruby -Ke
require 'kconv'
require 'open-uri'
require 'rexml/document'

userid = ARGV[0] || "gan2"
export_url = "http://d.hatena.ne.jp/#{userid}/export"
filename = "#{userid}.xml"
exists = {}

Dir.open("./") do |d|
  d.each do |f|
    exists[f] = true if /20\d{6}/ =~ f
  end
end

#open(export_url) do |f|
open(filename) do |f|
  doc = REXML::Document.new(f)
  doc.root.each_element do |e|
    date = e.attributes['date']
    body = e.elements['body'].text.toeuc.lstrip.chomp
    date.gsub!('-', '')
    unless (exists[date])
      open(date, 'w') do |f|
        f.write(body)
      end
    end
  end
end

OpenURI を使ってローカルにエクスポートしなくてもいいようにしたかったんだけどなんか REXML がパースに失敗するし、この処理は別に何度もやるようなものでもないと思ったので、別にいいかってことにした。


今回日記をローカルに持ってきた理由は、バックアップを手元に残しておきたかっていうのもそうなんだけど、それよりもずっと大きな理由がある。

それは、過去の日記を検索するときに、Web 上で検索をかけるよりも、ローカルで moccur-grep-find をした方が便利なことに気付いたからで、そのためには手元に日記のデータが必要だったからだ。

そんなわけで、hatena-mode 使ってる人はローカルに日記データを持ってきて、moccur-grep-find で .hatena 以下を検索してみるといいですよ!


今回勉強になったこと

  • shebang の -K オプションと、スクリプト中の $KCODE の違い
  • REXML で String が欲しい場合は get_text じゃなくて text を使う。
    • get_text で返ってくるのは REXML::Text オブジェクトなので、Kconv の toeuc とかが使えないので注意。
  • String#strip と String#lstrip.chomp は同じかと思ったら微妙に違う。
    • あとで検証したい。
  • デバッグしてるときに間違ったファイル名のファイルをたくさん作っちゃったりしたんだけど、そのときに dired の「% d」(正規表現にマッチしたファイルを d でマークする機能) が役に立った。今まであまり使う機会がなかったけど、はっと思い出して使ってみた。

参考

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gan2/20080223/1203770184