チョモランマに登るには。

Androidアプリ開発の初心者が立派な開発者になるまで

楽天ブックスAPIを使うときに右往左往した話

こんにちは。
今日は、楽天APIを初めて使ってみましたので、ちょっとその記録を書きたいと思います。

今度は書籍管理アプリを作ろうと思っていまして、その中での書籍検索に楽天APIのお力を借りることにしました。

触った感じでは特に難しくもなく、[リクエストURL⇒JSONデータ解析]という単純な形式でした。

どのAPIを使うか


こちらが楽天APIの一覧です。

楽天ウェブサービス: API一覧

リクエストURLにアプリIDが必要なので、先にアプリIDを取ります。

色々APIがありますが、今回は書籍を検索したいので楽天ブックス系のAPIですね。

またブックス系の中でもさらに分かれていて、書籍APIも、「~総合検索」と「~書籍検索」の2種類があります。  
似たようなものですが、少しずつパラメータの言葉が違っていたり、リクエストに設定できるもの、帰ってくるデータが違っていたりするので、どっちを使うか詳細を見て決める必要があります。


ちなみに僕はYouTubeDataAPIを初めて使うときに、APIの中でも種類が分かれていることに気づかず、「なんでこのデータがとれないんだーー!」と大変頭を悩ませたことがあります。
まぁ今回はそこまで頭を悩ませることはありませんでしたが、それでもどれを使えば全ての理想をかなえてくれるのかについて、少し右往左往しました。

以下、その右往左往した記録です。

右往左往記録


最初は「~総合検索」を使った。
するとデータの中にCDやDVDも含まれていることが分かった。

なるほどねと、じゃあこっちだと「~書籍検索」を使った。
思惑通り、書籍だけの結果になった。

でも検索時に「こころ 夏目」みたいにすると出てこない問題が発覚。
検索結果が0件になってしまう。 「~書籍検索」APIのパラメーターを見ると、「書籍タイトル」と「著者名」は別々に検索できるようにそれぞれのパラメーターが設定されてあった。

これではうまくいかないと、「~総合検索」の方を見ると、こちらは[Keyword]という一つのパラメータで検索するようだ。
じゃあ「~総合検索」にして、ジャンルを書籍に絞る方式にしようと考えた。
ジャンル指定は[booksGenreId]というパラメータで指定可能だが、そのIdはどこにも書いていなかったので、仕方なく楽天ブックスジャンル検索APIを叩くと、本のIDは[001]だと判明した。

[booksGenreId]にそのIdを入れて検索すると、書籍だけの結果になったが、やっぱり複数キーワードの検索ができない。
APIの説明には半角スペースで区切ればおkと書いてある。

おそらくそのスペースがエンコード時に変な風になってるんだろうなと推測。
検索すると以下のサイトが見つかった。

【Java】URLエンコード出来ない文字と対応方法 | ジャイアントモリンキーのjavaテック


ここを参考にさせてもらい、なんとか複数キーワード検索ができるようになった。
ありがとうございました。

でも、これで終わらず、まだ検索結果がよろしくない気がする。
「~総合検索」APIのパラメータにある「検索フィールド」[field]というものが気になる。
これがデフォルトでは[1]の「~限定される」になっているので、[0]の「検索対象が広い」に変えてみる。

これが当たりで、ようやく思い通りの検索結果が出るようになった。


おわりに


という感じで右往左往しながらも楽天APIを使って書籍を検索する機能を作ることができました。
あとはバーコードから書籍を検索する機能も必要ですよね。 がんばります。