#author("2020-05-08T15:12:28+00:00","default:sagasite","sagasite")
#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]]

//===== ===== ===== ===== ===== ===== ===== ===== ===== =====
* リファレンス / チュートリアル [#m4f4d1d2]

//===== ===== ===== ===== ===== ===== ===== ===== ===== =====
* ライブラリー / フレームワーク [#hb96aeba]

//===== ===== ===== ===== ===== ===== ===== ===== ===== =====
* 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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS