Migrating bookmarks from BlueDot to Hatena; Blue Dotからはてなブックマークへのデータ変換スクリプト(Ruby)
Rubyスクリプト書いた。ご利用はご自由に。
材料
- はてな?Rubyグループ - Rubyの魔神 - はてなブックマークAPIクラス hatenabm
- Nowhere Near - はてなブックマークAtomAPI バインディング for Ruby
- RubyでXML (REXML): Netsphere Laboratories
レシピ
まずgemでHatenaBMをインストール。
$sudo gem install hatenabm
Blue Dot: Dot Backup/Exporter で standard bookmark file format (HTML) のファイルをエクスポートする。ファイルの冒頭と末尾の余分な行を削除して、<DT><DD>の2行の繰り返しだけになるように編集する。
以下のスクリプトを実行する。
雑なコードですが。
ちなみにコードの整形がおかしいのはブログシステムのせいなのでご了承を。
require 'rubygems'
require 'hatenabm'
require 'rexml/document'
hbm = HatenaBM.new(
:user=> "", # ユーザ名
:pass=> "" # パスワード
)
doc = []
File.open("bluedot-export-yourid-serial.html") {|fp|
while dt = fp.gets
dd =fp.gets
dt =~ /href="([^"]*)"/
link = $1
dt =~ /TAGS="([^"]*)"/
tags = $1.split(/¥s*,¥s*/) unless $1.nil?
dt =~ /<A[^>]*>([^<]*)</
title = $1
dd =~ /<DD>([^<]*)(?:<¥/DD>)?/
summary = $1
doc << {:link=>link, :title=>title, :summary=>summary, :tags=>tags}
end
}
doc.each do |entry|
hbm.post(
:title => entry[:title], # タイトル
:link => entry[:link], # リンク
:tags => entry[:tags].join(' '), # タグ(スペース区切り)
:summary => entry[:summary] # コメント
)
end
うまくいけばインポートできる。エラーが出ていてもインポートは成功している場合があるのではてブのページをチェック。
※standard bookmark file format (HTML)という形式がびみょー。まったくvalidなxhtmlではないからREXMLで処理できないし、そもそもタグの入れ子が崩れているので。<DL><P>で始まり、</DL></P>で終わるという。Blue Dotのバグかと思って、はてブをエクスポートしたら、同じ形式だった。どうやら、これが「標準」らしい。>Netscape Bookmark File Format
ただ、Blue Dotでは//DT/A要素のTAGS属性でタグ情報を埋め込んでいた。なるほど、これは良い方法だな。というわけで正規表現で必要部分を抽出するコードを書いた。HTMLのアンエスケープをするべきなんだろうけど、めんどくさくて省略した。

