Amazonの単価比較サイトを作ってみたら、商品情報の読み取りが意外と難しかった
最初は、商品ページから容量や個数を拾って、価格を割ればいい。
そんなに難しくないだろうと思っていました。
実際に作り始めるまでは。
数字を拾って割ればいい、ではなかった
例えば、500mLの水が24本入っている商品なら、
500mL × 24本なので、全部で12Lです。
価格を12Lで割れば、1Lあたりの価格が出せます。
ここまでは簡単です。
ところが、Amazonの商品情報を実際に見ていくと、数字がいろいろな意味で出てきます。
「500mL」「24本」「60日分」「1日2粒」「1粒2000IU」など。
数字だけを拾ってしまうと、
容量なのか、個数なのか、使用量なのか、成分量なのか分からなくなります。
例えばサプリメントなら、
「1粒2000IU」と「1日2粒」と「60日分」は、全部数字ですが意味は違います。
さらに、
「60日分 × 3個セット」のような商品もあります。
これを単純に数字として処理すると、60日分を3倍するべきなのか、
そもそも何を1単位として比較するのか、判断が必要になります。
つまり、単価を計算する前に、
商品ページに書かれている数字が何を意味しているのかを読む必要がありました。
一つ直すと、別の商品がおかしくなる
ここからが思ったより大変でした。
ある商品の間違いを直すと、別の商品で同じルールが使われて、
今度はそちらの計算がおかしくなることがあります。
例えば、
- 500mL × 24本
- 60日分 × 3個
- 100個 × 2セット
- 3個セット
これらは、見た目だけなら似たような「数字の組み合わせ」です。
でも、商品の意味はそれぞれ違います。
しかもAmazonの商品ページは、すべて同じ形式で情報が書かれているわけではありません。
商品名に書いてある場合もあれば、商品説明や仕様欄に書いてある場合もあります。
同じ商品について、違う場所に別の数字が出てくることもあります。
そのため、
「数字を見つけたら掛け算する」という単純なルールでは足りませんでした。
見つかった問題を、一つずつ残していく
そこで、実際の商品を使って問題を見つけるたびに、
そのケースを評価用のデータとして残すようにしました。
一度直した問題が、別の商品の追加や修正で再発することがあるからです。
例えば「500mL 24本」という商品で問題が見つかったら、
その商品だけ直して終わりにはしません。
「同じような書き方の商品でも大丈夫か」を確認して、
そのケース自体をあとからもう一度確認できるようにします。
そうやって少しずつ評価ケースを増やしていきました。
最初は34件だったものが、38件、45件と増え、
現在は68件のケースで確認しています。
現在の評価では68件すべてが期待した結果になっています。
もちろん、68件合っているからといって、すべての商品で正しく計算できるという意味ではありません。
ただ、新しい問題が見つかったときに、その問題を残しておけるようにはなりました。
単価比較サイトを作ることより、商品情報を読むことが難しかった
作る前は、単価比較サイトの難しいところは、
Amazonから商品情報を取得して、計算して、表示するところだと思っていました。
実際には、その前の段階でした。
商品ページにある情報から、
「これは比較に使える数字なのか」を判断するところです。
商品によって書き方が違うので、
一つのルールですべての商品を処理することはできません。
逆に、情報が足りなかったり、書かれている内容が食い違っていたりする場合は、
無理に計算しないようにもしています。
分からないものを、それらしい数字にしてしまうよりは、
「単価を計算できない」と表示したほうがいいと思ったからです。
この部分には、かなり時間をかけた
結局、1Atariを作るうえで一番時間がかかったのは、
商品情報をどう読むかという部分でした。
「こっちを直すと、あっちが崩れる」ということも何度もありました。
そのたびに実際の商品を確認して、ルールを修正して、
以前のケースももう一度確認する。
かなり地味な作業です。
でも、単価を表示するサイトなら、
ここを適当にするわけにはいきません。
作ったあとも、ちゃんと使えるものにしたい
単価の計算が一つ間違っているだけでも、
「このサイト、大丈夫かな」と思う人はいると思います。
一度そう思われると、他の商品まで本当に合っているのか、
使う側には分かりません。
ウェブサービスやソフトウェアを見ていると、
最初はよく使われていたのに、しばらくすると更新されなくなって、
そのまま使われなくなっていくものがあります。
そういうものを、これまでたくさん見てきました。
1Atariも、作って公開して終わりにはしたくありません。
実際に使ってみて、おかしいところがあれば直す。
直したら、前に動いていたものまでおかしくなっていないか確認する。
その繰り返しになると思います。
派手な作業ではありませんが、今はこういうところに時間を使っています。
そこで作ったのが1Atari.com
そんな試行錯誤をしながら作っているのが、
1Atari.comです。
Amazonの商品を検索すると、
容量や個数などをもとに、比較できる商品について単価を表示します。
例えば、同じ商品でも500mLが24本入りだったり、
1Lが12本入りだったりすると、単純な販売価格だけでは比較しにくいことがあります。
そういうときに、容量をそろえて比べられるようにしています。
商品情報をどのように読み取り、どんな場合に単価を計算し、
どんな場合には計算しないのかについては、
1Atari.comの本家解説記事で詳しく説明しています。
1Atariの商品情報解析エンジンは、どうやって単価を揃えているのか
作ってみて分かったこと
最初は「商品情報から数字を拾って割ればいい」と思っていた単価比較ですが、
実際に作ってみると、数字そのものよりも、
その数字が何を意味しているのかを判断することが重要でした。
そして、一度作って終わりというより、
実際の商品から問題を見つけるたびに、仕組みを直して、評価ケースを増やしていく。
たぶん、こういう地味な作業はこれからも続くんだと思います。
せっかく作ったものなので、使っていて気になるところがあれば直しながら、
少しずつ手を入れていくつもりです。

