#author("2020-05-09T03:18:28+00:00","default:sagasite","sagasite")
[[ビジネス>Business]] > [[アフィリエイト]] > [[Amazonアソシエイト]] > Amazon API
#contents
//===== ===== ===== ===== ===== ===== ===== ===== ===== =====
* Amazon APIとは? [#x5f48524]
[[Amazonアソシエイト]]の機能を外部から利用するための[[API]]のことです。
正式には「Amazon Product Advertising API」と言います。
** 公式サイト [#wcd14b92]
-[[アソシエイト・セントラル - Product Advertising API>https://affiliate.amazon.co.jp/assoc_credentials/home]]
//===== ===== ===== ===== ===== ===== ===== ===== ===== =====
* Tips [#d1ea122c]
** Amazon APIの更新 [#o691eace]
Amazon APIがバージョンアップして、最新のバージョンは5になった。
古いバージョン4はもう使えないので入れ替えが必要です。(面倒くせ~!)
-PA-API v5 PHP - Google 検索 https://www.google.com/search?q=PA-API+v5+PHP
-移行ガイド アソシエイト・セントラル https://affiliate.amazon.co.jp/help/node/topic/GZH32YX29UH5GACM
-What's New in PA-API 5.0 · Product Advertising API 5.0 https://webservices.amazon.com/paapi5/documentation/migration-guide/whats-new-in-paapi5.html
-4.0から大きく変わった「PA-API v5.0(Amazon API)」の使い方! | HPcode https://haniwaman.com/pa-api-5/
** ASINから商品データを取得する方法 [#i61d139d]
これらのデータを取得するにはどうしたら良いのだろうか?
+ 商品名
+ 商品画像
+ 本の著者名
+ 本の出版社名
+ 発売日
+ 価格
(参考)
- 4.0から大きく変わった「PA-API v5.0(Amazon API)」の使い方! | HPcode https://haniwaman.com/pa-api-5/#i-5
- GetItems · Product Advertising API 5.0 https://webservices.amazon.com/paapi5/documentation/get-items.html#ItemLookup-exam
>Examples
The following is the sample json payload for GetItems request.
{
"ItemIds": ["B0199980K4","B000HZD168","B01180YUXS","B00BKQTA4A"],
"ItemIdType": "ASIN",
"LanguagesOfPreference": ["en_US"],
"Marketplace": "www.amazon.com",
"PartnerTag": "xyz-20",
"PartnerType": "Associates",
"Resources": ["Images.Primary.Small","ItemInfo.Title","ItemInfo.Features","Offers.Summaries.HighestPrice","ParentASIN"]
}
この例では、欲しいデータの内容をJSON形式で指定する方法になっている。
PHPのSDKのサンプルコードでは、PHPの配列の形式で指定する方法になっている。
JSONではなく、PHPの配列で指定するにはどうすればいいのか?さらに追跡調査。
*** SampleGetItemsApi.php [#nae9e8ed]
function getItems()の中で、
# Request initialization
# Choose item id(s)
$itemIds = ["059035342X", "B00X4WHP55", "1401263119"];
/*
* Choose resources you want from GetItemsResource enum
* For more details, refer: https://webservices.amazon.com/paapi5/documentation/get-items.html#resources-parameter
*/
$resources = [
GetItemsResource::ITEM_INFOTITLE,
GetItemsResource::OFFERSLISTINGSPRICE];
# Forming the request
$getItemsRequest = new GetItemsRequest();
$getItemsRequest->setItemIds($itemIds);
$getItemsRequest->setPartnerTag($partnerTag);
$getItemsRequest->setPartnerType(PartnerType::ASSOCIATES);
$getItemsRequest->setResources($resources);
という部分がある。
この$resourcesを編集すればOKだ。
「ITEM_INFOTITLE」などの定数が定義されている箇所にジャンプして見てみる。
SDKの中にある「GetItemsResource.php」を見る。
(src\com\amazon\paapi5\v1\GetItemsResource.php)
この中で定数が定義されていた。
/**
* Possible values of this enum
*/
const BROWSE_NODE_INFOBROWSE_NODES = 'BrowseNodeInfo.BrowseNodes';
const BROWSE_NODE_INFOBROWSE_NODESANCESTOR = 'BrowseNodeInfo.BrowseNodes.Ancestor';
const BROWSE_NODE_INFOBROWSE_NODESSALES_RANK = 'BrowseNodeInfo.BrowseNodes.SalesRank';
const BROWSE_NODE_INFOWEBSITE_SALES_RANK = 'BrowseNodeInfo.WebsiteSalesRank';
const CUSTOMER_REVIEWSCOUNT = 'CustomerReviews.Count';
const CUSTOMER_REVIEWSSTAR_RATING = 'CustomerReviews.StarRating';
const IMAGESPRIMARYSMALL = 'Images.Primary.Small';
const IMAGESPRIMARYMEDIUM = 'Images.Primary.Medium';
const IMAGESPRIMARYLARGE = 'Images.Primary.Large';
const IMAGESVARIANTSSMALL = 'Images.Variants.Small';
const IMAGESVARIANTSMEDIUM = 'Images.Variants.Medium';
const IMAGESVARIANTSLARGE = 'Images.Variants.Large';
const ITEM_INFOBY_LINE_INFO = 'ItemInfo.ByLineInfo';
const ITEM_INFOCONTENT_INFO = 'ItemInfo.ContentInfo';
const ITEM_INFOCONTENT_RATING = 'ItemInfo.ContentRating';
const ITEM_INFOCLASSIFICATIONS = 'ItemInfo.Classifications';
const ITEM_INFOEXTERNAL_IDS = 'ItemInfo.ExternalIds';
const ITEM_INFOFEATURES = 'ItemInfo.Features';
const ITEM_INFOMANUFACTURE_INFO = 'ItemInfo.ManufactureInfo';
const ITEM_INFOPRODUCT_INFO = 'ItemInfo.ProductInfo';
const ITEM_INFOTECHNICAL_INFO = 'ItemInfo.TechnicalInfo';
const ITEM_INFOTITLE = 'ItemInfo.Title';
const ITEM_INFOTRADE_IN_INFO = 'ItemInfo.TradeInInfo';
const OFFERSLISTINGSAVAILABILITYMAX_ORDER_QUANTITY = 'Offers.Listings.Availability.MaxOrderQuantity';
const OFFERSLISTINGSAVAILABILITYMESSAGE = 'Offers.Listings.Availability.Message';
const OFFERSLISTINGSAVAILABILITYMIN_ORDER_QUANTITY = 'Offers.Listings.Availability.MinOrderQuantity';
const OFFERSLISTINGSAVAILABILITYTYPE = 'Offers.Listings.Availability.Type';
const OFFERSLISTINGSCONDITION = 'Offers.Listings.Condition';
const OFFERSLISTINGSCONDITIONSUB_CONDITION = 'Offers.Listings.Condition.SubCondition';
const OFFERSLISTINGSDELIVERY_INFOIS_AMAZON_FULFILLED = 'Offers.Listings.DeliveryInfo.IsAmazonFulfilled';
const OFFERSLISTINGSDELIVERY_INFOIS_FREE_SHIPPING_ELIGIBLE = 'Offers.Listings.DeliveryInfo.IsFreeShippingEligible';
const OFFERSLISTINGSDELIVERY_INFOIS_PRIME_ELIGIBLE = 'Offers.Listings.DeliveryInfo.IsPrimeEligible';
const OFFERSLISTINGSDELIVERY_INFOSHIPPING_CHARGES = 'Offers.Listings.DeliveryInfo.ShippingCharges';
const OFFERSLISTINGSIS_BUY_BOX_WINNER = 'Offers.Listings.IsBuyBoxWinner';
const OFFERSLISTINGSLOYALTY_POINTSPOINTS = 'Offers.Listings.LoyaltyPoints.Points';
const OFFERSLISTINGSMERCHANT_INFO = 'Offers.Listings.MerchantInfo';
const OFFERSLISTINGSPRICE = 'Offers.Listings.Price';
const OFFERSLISTINGSPROGRAM_ELIGIBILITYIS_PRIME_EXCLUSIVE = 'Offers.Listings.ProgramEligibility.IsPrimeExclusive';
const OFFERSLISTINGSPROGRAM_ELIGIBILITYIS_PRIME_PANTRY = 'Offers.Listings.ProgramEligibility.IsPrimePantry';
const OFFERSLISTINGSPROMOTIONS = 'Offers.Listings.Promotions';
const OFFERSLISTINGSSAVING_BASIS = 'Offers.Listings.SavingBasis';
const OFFERSSUMMARIESHIGHEST_PRICE = 'Offers.Summaries.HighestPrice';
const OFFERSSUMMARIESLOWEST_PRICE = 'Offers.Summaries.LowestPrice';
const OFFERSSUMMARIESOFFER_COUNT = 'Offers.Summaries.OfferCount';
const PARENT_ASIN = 'ParentASIN';
const RENTAL_OFFERSLISTINGSAVAILABILITYMAX_ORDER_QUANTITY = 'RentalOffers.Listings.Availability.MaxOrderQuantity';
const RENTAL_OFFERSLISTINGSAVAILABILITYMESSAGE = 'RentalOffers.Listings.Availability.Message';
const RENTAL_OFFERSLISTINGSAVAILABILITYMIN_ORDER_QUANTITY = 'RentalOffers.Listings.Availability.MinOrderQuantity';
const RENTAL_OFFERSLISTINGSAVAILABILITYTYPE = 'RentalOffers.Listings.Availability.Type';
const RENTAL_OFFERSLISTINGSBASE_PRICE = 'RentalOffers.Listings.BasePrice';
const RENTAL_OFFERSLISTINGSCONDITION = 'RentalOffers.Listings.Condition';
const RENTAL_OFFERSLISTINGSCONDITIONSUB_CONDITION = 'RentalOffers.Listings.Condition.SubCondition';
const RENTAL_OFFERSLISTINGSDELIVERY_INFOIS_AMAZON_FULFILLED = 'RentalOffers.Listings.DeliveryInfo.IsAmazonFulfilled';
const RENTAL_OFFERSLISTINGSDELIVERY_INFOIS_FREE_SHIPPING_ELIGIBLE = 'RentalOffers.Listings.DeliveryInfo.IsFreeShippingEligible';
const RENTAL_OFFERSLISTINGSDELIVERY_INFOIS_PRIME_ELIGIBLE = 'RentalOffers.Listings.DeliveryInfo.IsPrimeEligible';
const RENTAL_OFFERSLISTINGSDELIVERY_INFOSHIPPING_CHARGES = 'RentalOffers.Listings.DeliveryInfo.ShippingCharges';
const RENTAL_OFFERSLISTINGSMERCHANT_INFO = 'RentalOffers.Listings.MerchantInfo';
この定義の右辺の部分(BrowseNodeInfo.BrowseNodesなど)が、ちょうどAPIリファレンスの「Resources Parameter」と一致しているようだ。
(参考)GetItems · Product Advertising API 5.0 https://webservices.amazon.com/paapi5/documentation/get-items.html#resources-parameter
以上から、
| 欲しいデータ | 対応するResources Parameter | SDKのPHPサンプルコード中の定数 |h
| 商品名 | ItemInfo.Title | ITEM_INFOTITLE |
| 商品画像(小)"Height": 75 | Images.Primary.Small | IMAGESPRIMARYSMALL |
| 商品画像(中)"Height": 160 | Images.Primary.Medium | IMAGESPRIMARYMEDIUM |
| 商品画像(大)"Height": 500 | Images.Primary.Large | IMAGESPRIMARYLARGE |
| 本の著者名 | ItemInfo.ByLineInfo | ITEM_INFOBY_LINE_INFO|
| 本の出版社名 | ItemInfo.ByLineInfo | ITEM_INFOBY_LINE_INFO|
| 発売日 | ItemInfo.ContentInfo | ITEM_INFOCONTENT_INFO |
| 価格 | Offers.Listings.Price | OFFERSLISTINGSPRICE |
という項目をセットしてリスエストすれば、欲しいデータが得られます。
PHPの配列で指定すると、以下のようになりました。
$resources = [
GetItemsResource::ITEM_INFOTITLE,
GetItemsResource::IMAGESPRIMARYSMALL ,
GetItemsResource::IMAGESPRIMARYMEDIUM ,
GetItemsResource::IMAGESPRIMARYLARGE ,
GetItemsResource::ITEM_INFOBY_LINE_INFO ,
GetItemsResource::ITEM_INFOCONTENT_INFO ,
GetItemsResource::OFFERSLISTINGSPRICE ,
];
これで、試しにASIN「4863542224」の本のデータを取得してみます。
-基礎からわかる Elm | 鳥居 陽介 |本 | 通販 | Amazon https://www.amazon.co.jp/dp/4863542224
返ってきたレスポンスのJSONは、以下のようになっていました。
#code(json){{{
API called successfully Complete Response: {
"ItemsResult": {
"Items": [
{
"ASIN": "4863542224",
"DetailPageURL": "https:\/\/www.amazon.co.jp\/dp\/4863542224?tag=vertex9-22&linkCode=ogi&th=1&psc=1",
"Images": {
"Primary": {
"Small": {
"URL": "https:\/\/m.media-amazon.com\/images\/I\/51G32HC7rSL._SL75_.jpg",
"Height": 75,
"Width": 53
},
"Medium": {
"URL": "https:\/\/m.media-amazon.com\/images\/I\/51G32HC7rSL._SL160_.jpg",
"Height": 160,
"Width": 113
},
"Large": {
"URL": "https:\/\/m.media-amazon.com\/images\/I\/51G32HC7rSL.jpg",
"Height": 500,
"Width": 352
}
}
},
"ItemInfo": {
"ByLineInfo": {
"Contributors": [
{
"Locale": "ja_JP",
"Name": "\u9ce5\u5c45 \u967d\u4ecb",
"Role": "\u8457",
"RoleType": "author"
}
],
"Manufacturer": {
"DisplayValue": "\u30b7\u30fc\u30a2\u30f3\u30c9\u30a2\u30fc\u30eb\u7814\u7a76\u6240",
"Label": "Manufacturer",
"Locale": "ja_JP"
}
},
"ContentInfo": {
"Languages": {
"DisplayValues": [
{
"DisplayValue": "\u65e5\u672c\u8a9e",
"Type": "\u767a\u884c\u6e08\u307f"
}
],
"Label": "Language",
"Locale": "ja_JP"
},
"PagesCount": {
"DisplayValue": 224,
"Label": "NumberOfPages",
"Locale": "en_US"
},
"PublicationDate": {
"DisplayValue": "2019-02-27T00:00:01Z",
"Label": "PublicationDate",
"Locale": "en_US"
}
},
"Title": {
"DisplayValue": "\u57fa\u790e\u304b\u3089\u308f\u304b\u308b Elm",
"Label": "Title",
"Locale": "ja_JP"
}
},
"Offers": {
"Listings": [
{
"Id": "%259DZs7G3(中略)%F0I8f6Xmq",
"Price": {
"Amount": 2893,
"Currency": "JPY",
"DisplayAmount": "\uffe52,893"
},
"ViolatesMAP": false
}
]
}
}
]
}
} Printing all item information in ItemsResult: Printing information about the itemId: 4863542224 ASIN: 4863542224 Title: 基礎からわかる Elm Detail Page URL: https: //www.amazon.co.jp/dp/4863542224?tag=vertex9-22&linkCode=ogi&th=1&psc=1 Buying price: ¥2,893
}}}
次の工程では、JSONをパースして必要な項目のデータを取り出せばOKですね!
//===== ===== ===== ===== ===== ===== ===== ===== ===== =====
* 参考書 [#xeaefee4]
#html{{
<!--
<td> </td>
<hr>
-->
}}
//----------------------------------------
~
~
~
//----------------------------------------
// create 2020/05/05