ブックマーク管理にSemantic Scuttleを使っていたが、もはやメンテされてなさそうなので、Raindrop.ioに移行した。
Semantic Scuttle側にはhtml,xml,csvへのexport機能があった。しかし、自分の環境ではphpでmysqlにアクセスして全ブックマークを取得しているところで落ちてしまっていた。そのためDBから直接exportする方法を考える。
Raindrop.io側のインポートのフォーマットは様々であるが、DBから直接exportしたデータを取り込むのでCSVを選んだ。
If you want to upload your own CSV file just make sure:
- Comma delimited
- Columns: url, folder, title, note, tags, created
- url column is required, other are optional
- use / to specify nested folder, like a/b/c
- to have multiple tags just put them in quotes, like "tag1, tag2"
- created column should have Unix timestamp or date in ISO 8601 format
- Column order doesn't matter
この仕様に合うように、Semantic ScuttleのDBにSQL文を実行し、エクスポートする。
SELECT 'folder', 'url', 'title', 'note', 'tags', 'created' UNION SELECT '' AS folder, b.bAddress AS url, b.bTitle AS title, b.bDescription AS note, GROUP_CONCAT(t.tag) AS tags, DATE_FORMAT(b.bDatetime, '%Y-%m-%dT%H:%i:%s') AS created FROM sc_bookmarks b LEFT OUTER JOIN sc_bookmarks2tags t ON b.bId = t.bId WHERE t.tag NOT LIKE 'system:%' GROUP BY b.bAddress INTO OUTFILE '/tmp/bookmarks.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"';
SQLの説明は以下。
- createdの形式はiso 8601形式にするため、DATE_FORMAT関数を利用
- GROUP_CONCATでタグをくっつける
- system:xxxはSemantic Scuttleのシステム用タグなので除外
- CSV出力でINTO OUTFILE ...を実行している
- SELECT 'folder' ... UNIONでヘッダを追加している
- フォルダはSemantic Scuttle上にはないので空文字
- 自分の場合は全ブックマークを出力した
- 公開したものや特定のユーザのものに絞り込みたい場合は条件を追加する必要がある
- プライベートノートを持っていきたい場合はbPrivateNoteカラムを利用する
/tmpに出力しているので、mysqldから/tmpにファイルを書き込みできるように以下のmysqlの設定を入れる必要がある
[mysqld] ... secure_file_priv = /tmp