[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 を生成できるヘルパークラスを修正します。コンストラクタ引数にアソシエイトタグを追加しています。
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 バージョンを修正しています。
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. |
以上で、サンプルが動作するようになります。