どーも、ぐるたか@guru_takaです。
Amazon Product Advertising APIを使って新しいプロダクトの個人開発を始めました。新バージョン「PA-API 5.0」に対応しています。
色々と引っかかった箇所もあったので、備忘録としてまとめます。
MEMO
Amazon アソシエイトに登録済みを前提として、進めていきます。主な手順
STEP.1
認証キーの発行
STEP.2
ScratchpadでPA-API 5.0のテスト確認
STEP.3
公式が提供しているPA-API 5.0のSDKでサンプルを動かす
STEP.1:認証キーの発行
まずは認証キーを発行して、アクセスキーIDとシークレットキーをコピーしましょう。
STEP.2:ScratchpadでPA-API 5.0のテスト確認
次にScratchpadで発行した、アクセスキーIDとシークレットキーが使えるかどうか、確認します。
→Amazon Product Advertising API Scratchpad
以下のように入力して、「Run Request」をクリック。
こんな表示がされていればOKです!
注意
マーケットプレイスを日本に設定しないと、エラーが出るので注意です!STEP.3:公式が提供しているPA-API 5.0のSDKでサンプルを動かす
後は公式が用意しているSDKとサンプルを使って動かします。
→Using SDK
zipファイルを解答した後、必要なパッケージをインストールします。
~/paapi5-nodejs-sdk-example
$ npm i crypto-js superagent
その後、sampleSearchItemsApi.js
を編集します。
sampleSearchItemsApi.js
/**
* Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
// Run `npm install` locally before executing following code with `node sampleSearchItemsApi.js`
/**
* This sample code snippet is for ProductAdvertisingAPI 5.0's SearchItems API
* For more details, refer:
* https://webservices.amazon.com/paapi5/documentation/search-items.html
*/
var ProductAdvertisingAPIv1 = require('./src/index')
var defaultClient = ProductAdvertisingAPIv1.ApiClient.instance
// Specify your credentials here. These are used to create and sign the request.
defaultClient.accessKey = 'アクセスキー'
defaultClient.secretKey = 'シークレットキー'
/**
* PAAPI Host and Region to which you want to send request.
* For more details refer: https://webservices.amazon.com/paapi5/documentation/common-request-parameters.html#host-and-region
*/
// 日本のマーケットプレイスに設定
defaultClient.host = 'webservices.amazon.co.jp'
defaultClient.region = 'us-west-2'
var api = new ProductAdvertisingAPIv1.DefaultApi()
// Request Initialization
var searchItemsRequest = new ProductAdvertisingAPIv1.SearchItemsRequest()
/** Enter your partner tag (store/tracking id) and partner type */
searchItemsRequest['PartnerTag'] = '自分のアソシエイトID'
searchItemsRequest['PartnerType'] = 'Associates'
/** Specify Keywords */
searchItemsRequest['Keywords'] = 'Harry Potter'
/**
* Specify the category in which search request is to be made
* For more details, refer: https://webservices.amazon.com/paapi5/documentation/use-cases/organization-of-items-on-amazon/search-index.html
*/
searchItemsRequest['SearchIndex'] = 'Books'
/** Specify item count to be returned in search result */
searchItemsRequest['ItemCount'] = 2
/**
* Choose resources you want from SearchItemsResource enum
* For more details, refer: https://webservices.amazon.com/paapi5/documentation/search-items.html#resources-parameter
*/
searchItemsRequest['Resources'] = [
'Images.Primary.Medium',
'ItemInfo.Title',
'Offers.Listings.Price'
]
function onSuccess(data) {
console.log('API called successfully.')
var searchItemsResponse = ProductAdvertisingAPIv1.SearchItemsResponse.constructFromObject(
data
)
console.log(
'Complete Response: \n' + JSON.stringify(searchItemsResponse, null, 1)
)
if (searchItemsResponse['SearchResult'] !== undefined) {
console.log('Printing First Item Information in SearchResult:')
var item_0 = searchItemsResponse['SearchResult']['Items'][0]
if (item_0 !== undefined) {
if (item_0['ASIN'] !== undefined) {
console.log('ASIN: ' + item_0['ASIN'])
}
if (item_0['DetailPageURL'] !== undefined) {
console.log('DetailPageURL: ' + item_0['DetailPageURL'])
}
if (
item_0['ItemInfo'] !== undefined &&
item_0['ItemInfo']['Title'] !== undefined &&
item_0['ItemInfo']['Title']['DisplayValue'] !== undefined
) {
console.log('Title: ' + item_0['ItemInfo']['Title']['DisplayValue'])
}
if (
item_0['Offers'] !== undefined &&
item_0['Offers']['Listings'] !== undefined &&
item_0['Offers']['Listings'][0]['Price'] !== undefined &&
item_0['Offers']['Listings'][0]['Price']['DisplayAmount'] !== undefined
) {
console.log(
'Buying Price: ' +
item_0['Offers']['Listings'][0]['Price']['DisplayAmount']
)
}
}
}
if (searchItemsResponse['Errors'] !== undefined) {
console.log('Errors:')
console.log(
'Complete Error Response: ' +
JSON.stringify(searchItemsResponse['Errors'], null, 1)
)
console.log('Printing 1st Error:')
var error_0 = searchItemsResponse['Errors'][0]
console.log('Error Code: ' + error_0['Code'])
console.log('Error Message: ' + error_0['Message'])
}
}
function onError(error) {
console.log('Error calling PA-API 5.0!')
console.log('Printing Full Error Object:\n' + JSON.stringify(error, null, 1))
console.log('Status Code: ' + error['status'])
if (
error['response'] !== undefined &&
error['response']['text'] !== undefined
) {
console.log(
'Error Object: ' + JSON.stringify(error['response']['text'], null, 1)
)
}
}
api.searchItems(searchItemsRequest).then(
function(data) {
onSuccess(data)
},
function(error) {
onError(error)
}
)
後はPGを起動して、JOSNデータが返ってきたらOK!
〜/sampleSearchItemsApi.js
$ node sampleSearchItemsApi.js
コメントを残す