そしてそして、Ruby 奮闘記が開幕する

今回は、1000 件ほどの蔵書データベース入力(移植)だ。
手作業で 1件 30秒の流れ作業ができたとしても、8時間以上かかる計算になる。
不可能な作業量ではなさそうなところがまた迷いを誘うのだが……もし同じ時間や労力が必要になるとすれば、単純作業の繰り返しより、Ruby の勉強ができたほうが得るものは圧倒的に大きい
やるべきことは、決まった。

まず Amazon のサイトから「持っています」リストを引っ張り込むのは自動処理を諦めて手作業にする。無謀な挑戦は絶対しない、欲張らない、やれることをきっちり確実にこなす、このディレクションが超重要
Amazon のリスト表示は、1ページに 15件ずつしか表示されないので、60ページ以上の手作業による保存が必要になる。まあ許容範囲だろう。
その HTML ファイルを読み込んで ASIN 部分を検索し抽出するプログラムを考える。
実際には、書きながら、考えながら、調べながら、トライ&エラーを繰り返しながら一つずつクリアしていった。

データ(ファイル)の読み込みはマニュアル通りに書けば楽勝なので、次に ASIN の検索を考える。
手作業で保存した「持っています」 1.htm 内には URI が沢山あって、そこから ASIN を検索していくわけだが、そこで正規表現がほんの少しだけでも分かるのは好都合だった。迷うことなくそこに到達しトライする。
試行錯誤の結果、~/dp/◯◯◯◯◯◯◯◯◯◯(←必要なのはこの10桁)の部分を切り取って、そこから余計な /dp/ を除去するという処理にした。というか、一発で切り取れる方法が思いつかなかった……。一発で処理できればいいのかもしれないが、そのために延々とハマり続けて時間を無駄にするより、二発で簡単そうならそれで妥協するのも必要だ。宇宙へ飛ばすロケットだって二段~三段式が当たり前のように……。

これを出力すれば OK かと思いきや、「持っています」 1.htm 内にある、1品目あたり画像と文字の二つにリンク(URI)があるので、それが重複してしまうのと、1行区切りの入出力で空行(nil)ができてしまう問題があった。メディアマーカー側のインポート機能は、1行 1項目というルールだったので、それに合わせた出力結果にしたかった。(重複していてもメディアマーカー側が弾いてくれるけど)

正規表現の処理だけではまず無理なので、配列に入れるという基本中の基本を試す。
配列に入力する段階で、空(nil)をスルーしながら、という形で上手くいって、重複の除去は最終出力の「puts 配列」で「uniq」を付けることで上手くいった。
このへんはマニュアル類を見ながらやれば猿でもできる系なのが嬉しい。
C言語なんかでやろうとすると多分大変なことになるんだろうなぁ、なんて漠然とアホ面で天上界を見上げた。

そして、なにげに一番苦労したのが、複数ファイルの読み込みで、60ファイル以上あるものを手作業で保存したんだから、読み込みも手作業に(毎回スクリプト内(もしくはファイル名の方)をちょっと書き換える)しようかな……と妥協しかけたが、ここまで来ると少し欲が出てしまうし、やれそうな気がしてくるもので……。
まず最初に思いついたのは、ファイル名を 1.htm 2.htm…… と連番で保存しておいたので、スクリプトの方でも連番でループ処理していくようにと、最も簡単な方法を考えていたが……欲張った。
指定ディレクトリ内にあるファイルパスを拾ってきて、それを順次処理させることにした。(逆にこれのほうが問題が起こる可能性は広がると思うのだが……まあ自分専用だからいいんだけど)
これが大苦戦し……、つまりは find 一発目の処理で、空(nil)が与えられると open できずにそこで終了しているようなのだ(たぶん)。というか、それに気づくまでが素人には大変なのだが……。
なんとなく原因がわかれば対処はそんなに難しくないので、とはいえ、そもそも10行スクリプト程度だし、なにか難しい処理をさせているわけでもないし、1行追加する程度で事は片付く。

どんなにちっぽけな作品でも、こうして作り終えた後の余韻は格別なものだ。
プログラムを走らせると、ダァーっと ASIN が滝のように流れる。
それを Ctrl + C で拾う。(ファイル出力なんてもんは書いていない)
そしてメディアマーカーの一括登録枠に Ctrl + V で流しこむ。
「一括登録」をポチる。
無事 934件登録完了!!
購入金額 1,508,282円の表示に、ほっほぅ、と感心する。

でもなんで俺は Ruby を弄ろうとするのだろう。
やっぱり「国産」って響きが好きなんだろうな……。

そして、Amazon の「持っています」から、メディアマーカーへ

他のオンライン蔵書管理系(本棚)サービスで「ブクログ」だかはアカウントを持っていたのだが、いまいちだったのでそれ以来放置。
mixi内にあるやつも少し使っていたんだけれど、同じく馴染まず放置したまま。
今回あらためていくつかのサービスを見て回って、とりあえず「メディアマーカー」が良いかなという直感があったので、過去にアカウント取得した記憶を呼び覚ましつつ ID:PASS メモを探したけれども見つからず、新規で登録してみた。
ほんとうなら自分で CMS を少しそれっぽくしてオリジナルでいきたかったけれど、まあメディアマーカーより良くなることはまずないので考えないことにする。

早速、登録作業を試そうとポチってみると、いろいろ便利な登録方法が用意されていて、そこに一括登録を発見!
これはもしや Amazon から移植できてしまったりするのでは……と期待感が高まるも、残念ながら純正機能としてのインポートは無理なようで、ISBN と ASIN のリストに対応いうものだった。
約 1000 件をいちいち手動入力する気力なんてあるわけがないので、気長にローカルでチクチクとエクセルにでも入力していこうかなと、そのデータベースが完成したらリストで吐き出して一括登録すればいいかなと、そう思ったのだが、Amazon 内に幽閉されし「持っています」リストをやっぱり使いたい……救いたい……。

ということで、Ruby の勉強も兼ねてデータ移植スクリプト書きでもやってみるべかなと。
たのしいRuby」と「Rubyレシピブック」の真っ赤な二冊を本棚の奥から出してくる。

理想は、Amazon の「持っています」リストページから ASIN を引っ張ってくるようにしたかったのだが、HTTP クライアントなんてまず書けるわけがないし、その前にまず足し算を puts するところから復習が始まった……。

とりあえずインストールだけはしてあった RDE を起動して、「あぁ、これこれ、こんなんだったなあ」なんて懐かしみながら、数年前に習作で書いていたランダムサイコロプログラムを走らせてみる。(Amazon探索から~ここまでの道のりで半日経過)

全くの素人が一からスクリプトを書いて目的を達成するというのは、その処理がどれだけ簡単なものであろうと大きな挑戦になることは間違いないし、もしかしたら道半ばで挫折するかもしれない。
やりきったとしても、手作業のほうが早く処理できた、なんてこともありうる。
習作のサイコロなんかも、そのへんにある鉛筆を転がすなり、アミダくじでも書いてみるなり、手作業のほうが圧倒的に楽だし簡単に終わる。
しかし、それを数百回、数千回、数万回……と繰り返したり、その結果をなんらかの別用途に使いまわしたり、というような場合には、手作業だとまず不可能なレベルになってくる。

Amazon の「持っています」や「★評価」が消えてしまった

Amazon の「持っています」チェックがいつのまにか消えていた。
この商品を評価する」の★付けも。

もうこれ↓が商品ページに表示されることはないのだろうか。

Amazon で「カスタマーレビュー」を読んだり、「リストマニア」や「この商品を買った人はこんな商品も買っています」や「おすすめ商品」などから関連商品に出会う楽しみも、そして手に入ると「持っています」にチェックを入れて、読み終われば★を付け、そんな Amazon ライフが……終わった。

この機能が消えてからしばらくは様子見していたのだけれど、待てど暮らせど復活することはなく、どうやら一時的な消失やメンテナンスの類ではなくて、完全な仕様変更によるものだろうと諦めるに至った。
こんなことなら専用の管理ソフトを使うなりエクセルなんかで入力しておくなり(200冊くらいまではやっていた)、自己管理環境下で入力しておくべきだった。

こうした Amazon の便利さに依存しきってしまい、本来の使い道ではない機能だということも忘れていたし、バックアップがとれない場所への入力という重大なリスクを負い、これは本当に大きな過ちだった。

入力済み項目数は 1000 近く。
これを改めて別環境へ手作業で入力していくには結構な時間がかかるものだし今すぐは難しい。
後々ちゃんとしたデータベースをローカル環境に作るのは必要だとしても、とりあえずオンラインで管理できる環境も一つ欲しいところ。

Amazon 内をいろいろ探ってみると、「持っています」リストは Amazon サイト内の深いところで利用することは可能
それを使い続けることも考えてみたというか、実際に少し使ってみた結果、これは実用外だと判断。

「おすすめ商品」から、「商品を評価する」で、検索入力すれば「持っています」や「★評価」は可能。

同様に、「おすすめ商品」から、「おすすめ商品を正確にする」か「既にお持ちの商品」で、一回認証が入って、「「持っています」にチェックを入れた商品」や「評価した商品」に飛べる。

正直言って、このプロセスは深すぎるし、実用性ゼロだ。
終わった……。