ほんじゃらねっと

ダイエット中プログラマのブログ

GroovyでAmazonのProduct Advertising API経由で商品を検索する

AmazonAPIを使用してKindle書籍情報をブログ上に出せないかと 思い、まずは商品を検索するスクリプトを書いてみた。

まだGroovyに慣れていないということもあり、結構苦戦したけど ひとまず商品情報を検索・取得して画面上に表示することはできた。

今回は、公式サイトの下記URLからダウンロードできるサンプルコードに 含まれているSignedRequestsHelperを使って接続している。 Product Advertising API Signed Requests Sample Code - Java REST/QUERY

なので接続処理自体では何も苦労しておらず、 取得したデータから必要な情報を取り出すという、 慣れた言語を使っていればすぐにできそうなところで苦労した。

今回作成したスクリプトは、 特定の検索キーワードでKindle版に限定して書籍を検索し、 その情報を画面上に表示する処理を行っている。

amazon_item_search.groovy

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1')

import com.amazon.advertising.api.sample.SignedRequestsHelper
import groovyx.net.http.HTTPBuilder

def AWS_ACCESS_KEY_ID = '<アクセスキー>'
def AWS_SECRET_KEY = '<シークレットキー>'
def ENDPOINT = 'ecs.amazonaws.jp' 

def helper = SignedRequestsHelper.getInstance(ENDPOINT, AWS_ACCESS_KEY_ID, AWS_SECRET_KEY)

def params = [
    'AssociateTag': '<アソシエイトタグ>',
    'Service': 'AWSECommerceService',
    'Version': '2009-03-31',
    'Operation': 'ItemSearch',
    'ResponseGroup': 'Large',
    'SearchIndex': 'Books',
    'Keywords': '<検索キーワード>',
    'Power': 'binding:kindle'
]
    
def requestUrl = helper.sign(params)
def resp = new URL(requestUrl).text
def result = new XmlSlurper().parseText(resp)

def items = result.Items.Item
println 'item counts: ${items.size()}'
println ''
    
items.each { item ->
    println 'ASIN: ${item.ASIN.text()}'
    println 'ItemAttributes: '
    item.ItemAttributes.children().each {
        println '${it.name()}: ${it.text()}'
    }
    println 'OfferSummary: '
    item.OfferSummary.children().each {
        println '${it.name()}: ${it.text()}'
    }
    println 'BrowseNodes: '
    item.BrowseNodes.children().each {
        println '${it.name()}: ${it.text()}'
    }
    println ''
}

渡すべきパラメータや取得できる情報については下記公式ドキュメントを参照した。 Product Advertising API

プログラミングGROOVY

プログラミングGROOVY