蔵書リストを、レポート用紙1枚に収まる頃から書き始めて、自分でパソコンをもつと同時にDB化を考え、DBXLであれこれやるよりもテキストファイルで処理した方が簡単だと気付いたのが20年ほど前。以来何らかの形で買った本、読んだ本のメモは残してきた。
公開日記に本の事を書くようになってからは、手元のリストもいい加減になりがちでだったが、はてなに切り替えてからはてなブックマークのコレクションに持ってるものを入れてみようとしたり、Amazonで持ってるものは持ってるチェックをつけつぶそうとしたり、まあいろいろやってみてたのだけど、この土日にStack Stock Booksにアカウントを作ってちょっといろいろデータを入れてみてるところ。それなりに使えそう。
http://stack.nayutaya.jp/user/a_sue
ステイタスを記録できるのがいい。日付管理がすごくアバウトなとこは気になるけど、まあそこは妥協するとして。
で、せっかく手元にISBNを含むリストがあるので、過去データをまとめて登録してみた。
昨日やったのは書籍リストで、CSVにしてあるのでExcelに貼り付けて、ISBNの桁だけを取り出し「本を追加」のメニューで登録。一度に50件まで登録可能となっていたけど、実際にまとめてたくさん入れると登録できないデータがたくさん出てくるので試行錯誤の結果5,6件ずつだとちゃんと登録されるみたい。ISBNは、ハイフンが付いてても、その後ろのC0140とか、価格とかが付いたままでもかまわないので楽。ISBNがなかった時代の本や、記録してなかったものを含めて2,500行ぐらい処理して、実際に登録されたのが1,380件ぐらいだったか。
コミックリストを書籍リストと分けて管理してて、こっちはもうちょっと多いし、同じような事をやるのも芸がないので、APIを調べて自動で突っ込む処理に挑戦。
http://stack.nayutaya.jp/api
ちょっとかじっただけのRubyなので、if文の書式すら調べないとわからない有様だったけど、そこらで拾ったコードをつなぎ合わせたらちゃんと登録できましたよ。
こんな感じ
#! ruby -Ku #シリーズ名,シリーズ番号,書名,巻数,サブタイトル,著者名,初版発行日,出版社,ISBN,体裁,叢書名,個別番号,版,刷,発行日,入手日,読了日,種別,ジャンル,備考 require "net/http" require "nkf" require "yaml" require "pp" require "csv" def decode(str) return str.gsub(/(\\u[A-Fa-f0-9]{4})+/) { |chars| NKF.nkf("-W16B -w80", chars.scan(/\\u([A-Fa-f0-9]{4})/).map { |char,| char.hex }.pack("n*")) } end # 利用者ID user = "xxxxx" # APIトークン token = "0000000000000000" Net::HTTP.version_1_2 CSV.open(ARGV[0], 'r') do |row| if row[8] =~ /^[04]/ then # ISBN欄が 0 か 4 で始まっていれば多分有効 isbn = row[8]; isbn = isbn.gsub(/-/,'') isbn = isbn[0,10] Net::HTTP.start("stack.nayutaya.jp", 80) {|http| uri = "/api/#{user}/#{token}/stocks/update.1" fullDate = row[15]; # 入手日を使う state = "read" inputJSON = "[{asin: \""+ isbn +"\", date: \""+fullDate+"\", state: \""+state+"\", public: true}]"; response = http.post(uri, "request=#{URI.encode(inputJSON)}") body = YAML.load(decode(response.body)) pp(body) } sleep(2); end end
こんなものでもちゃんと動く。
ISBNが記録されてて間違ってなかったものは全部入って、今現在で約3,700冊分。昨日入れた書籍では、手放した分を外したのに、コミックではその処理を忘れたので、今は手元にないものまで登録しちゃったが、まあいいか。読んだ事があるのは間違いないし。
というわけで、ついでにこの日記の横に今読んでる本が出るようにしてみました。
登録したデータをあらためてダウンロードすると、きれいなリストが出るかな。