Hattori機械学習系の研究職&エンジニア。ICT技術のWebAPIマーケットプレイスApitoreをやってます。APIを使うための諸準備と簡単な動作確認をしました。今回はSpringのRestTempateを使ってJavaからAPIを呼び出し、公式のxsdファイルから作ったItemSearchResponseクラスで受け取ります。手順1つずつ説明していきます。Key)は前回の記事を参照してください。APIを受け取るクラスを作ります。自動生成したプログラムについてはGithubに公開しました。APIに関わるJavaクラスを自動生成します。xsdファイルをダウンロードして、以下のコマンドを実行してください。「xjc」はJDK1.8以上をインストールしていれば標準で入っているはずです。「AWSECommerceService.xsd」はxsdファイルの名前です。AWSECommerceService.xsdここで注意事項ですが、日本語のWindows環境で上記を実行すると、自動生成されたプログラムのコメントが日本語になります。・・・が、SJISエンコードなのでUTF8環境では日本語が文字化けします。SJIS日本語コメントはいらぬバグの温床になるので、Linux環境で上記を実行することをおすすめします。APIではプログラムを利用する上で問題は起こりませんでした。API関連のJavaクラスが整いました。これに公式で用意している「SignedRequestHelper」を組み合わせればAPIのやりとりが簡単にできます。一応、SignedRequestHelperも上記のGithubで公開しています。Javaから呼び出す、受け取るSpring-webのRestTemplateを使ってスマートにAPIのやり取りをします。こちらもGithubで実装を公開しています。以下では要所要所を解説します。SignedRequestHelperを初期化します。APIのエンドポイントで、Amazon.co.jpの場合は「webservices.amazon.co.jp」とします。Key」をそれぞれ入力します。secretkey);APIのパラメーターをMapクラスで持ちます。Tag」を入力します。sort);「SearchIndex」はいわゆるジャンルになります。必須パラメーターです。指定できるパラメータはこちらにあります。全体の場合は「All」、DVDやBlu-rayの場合は「DVD」を指定します。「Keywords」は検索キーワードです。「スーパーナチュラル」と入力します。「ResponseGroup」はAPIのレスポンスに指定する内容です。指定できる内容はこちらにあります。コンマ区切りで複数指定できます。「Images,ItemAttributes,Offers」を指定しておけばOKでしょう。「ItemPage」はページ指定番号です。APIは一回のリクエストで10件取得(固定)です。11件目移行は、例えば「ItemPage」に「2」を指定します。「SearchIndex=All」の場合は1~5まで、それ以外の場合は1~10まで指定できます。「Sort」はソート方法です。指定できるパラメータはこちらにあります。「SearchIndex=All」の場合は指定できませんし、指定するとそもそもエラーが返ってきます。それ以外の場合はSearchIndex次第なのですが、基本的に「price」「-price」「salesrank」「keyword」はどれにもあります。それぞれ「価格の安い順」「価格の高い順」「売れてる順」「キーワード一致順」です。他にも指定できるパラメータがありますが、基本的には上のものだけである程度のことはできると思います。次にリクエストURLを生成します。SignedRequestHelperが自動的に暗号化してくれます。url.toURI();上記URIを呼び出して、xsdファイルから自動生成したItemSearchResponseクラスで受け取ります。APIは世界中から高頻度で呼ばれているせいか、基本的に503エラーが返ってきます。503エラーは「アクセスしすぎ」というエラーですが、公式にはRateLimitは1秒1回です。1秒1回以下のリクエストでも503エラーが頻発するので、503エラーが返ってきた時は少しディレイを与えることで確実にレスポンスが返ってくるように工夫します。APIを使いやすくなります。APIのレスポンスから商品名と価格を取得するには以下のようにします。APIにはJavaのSDKはありませんが、公式のxsdファイルとSpringのRestTemplateを組み合わせることで非常に使いやすい状態に持っていくことができました。ソースコードも公開しているので参考にしてください。Hattoriについて機械学習系の研究職&エンジニア。ICT技術のWebAPIマーケットプレイスApitoreをやってます。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。Themeisle.。