Amazon Product Advertising APIを使ってISBNから書籍情報を取得する

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());
    }
}

リクエストで設定すべき内容と、レスポンスの内容は、下記を参考にしました。

取りたい情報を辿るのがちょっと面倒でしたが、試すのはすごく簡単でした。