[C#] Amazon Product Advertising API の利用(REST サンプルコードの修正)
C# で Amazon Product Advertising API の利用方法です。この API は商品情報とアフィリエイト(アソシエイト)用の URL が取得できます。Amazon の開発者向けサイトからダウンロードできるサンプルコードが古いので修正します。
アソシエイトタグ、Access Key ID と Secret Access Key の取得
最初に API 呼び出しに必要なキーの取得概要だけ紹介します。
Amazon アソシエイト のアカウントの作成し、***-22 という形式のアソシエイトタグ(トラッキング ID)を取得します。
さらに、アソシエイトのホームの「Product Advertising API」タブから Amazon Web Services アカウントを作成します。
最終的に、Amazon Web Services の IAM Management Console Your Security Credentials から、Access Key ID と Secret Access Key を作成・取得します。現在も作成した AWS のアカウントからキーを作成できますが、管理者ではなく IMA(Identity and Access Management) ユーザーを作りユーザーに対しキーを発行する方法が推奨されているようです。
サンプルコードの修正
Product Advertising API Signed Requests Sample Code – C# REST/QUERY : Sample Code & Libraries : Amazon Web Services という C# のサンプルが用意されているのですが、API バージョンが古いので修正します。
現在の API バージョン 2011-08-01 は、アソシエイトタグが API 呼び出しに必須です。
修正後のコードは、jz5/AmazonProductAdvtApiSample-2013 に置いてます。
SignedRequestHelper.cs
API 呼び出しの URL を生成できるヘルパークラスを修正します。コンストラクタ引数にアソシエイトタグを追加しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff –git a/Sample/src/SignedRequestHelper.cs b/Sample/src/SignedRequestHelper.cs | |
index 050e946..dec1058 100644 | |
— a/Sample/src/SignedRequestHelper.cs | |
+++ b/Sample/src/SignedRequestHelper.cs | |
@@ -31,6 +31,7 @@ namespace AmazonProductAdvtApi | |
{ | |
private string endPoint; | |
private string akid; | |
+ private string associateTag; | |
private byte[] secret; | |
private HMAC signer; | |
@@ -49,11 +50,12 @@ namespace AmazonProductAdvtApi | |
* FR: ecs.amazonaws.fr | |
* CA: ecs.amazonaws.ca | |
*/ | |
– public SignedRequestHelper(string awsAccessKeyId, string awsSecretKey, string destination) | |
+ public SignedRequestHelper(string awsAccessKeyId, string awsSecretKey, string destination, string associateTag) | |
{ | |
this.endPoint = destination.ToLower(); | |
this.akid = awsAccessKeyId; | |
this.secret = Encoding.UTF8.GetBytes(awsSecretKey); | |
+ this.associateTag = associateTag; | |
this.signer = new HMACSHA256(this.secret); | |
} | |
@@ -73,6 +75,7 @@ namespace AmazonProductAdvtApi | |
// Add the AWSAccessKeyId and Timestamp to the requests. | |
sortedMap["AWSAccessKeyId"] = this.akid; | |
sortedMap["Timestamp"] = this.GetTimestamp(); | |
+ sortedMap["AssociateTag"] = this.associateTag; | |
// Get the canonical query string | |
string canonicalQS = this.ConstructCanonicalQueryString(sortedMap); |
ItemLookupSample.cs
ヘルパークラス呼び出しのサンプルの修正です。アソシエイトタグの追加と、XML 名前空間の API バージョンを修正しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff –git a/Sample/src/ItemLookupSample.cs b/Sample/src/ItemLookupSample.cs | |
index 9d8212b..b36fdc8 100644 | |
— a/Sample/src/ItemLookupSample.cs | |
+++ b/Sample/src/ItemLookupSample.cs | |
@@ -32,15 +32,16 @@ namespace AmazonProductAdvtApi | |
class ItemLookupSample | |
{ | |
private const string MY_AWS_ACCESS_KEY_ID = "YOUR_AWS_ACCESS_KEY_ID"; | |
– private const string MY_AWS_SECRET_KEY = "YOUR_AWS_SECRET_KEY"; | |
+ private const string MY_AWS_SECRET_KEY = "YOUR_AWS_SECRET_KEY"; | |
private const string DESTINATION = "ecs.amazonaws.com"; | |
– | |
– private const string NAMESPACE = "http://webservices.amazon.com/AWSECommerceService/2009-03-31"; | |
+ private const string ASSOCIATE_TAG = "YOUR_ASSOCIATE_TAG"; | |
+ | |
+ private const string NAMESPACE = "http://webservices.amazon.com/AWSECommerceService/2011-08-01"; | |
private const string ITEM_ID = "0545010225"; | |
public static void Main() | |
{ | |
– SignedRequestHelper helper = new SignedRequestHelper(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY, DESTINATION); | |
+ SignedRequestHelper helper = new SignedRequestHelper(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY, DESTINATION, ASSOCIATE_TAG); | |
/* | |
* The helper supports two forms of requests – dictionary form and query string form. |
以上で、サンプルが動作するようになります。