2017年2月6日月曜日

Firefox でエクスポートしたブックマークの HTML からタイトル部分だけを削除して Chrome にインポートする方法

概要

Firefox でブックマークの情報を HTML にエクスポートすることができます
その HTML を Chrome にインポートするというケースはよくあると思います
自分の場合、よくアクセスするブックマークはブックマークツールバーに置くようにしています
Firefox では「Roomy Bookmarks Toolbar」というエクステンションを使ってアイコンのみにしています
Chrome にも Roomy Bookmarks Toolbar というエクステンションがあるのですが、非常にイケてなく使えません

で、Chrome でブックマークツールバーをアイコンのみにする方法の 1 つとしてブックマークの名前部分を空にするという方法があります

この仕組みを使って一度 Firefox からエクスポートした HTML 情報から名前部分を削除し HTML を再生成します
そして、この HTML を使用することで Chrome でもツールバーの表示をアイコンのみにしてみました

環境

  • Firefox 47.0
  • Chrome 51.0.2704.103
  • Ruby 2.3.1

名前部分を削除する Ruby スクリプト

Ruby を使って HTML 情報を加工して名前部分を削除します

  • vim parse_bookmarks.rb
# coding: utf-8
begin
  File.open('bookmarks2.html', 'w') do |out_file|
    File.open('bookmarks.html') do |in_file|
      in_file.each_line do |line|
        puts "#{in_file.lineno}: #{line}"
        replaced = line.gsub(/(.*<A HREF=.*>).*(<\/A>.*)/) do |href_value|
          $1 + $2
        end
        out_file.write replaced
      end
    end
  end
rescue SystemCallError => e
  puts %Q(class=[#{e.class}] message=[#{e.message}])
rescue IOError => e
  puts %Q(class=[#{e.class}] message=[#{e.message}])
end

特に Gem を使ってライブラリをダウンロードしていないので、Ruby があればそのまま動作します
Firefox からエクスポートした HTML と同じディレクトリにスクリプトを配置して

  • ruby parse_bookmarks.rb

で OK です

作成された bookmarks2.html を Chrome にインポートするとアイコンのみのブックマークツールバーが表示されると思います

Tips

今回、ファイルを 1 行づつ処理して正規表現を使って文字列を置換する方法を採用しました
実はこの方法の前に「Nokogiri」を使ったスクレーピング方法を試していました
結論的に Nokogiri だとダメだったんですが、どうやら Firefox でエクスポートした HTML はちゃんとした HTML になっていないようです
( 閉じタグがなかったり必要なタグがなかったり )
で、Nokogiri は優秀な子でそういったイレギュラーなタグを補完して正しい HTML 情報に直してしまいます
そうして作成された正しい HTML 情報は Chrome にインポートすることができませんでした
なので、あえてスクレーピング専用のライブラリを使わないでファイル+正規表現の置換で対応した感じです

最後に

紹介は以上です
今回の方法だと一度 Ruby を実行する手間が発生してしまいますが、自分はこの方法で Firefox と Chrome のブックマーク情報を同期しています

昔は Xmarks Sync などのツールを使って同期していたのですが、Firefox アカウントとか Google アカウントでも同じようにブックマークの同期機能を使っているとうまく同期できなかった経験があります
なので、Xmarks はやめてこの方法に落ち着きました

特に自分の場合はスマホのブラウザのブックマークの同期を Firefox アカウントと Google アカウントで行っているので、それが原因だったのかもしれません

あとはそもそも Ruby を噛ませないで、名前部分を削除して HTML をエクスポートしてくれる Firefox のエクステンションを作成するのが綺麗な方法かなと思いました

0 件のコメント:

コメントを投稿