Migrating bookmarks from BlueDot to Hatena; Blue Dotからはてなブックマークへのデータ変換スクリプト(Ruby)

このエントリーを含むはてなブックマーク September 1st, 2007 | posted in tech, web |

Rubyスクリプト書いた。ご利用はご自由に。

材料

レシピ

まず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のアンエスケープをするべきなんだろうけど、めんどくさくて省略した。

Post a Comment