ISBNから書籍の情報を取りたかったので、Amazon Product Advertising APIを使ってみました。
必要な情報
Amazon Product Advertising API を使うためには、下記の情報が必要になります。
- アソシエイトタグ
- アクセスキー
- シークレットキー
アソシエイトのアカウントが必要で、取得方法は下記などが参考になります。
実装方法
より簡単にということで、makingさんの下記ライブラリを利用し、Javaで書いてみました。
mavenリポジトリで公開されているので、利用も簡単です。
build.gradleで下記のように依存関係を追加します。
apply plugin: 'java' repositories { jcenter() } dependencies { compile 'org.slf4j:slf4j-api:1.7.21' compile 'ch.qos.logback:logback-classic:1.1.7' compile group: 'am.ik.aws', name: 'aws-apa', version: '0.9.5' }
Amazon Product Advertising API へ接続するための情報は、aws-config.properties
に記載し、クラスパスに配置します。
aws.endpoint=https://ecs.amazonaws.jp aws.accesskey.id=<Your Accesskey ID for AWS> aws.secret.accesskey=<Your Secret Accesskey for AWS> aws.associate.tag=<Associate Tag>
ISBNを指定して情報を取得する場合は下記のように書きます。 (ISBNの場合には、SearchIndexを指定する必要があります)
public class BookLookupClient { public Optional<Item> lookup(String isbn) { ItemLookupRequest request = new ItemLookupRequest(); request.setSearchIndex("Books"); request.getResponseGroup().add("Large"); request.setIdType("ISBN"); request.getItemId().add(isbn); AwsApaRequester requester = new AwsApaRequesterImpl(); ItemLookupResponse response = requester.itemLookup(request); if (response.getItems().isEmpty()) { return Optional.empty(); } return response.getItems().get(0).getItem().stream().findFirst(); } }
public class BookLookupClientTest { @Test public void testLookup() { BookLookupClient client = new BookLookupClient(); Optional<Item> item = client.lookup("489471499X"); assertTrue(item.isPresent()); ItemAttributes itemAttributes = item.get().getItemAttributes(); assertEquals("489471499X", itemAttributes.getISBN()); assertEquals("Effective Java 第2版 (The Java Series)", itemAttributes.getTitle()); assertEquals("ピアソンエデュケーション", itemAttributes.getPublisher()); } }
リクエストで設定すべき内容と、レスポンスの内容は、下記を参考にしました。
取りたい情報を辿るのがちょっと面倒でしたが、試すのはすごく簡単でした。