楽天ブックスのAPIを使う

楽天には、アフェリエイト用に、商品のデータにアクセスするためのAPIが用意されている。何か、プログラムの題材に使えないのかな、と考えていたのだが、いまいち思いつかない。
実は、楽天ショップの商品には、統一の商品コードが無く、お店が自由に設定できるらしい。そのため、ある商品を検索すると、いろいろな商品名がでてくる。

しかし、本は、共通のコードがあるので、それで管理されているため、ISBNコードにつき必ず1つの本が検索されるらしい。
ということで、本に絞って、特定のキーワードを含む本のランキングを表示するAPIは、おもしろいかもしれない、ということで、今日、調べてみました。

まずはここ。
楽天ウェブサービス:API一覧

そして、楽天ブックスのAPI。
楽天ウェブサービス:楽天ブックス書籍検索API

更に、これも使う。
楽天ウェブサービス:SDK一覧

SDKには、サンプルが付いているので、まずはこれを使って加工する。
でやってみたのだが、なんかうまくいかない。
サンプルの index.php は、エラー処理がかかれていないので、何で出ないのか解らない。
おかげに、SDKのソースを追いかけるはめに。
うまくいかない原因は、引数に何も入っていないから、というオチでした。

順調に表示するようになったのだが、次の問題発生。このAPIは、1ページに表示する本の数が、1から30までに制限されている。
例えば、タイトルに「PHP」を含む本を検索すると、134冊もヒットする。
ヒットした本すべて取り込みたい。
でも、1回目を取り込みしないと、何ページあるかわからない。

じゃ、という訳で、
1回目は普通にAPIを呼び出して、データを格納する。
この時のページ数を控えておく。
ページ数が1より大きい場合は、ループを回して、APIを呼び出し、データを格納の動作をページ分だけ繰り返す。
最後に、CSVにしてファイルに書き出す。

そこまでなんとかできました。
しかし、落としたファイルをよく見ると、PHP出版のプログラムに関係の無い本もふくまれています。
「プログラム言語PHP」の本のランキング、となると、更にジャンルを調べて関係のない本を除く必要が。

ということで、楽天ブックス総合検索APIで、ジャンルまで指定して検索する必要がありました。やりなおし、ということに。
(ジャンルとコードの一覧表を予め作っておく必要があるみたいです。)