はてなブックマークから Google Bookmarks に移行する!

これまではてブを使っていたのだが,検索したブックマークの編集ができないなどの不満があったので,Google Bookmarks へ移行を始めた.Delicious 経由でdel.icio.us to Google Bookmarksを使う方法だとうまくいかなかったので,ブックマークを移行するスクリプトを書いた.

はてなブックマークをやめる理由

  • 検索したブックマークの編集ができない(右上の検索ボックスにしか検索結果が表示されない)
  • 詳細な編集ページを開くのが大変(*usersをクリック,→このエントリーのブックマークを編集・削除をクリック)
  • 詳細な編集ページでもURLは編集できない(余分なパラメータを消したいときに困る)
  • しかもプライベートモードにしているとタイトルが編集できない(タイトルは共有だから? でも,chromeはてブ拡張なら可能だ.わけわからん)
  • 以前に比べると速くなったが,まだ遅い
  • そもそもブックマークをオンラインで管理するのが主目的で,共有機能はどうでもいい

「検索」機能と「編集」機能に不満があるのはよろしくない.速度は我慢できるが..

移行先

DeliciousGoogle Bookmarks がよさそうだ.

Delicious への移行

はてブで,設定→データ管理→エクスポート→ブックマーク形式でダウンロード,を保存.
Delicious からインポートすれば,タグ,コメントも含めて移行できる.
すごい簡単だった.

Google Bookmarks への移行

一方,こちらは手間取った.Google Bookmarks はインポートが(まだ)できない.
はてブからGoogle Bookmarkへの移行を見ると,Delicious に一旦移行して,del.icio.us to Google Bookmarksを使って Google Bookmarks に登録する方法が紹介されていたが,del.icio.us to Google Bookmarksがうまく機能しなかった(Yahoo.comアカウントで登録したから?).しかもスクリプトを調べてみると,コメントを移行できない!ことがわかった.これは使えん.

そこで,はてブからエクスポートしたデータを解析して,Google Bookmarks AIP を使って登録することにした.以下の Python スクリプトを書いた.ちなみに,正式なAPIのマニュアルは公開されていないようで,Google Bookmarks API Guideを参考にした.

hateb-to-google-bkm.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, re, urllib

if len(sys.argv)!=2:
  print 'error!'
  print 'usage: '+sys.argv[0]+' BOOKMARKS-FILENAME'
  sys.exit(1)

bookmark_file=sys.argv[1]

print '''
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<TITLE>hatena bookmark to google bookmarks</TITLE>
<H1>hatena bookmark to google bookmarks</H1>'''

c_href=r'HREF=\"(?P<href>[^\"]*)\"'
c_tags=r'TAGS=\"(?P<tags>[^\"]*)\"'
c_title=r'\s*(?P<title>[^\<\>]*)'
re_bookmark=re.compile(r'.*\<A\s+'+c_href+r'.*'+c_tags+r'.*\>'+c_title+r'\<\/A\>.*')
re_annotation=re.compile(r'.*\<DD\>(?P<annotation>[^\<\>]*)\s+')
pfile=file(bookmark_file,'r')

res=[]
while True:
  line= pfile.readline()
  if not line: break
  m1=re_bookmark.match(line)
  if not m1: continue
  line= pfile.readline()
  if not line: break
  m2=re_annotation.match(line)
  b_href=m1.group('href')
  b_title=m1.group('title')
  b_tags=m1.group('tags')
  b_annotation=''
  if m2: b_annotation=m2.group('annotation')

  gburl='http://www.google.com/bookmarks/mark?op=add&output=popup' \
    +'&bkmk='+urllib.quote(b_href) \
    +'&title='+urllib.quote(b_title) \
    +'&annotation='+urllib.quote(b_annotation) \
    +'&labels='+urllib.quote(b_tags)
  res.append((gburl,b_title))

for r in reversed(res):
  print '<a href="'+r[0]+'" target="__blank">'+r[1]+'</a><br>'
使い方
./hateb-to-google-bkm.py dump

dump は,はてブからエクスポートしたファイル.たぶん,はてブがエクスポートしたファイルしか使えない.
実行すると,標準出力に html が出力されるので,適当なファイルに保存して,ブラウザで開く.
リンクの一覧が表示される.
各リンクをクリックすると,Google Bookmarks の登録画面が表示されるので,問題なければ「保存」をクリック.
すべてのリンクについて,手動で繰り返すorz..えぇ,自動でやる方法が見つかりませんでしたよ.
私の場合,約400個のブックマークを20分弱で移行できたので,許容範囲?

言い訳

XML でアップロードする方法もあって,del.icio.us to Google Bookmarksは,そうしている.これだと,一括で移行できる! 私が最初に書いたコードも,XML を使ったものだ.しかしながら,前述したように,XML を使う方法だと,コメント(メモ)が移行できない.Google Bookmarks API Guideによると,

Description: this is an efficient method for applications to upload bookmarks. With a single POST, all bookmarks are submitted. One important limiations is that it does not accept annotations. The reason for this limitation is that the upload capability was written to migrate "IE favorites" to Google Bookmarks, and IE favorites don't have annotations. The action of importing bookmarks does not remove the existing ones.

(強調は引用者)だそうな.

Google Bookmarks を快適に使うために

  • http://www.google.com/bookmarks/ : このページはオススメしない.Google はこのページを改善すべき.すべてのタグが左にリスト表示されて,ページが長くなり,ブラウズしづらい.
  • http://www.google.com/notebook/bookmarks : このページが使いやすい.タグの絞り込みが使いづらいが..
  • SimpleGoogleBookmarks (chrome のエクステンション) : タグでブックマークを検索しやすくて便利.ウェブページの登録もしやすい(キーワード選択機能あり).ただし,URLは固定されるので,URLを編集したい場合は,Add Google Bookmark などをインストールしておく(こちらはキーワード選択機能なし.手動).
  • Taberareloo (chrome のエクステンション) : はてブ,Delicious,Google Bookmarks などに同時にポストできる.URL編集可.タグが,一部しか表示されないのが残念.ただし,はてブなどからタグを自動取得してくれるし,タグの補完機能がすごい(日本語でも des でデザインなどがリストされる).
  • おまけ: Delicious Tools (chrome のエクステンション) : Delicious 用のエクステンションでは,これが一番いいと思う.