てきとうなメモ

本の感想とか技術メモとか

Semantic ScuttleからRaindrop.ioへの移行

ブックマーク管理にSemantic Scuttleを使っていたが、もはやメンテされてなさそうなので、Raindrop.ioに移行した。

Semantic Scuttle側にはhtml,xml,csvへのexport機能があった。しかし、自分の環境ではphpmysqlにアクセスして全ブックマークを取得しているところで落ちてしまっていた。そのためDBから直接exportする方法を考える。

Raindrop.io側のインポートのフォーマットは様々であるが、DBから直接exportしたデータを取り込むのでCSVを選んだ。

Raindrop.ioの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

これで出力した/tmp/bookmarks.csvRaindrop.ioにインポートすることで移行できた。