てきとうなメモ

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

mediamarkerからブクログに移行

だいぶ書いていなかったな。

mediamarkerが終了するということで、遅れながらブクログに移行してみた。

Excel等で編集して移行している人がいたのだが、面倒なので以下スクリプト使ってみた。

メディアマーカーの CSV をブクログ形式にするやつ · GitHub

たぶんこのままだとうまくいかない部分があったので、少し修正して以下のスクリプトを実行した。

mediamarkerから全項目をexport→スクリプトを実行→sjis文字コード変更→ブクログにimportするという流れ

#  -*- coding: utf-8 -*-
#
# メディアマーカーの CSV をブクログ形式にするやつ
# 使い方
#   ruby mm2bl.rb /path/to/MediaMarkerExport.csv > output.csv
# 参考
#   http://d.hatena.ne.jp/Unicellular/20120507/1336411135

require 'csv'

path = ARGV.shift
raise SystemExit.new 1 unless File.exists? path

lines = CSV.read(path)
lines.shift
lines = lines.map do |l| 
  # 今のmediamarkerの全出力は項目が多くなっているので修正。
  # また購入日を登録日に入れていたので、登録日を利用するように修正
  _, _, _, _, category, _, _, _, _, isbn, _, _, asin, register_date, _, tag, comment, assess, _, _, _, _, _, state, read_date, _, _ = *l

  servece_id = 1 
  state = case state
          when '未読' then '積読'
          when '読中' then 'いま読んでる'
          when '読了' then '読み終わった'
          else            '読みたい'
          end 
  memo = ''
  # タグはmediamarkerでは改行だが、ブクログではカンマ
  tag = tag.split(/[\r\n]+/).join(",")
  # タグが空だと自動的に何らかの日時がタグに入ってしまうようだ。空の場合はタグにして、管理画面から削除する
  tag = "タグ" if tag.empty?
  # read_dateは年-月-日形式だったので統一した。不要だったかも。
  register_date = register_date.gsub(%r|^(\d{4})/(\d{2})/(\d{2}).*$|, '\1-\2-\3')
  [servece_id, asin, isbn, category, assess, state, comment, tag, memo, register_date, read_date]
end

# 文字コード変換は実施せずに、nkf等で実施する
puts lines.map { |l| '"' + l.map { |w| w.to_s.gsub(/"/, '\"') }.join('","') + '"' }.join("\n")