読者です 読者をやめる 読者になる 読者になる

プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

Stack Stock Booksをやめて、Booklogに移行しました(移行スクリプト付き)

Life

最近のStack Stock Booksの落ちっぷりに業を煮やして、Booklogに移行しました。
大手だし大丈夫だろうという、根拠のない移行先選びでした。
taka2222の本棚(taka2222) - ブクログ


他の蔵書管理サービスだと、

なんかがありますね。自分の好みで選んだら良いと思います。


で、あるサービスから他のサービスに移る際に必要なのがデータ移行です。
幸い、Stack Stock BooksではCSVエクスポート機能が提供されていましたし、BooklogではCSVインポート機能が提供されていたので、移行は容易でした。
僕は面倒だったのでExcelでやったのですが、他の人もできるようにスクリプト化しました。Windowsでのみ使用可能です。
利用手順を以下に示します。

1. Stack Stock Booksのデータをエクスポートする

Stack Stock Booksの場合、マイページ→ダウンロードと辿ると、stocks.csvとして、全ての蔵書データをCSV形式でダウンロードできます。
ファイルはデスクトップに保存します。

2. 以下のスクリプトをssb_to_bklg.jsとして、デスクトップに保存する

項目の並びと、項目値の違いを吸収するためのスクリプトです。
残念ながら、stocks.csvには最終更新日しか持っていないので、それを初回登録日とし、読了日は空としています。

var fs = new ActiveXObject("Scripting.FileSystemObject");
var tsin = fs.OpenTextFile("stocks.csv");
var tsout = fs.CreateTextFile("booklogimport.csv");

// 1行目はヘッダのため読み飛ばし
tsin.ReadLine();

while(!tsin.AtEndOfStream) {
  var rowData = tsin.ReadLine().split(",");
  var isbn10 = removeDoubleQuote(rowData[0]);
  var isbn13 = removeDoubleQuote(rowData[1]);
  var status = convertStatus(removeDoubleQuote(rowData[rowData.length-2]));
  var updateDate = removeDoubleQuote(rowData[rowData.length-1]);
  tsout.WriteLine(["1", isbn10, isbn13, "-", "", status, "", "", "", updateDate, " ", ""].join(","));
}

tsout.Close();
tsin.Close();

function removeDoubleQuote(str) {
  return str.substring(1, str.length - 1);
}

function convertStatus(str) {
  if(str === "もう読み終えた") {
    return "読み終わった";
  } else if(str === "いま読んでいる") {
    return "いま読んでる";
  } else if(str === "まだ読んでいない") {
    return "積読";
  } else if(str === "いつか欲しい") {
    return "読みたい";
  }
}

3. 2.で作ったssb_to_bklg.jsをダブルクリックしてスクリプトを実行します。

booklogimport.csvが作成されるはずです。

4. Booklogにデータをインポートする

本の登録・編集→ファイルでまとめて登録→ファイルを選択ボタンを押下して、3.の手順で作成したbooklogimport.csvを指定し、ブクログ形式を選んで、インポートボタンをクリックします。
しばらく待つと完了するはず。


私の場合は756件でしたが、1分もかからずに終わりました。

というわけで

これでしばらく運用してみようと思います。