Google Account から Google Apps Account へ Google Bookmarks のデータを移行するにあたって結構苦労したからメモしておく。
そもそもが Google Bookmarks には HTML ファイルに export する機能はあるのに、その HTML を import する機能が無い。WTF?これもわりと放置気味プロダクトであるが故なのだろうか。
それはともかく、import にはそれでもいくつか方法がある。
(実際には、上の2つは3番目の API を使ってるんだけど)
で、とりあえず一つ目を試そうと Firefox4 on Mac で Google Toolbar をインストールしようとしたら Firefox のバージョンが合わないとか言われたから、わざわざ 3.6.x (for Mac)をダウンロードして再度試したら、今度は「この拡張機能はこのOSでは使えません」とか言われてインストールできず。仕方なくわざわざ VMware Fusion 内の WindowsXP に Firefox 3.6.x をインストールし、Google Toolbar を入れた上で、ようやく古いアカウントの Google Bookmarks から export (
https://www.google.com/bookmarks/bookmarks.html )したHTMLファイルを、まずは Firefox の Bookmark へ読み込み、ついに Google Toolbar の「ブックマーク - Firefox からのインポート」を試した。しかし。まったくもってダメダメだった。一番最悪なのは、あるブックマークにタグを複数付けてた場合(例:tag1 と tag2)、Google Toolbar 経由でインポートしたブックマークのタグは "tag1 tag2" という二つのタグが空白でつなげられた一つのタグになってしまったところだ。これじゃまったく意味がないので速攻あきらめた。
次に、二番目の方法を試した。古いアカウントの Google Bookmarks から export し、そのHTMLファイルを Delicious に作った一時的なアカウントへ import (「Settings - Import / Upload Bookmarks」)、その上で新しいアカウントの Google Bookmarks から「Import Delicious Bookmarks」(
https://www.google.com/bookmarks/deliciousimport )を実行した。ぱっと見うまくいったように見えたが、よーく見るとタグがやけに少ない。ちゃんと見てみると、どうやらブックマークあたり高々一つのタグしかついてない。Delicious 側を確認すると、どうやら Google Bookmarks 側で複数タグをつけてても、Delicious 側には一つしか import されてないようだった。これじゃ意味がない。
なんかだんだん面倒になってきたけど、もうひと踏ん張り検索をしてみたら、
gbookmark2delicious というスクリプトを見つけた。こいつは Google Bookmarks の内容を Delicious へ同期してくれるらしい。これなら上記のタグがコピーされない問題も解決されてるかも!と思い、早速ダウンロードして実行したところ、Voilà! 無事複数タグもきちんとコピーされ、もとの Google Bookmarks の完全なコピーが Delicious 側にできた(と思ってた)。喜んで新しい Google Bookmarks から「Import Delicious Bookmarks」を実行したところほぼ完璧に Google Bookmarks の移行ができたように見えた。
しかし、よーく見ると、二つ問題があった。
- ブックマークの作成日時が全部同じ (当日)
- "delicious-export" という余計なタグがすべてのブックマークについてる (これは import 時に Google Bookmarks 側で付けてる)
- ("Unlabeled" というタグがついてたけど、これは Delicious 側で削除できた)
まず一つ目の問題は、そもそも gbookmark2delicious でブックマークをコピーする段階で日付の情報がコピーされてないのが原因だった。Google Bookmarks と Delicious 両方から export したHTMLファイルを眺めると、どうやらAタグに ADD_DATE という attribute (Epoch時間)をつけてやれば、作成日付情報もちゃんと移行できそうだった。gbookmark2delicious にちょこっと書き足して ADD_DATE attribute を Google Bookmarks から Delicious へコピーする(ただし、Google Bookmarks は micro second までの時間を使ってたから、下6桁を削除して秒単位までの数字をコピーした)ようにした上で再度実行したところ、今度こそ作成日時も正しく Delicious へコピーされた。で、多少どきどきしながら新しい Google Bookmarks アカウントで Delicious の import を実行したところ無事日時も正しくコピーされた。
この段階で、"delicious-export" という余計なタグが全部のブックマークについてること以外は、古いアカウントからの完璧なコピーができた。あとは、たんにそのタグを削除すればいんだろうと思い、「Manage labels」から "delicious-export" をさくっと削除して「できたできた」と悦に入ってたら、最後の落とし穴があった。なんとすべてのブックマークの日時がその時間になってしまった。つまり Google Bookmarks のブックマークについてる日時は作成日時じゃなくて変更日時なようだ。"delicious-export" を削除する、という変更をおこなうことによってすべてのブックマークの日時も変わってしまった。これじゃ一つ目の問題を解決した意味がぜんぜん無い。
いい加減心が折れそうになったけど、もう少しだけ検索したところ、今度は
Delicious Export to Google Bookmarks Uploader と
Google Bookmarks API Guide を見つける。(ここで、Google Bookmarks の「Import Delicious Bookmarks」もこの API を使ってることを理解する) これがうまく動くようだったら「Import Delicious Bookmarks」を使わないで済むので "delicious-export" のタグの問題が発生しないんじゃないかと期待したが、そもそもこの JavaScript では日時はまったく考慮されてなかったので問題外だった。とはいえ、gbookmark2delicious の時と同じようにちょっと追加すればうまくいくんじゃないかと期待して、そもそもどういう値を追加すればいいのか調べるため、「Import Delicious Bookmarks」の最中に出てくる import を確認する画面(これからインポートするブックマークとタグのリストが表示されてる画面)のソースを覗いてみた。
すると、JSCON形式のブックマークのリスト(タイトル、URL、コメント、タグ、日時)を
https://www.google.com/bookmarks/mark?op=upload に POST するような JavaScript のコードになってることが一目瞭然だった。しかも、タグの項にはにっくき "delicious-export" もばっちり含まれている。これだ!と思い、一旦 JavaScript のソースをファイルに保存、タグの項から "delicious-export" を削除した上でそのソースを再度ブラウザで読み込むと…、今度こそ本当に Voilà!完全なコピーの形で新しいアカウントへ Google Bookmarks をコピーできた。
簡単に(っても煩雑だけど)まとめると、
- gbookmark2delicious で古いアカウントから Delicious へコピーする (ただし、日時をコピーするのに一行追加が必要)
- "Unlabeled" というタグを Delicious 上で削除する
- 新しいアカウントで Google Bookmarks へログイン、「Import Delicious Bookmarks」を実行
- import の確認をする画面でソースを確認、そのまま一旦テキストファイルに保存する
- ソースをテキストエディタで開き "delicious-export" というタグを削除する (あと、.js ファイルの読み込みが相対パスになってるから、URL形式に変えとく)
- ブラウザでソースを開くと、自動的に再度 import を確認する画面へ遷移する
という感じで、古いGoogleアカウントから新しいGoogleアカウントへの Google Bookmarks のデータの完全なコピーができた。
どう考えても Google Bookmarks がこのまま存続していくとは思えない :-p