Amazon

 またまたアマゾンのアレに関連した話を。

 せどりのプログラムを、個人的に使っている分にはよほど無茶な使い方をしない限りは問題とはならないだろうけれど、一般公開していてそれでそこそこのアクセス数があるとやっぱり負荷が問題になってくる。

 そこで、一度取得したデータをキャッシュとしてローカルに保存しておく方法についてちょっとだけ考えてみようと思う。

 まず本屋に行き、タイトルだけは聞いたことがあったものの実際に読んだことが無かったAmazon Hacks 世界最大のショッピングサイト完全活用テクニック100選を立ち読み。パラパラをページをめくると、まさにそのものの「キャッシュとして保存する方法」が載っていた。

 そこでは、まずキャッシュファイルが存在するかを調べ、あれば最後に取得されてから24時間以上経っているかを調べる。まだ24時間経っていなければキャッシュファイルを使い、それ以外の場合は新たにダウンロードする。キャッシュのファイル名には、データをダウンロードするときのURLを、md5を使ってハッシュに変換した物が使われていた。

 つまり、一つの本に対して一つのファイルが割り当てられることになる。

 これ、検索を繰り返していくとファイルだらけにならないか…。

 まあ取得したデータの大部分を必要とするのであればそれも仕方がないかも知れないけど、このプログラムで使うデータというのはほんのちょっとしかない。そのためだけに一ファイルを割り当てるのは、ちょっと無駄が多すぎるんじゃないだろうか。

 かといって、いくら一つの本に関するデータが少ないとは言っても、それを全て一ファイルで管理するのも読み出すときが大変そうだ。プログラム的には大したこと無いけど、データが大きくなってくるとメモリが沢山必要になる。

 というわけで、何らかの基準で格納するファイルを分ければいいんじゃないかと考えた。

 同じISBNが入力されたら前に読んだ物を使って処理をするってことだから、やはりISBNを使ってルールを決めるのがいいだろう。その前にISBNの簡単な説明を。

 まずISBNというのはInternational Standard Book Numberの略で、「国際標準図書番号」という意味である。世界中にある本を、ISBNという番号でどの本であるかを特定できるようにしてある。

 ISBNは、

ISBNx-yyyy-zzzz-c

 という書式で構成されており、数値の部分は全部で10桁。xは国番号、yyyyは出版社コード、zzzzは本コード、cはチェックコードとなっている。日本の国番号は4だから、日本の書物であればここは4固定。ちなみにこの国番号の前に978というプリフィックスを付けて13桁となるISBNコードに置き換わっていくという話もあるがここでは省略。

 ここでは例として1-4-4-1の桁数で書いたが、間の4-4という部分は実は固定長ではなく可変長。ただし両方合わせて8桁と言うことは決まっていて、出版社コードは2〜7桁と決まっているため、2-6とか5-3といった感じになる。

 本コードというのは、その出版社から出版された本それぞれに付けられるユニークな番号で、同じ出版社コードを使っている物の中で重複しなければ自由に付けられる*1

 当然出版社コードが長いと、必然的に本コードが短くなってしまうため、出している本の種類が多いところは短い出版社コードを割り当てるんだろう。一応追加も出来るらしいけど。

 で、ここで考えたのはこの出版社コードを使って振り分けのルールを作ったらどうだろうかということ。一番簡単なのは一つの出版社に一ファイルを割り当てる方法。でもそれだと出版社の数ってけっこう多いから、一つの本に一ファイル、と大して変わらないんじゃないかと。だから一定の範囲内にある出版社コードをまとめて一つのファイルにしてみたらいいんじゃないだろうか。実際にやってみないことにはどっちがいいかは分からないけど…。

 いずれにしても出版社コードをどうやって抜き出すかが問題になってくる。せどりツールに入力するときはハイフン抜きだし、そもそもハイフンは便宜上書いてあるだけで、書かなければならないという決まりはない。

 手元にあった本を見てみると、出版社コードが3桁の物と4桁の物があり、こんなものどうやって区別したらいいんだろうと思っていたら、どうも出版社コードの先頭桁の数値が大きいのと小さいのがあるというのに気づき、ここに何かあるんじゃないだろうかと思ってhttp://www.isbn-center.jp/cgi-bin/isbndb/isbn.cgiを使って調べてみた。

 その結果は次の通り。

     00-     19
    200-    699
   7000-   7999
   8000-   8499
  85000-  89999
 900000- 949999
9500000-9999999

 もし間違ってたら教えてください。

 というわけでこれを元に分類をして、ということなんだけども実はまだなーんも考えてない。この出版社コードの分布がどうなってるかとか、それをどうやって割り振りすればいいのかってことを考えなきゃならないし。

 実際にせどりツールで検索されたISBNのデータがあればいいんだけど…。

*1:「同じ出版社コード」と書いたのは、本コードの桁数が足りなくなったら別の出版社コードを振ってもらえる為、「同じ出版社で」と書くと意味が違ってくるから