アマゾン

 id:marutahiko氏の質問question:1105319343を見て、なんだか面白そうだったから作ってみた。
画面イメージのイメージ
 画面イメージはこんな感じ。なんとなく嘘っぽく見えてしまうけれど、実際にCGIとして動作し、携帯からも見られるのです。

 少し前からamazonからxmlでデータを取得出来ることはなんとなく知っていたんだけど詳細についてはよく分かっていなかった。

 で、ちょっと調べてみたんだけれど、まずデベロッパトークンというのを取得しなければならないらしい。これが面倒だったのと本そのもののデータを取得するやり方はすぐ分かったけど、今回必要な値段のデータが出てこない。

 マーケットプレイスの情報も出ることは出るようなんだけど、最安値と後ちょっとぐらいしか出てこなくてあの画面の一覧表をxmlで受け取る方法は分からなかった。

 というわけでxmlは諦めてhtmlを加工してデータを抜き出すことにした。

 まあLWP::Simpleという便利な物があるからそれを使ってHTTP GETして、それを正規表現で必要なデータに変換してしまえば終了と。

 こういうとこで出てくるデータってプログラムが定形で出してきてるもんだからパターンを見つけるのは簡単。手作業で表が作られていて、しかもデータが追加されてる場合なんかは大変。そのときによって微妙に書き方が違う。属性値の順番が違ったりタグの順序が違ったり…。

 ところでマーケットプレイスには三つの分類がある。「ユーズド商品」と「コレクター商品」と「新品」なんだけど、この「ー」がくせ者でShift_JISで表すと二バイト目が\x5bつまり"["になっている。その商品がどの分類に当たるかを調べるためにこれらの文字を正規表現で抜き出しているんだけど、ここで引っかかってしまった。

 まあこれは有名な話だからすぐに分かったけど、これのおかげでその部分を16進数で表す羽目になってしまった。

 さらに「コレクター商品」にいたっては、「ー」はもちろん「タ」の二バイト目が\x5e、つまり"^"になるため、エラーは出ないものの絶対にマッチすることのない正規表現になってしまっていた。その直前に「ー」で引っかかったからすぐに気づいたけど、そうでなければもっとかかったかも。

 そんなわけでとりあえず完成したわけですが…よく考えたら使い道がないな…。古本屋ってまず行かないし…。まあなんか面白かったからいっか。

 そういや本家の所では「アマゾン品切れ」って表示があったみたいだけど付けてないな。どういうチェックをしてるのかわかんないしたぶん使わないから関係ないかw


 余談。「以外」と「意外」を混同して使っている人が多いのは前から思っていたけど、「いずれ」を「いづれ」と表記している人が多いことに最近気づいた。まあ音はどっちも同じだからねえ…。誤用を指摘してくれるFEPを使えば万事解決!…というわけにはいかないか。特に平仮名は変換にかけずに確定しちゃうしね。それ以前にちゃんと知っとかなきゃいけないって話か。