ユーザ用ツール

サイト用ツール


development:language:net:csharp:aws

AWS

Amazon アソシエイト Web サービス1)

書籍情報を取得する場合などによく利用されていますが、2009年8月15日以降は電子署名の認証が必要になりました。

perlなどによるsampleはよく落ちていますが、c#はあまり見つからないここに載せておきます。

生URLの生成

http://ecs.amazonaws.co.jp/onca/xml?Service=AWSECommerceService
&Version=2011-08-01
&Operation=ItemLookup
&SearchIndex=Books
&IdType=ISBN
&ItemId=1234567890123
&AssociateTag=member-22
&ResponseGroup=Medium

古いsampleでは省略されている場合が多いですが、AssociateTagは必須です。

パラメータ部分を切り出す

Service=AWSECommerceService
Version=2011-08-01
Operation=ItemLookup
SearchIndex=Books
IdType=ISBN
ItemId=1234567890123
AssociateTag=member-22
ResponseGroup=Medium
Timestamp=2011-09-03T06:37:08.000Z
AWSAccessKeyId=AABBCCDDEEFFGGHH9900

TimestampとAWSAccessKeyIdも追加します

パラメータ部分をソート

AWSAccessKeyId=AABBCCDDEEFFGGHH9900
AssociateTag=member-22
IdType=ISBN
ItemId=1234567890123
Operation=ItemLookup
ResponseGroup=Medium
SearchIndex=Books
Service=AWSECommerceService
Timestamp=2011-09-03T06:37:08.000Z
Version=2011-08-01

ソートするばあい、AWSAccessKeyIdは例外で最初に置きます

署名用文字列を生成

GET
ecs.amazon.co.jp
/onca/xml
AWSAccessKeyId=AABBCCDDEEFFGGHH9900&AssociateTag=member-22&IdType=ISBN&ItemId=1234567890123&Operation=ItemLookup&ResponseGroup=Medium&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2011-09-03T06%3A37%3A08.000Z&Version=2011-08-01

生成時に、KeyとValueはRfc3986エスケープを行います

AmazonにあるSampleだと「+」をそのままにしていますが、これもエスケープします

署名を生成

署名用文字列を認証用Key2)でSHA256_HMACを生成。

それをBASE64でエンコードしてRfc3986エスケープを行います。

D/u/VXzAusQ4AlIxSeqQlVtJ0kOwvyZiv7IIL4e6kVw=
    ↓
D%2Fu%2FVXzAusQ4AlIxSeqQlVtJ0kOwvyZiv7IIL4e6kVw%3D

こんなのが生成されるはず

署名付きURLを生成

http://ecs.amazonaws.co.jp/onca/xml?AWSAccessKeyId=AABBCCDDEEFFGGHH9900&AssociateTag=member-22&IdType=ISBN&ItemId=1234567890123&Operation=ItemLookup&ResponseGroup=Medium&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2011-09-03T06%3A37%3A08.000Z&Version=2011-08-01&Signature=D%2Fu%2FVXzAusQ4AlIxSeqQlVtJ0kOwvyZiv7IIL4e6kVw%3D

全部つなぎ合わせて完成です。

データの取得

こんな感じで取得できます。3)

<ItemAttributes>
  <Author>ボブ バーガー</Author>
  <Binding>文庫</Binding>
  <Creator Role="原著">Bob Berger</Creator>
  <Creator Role="翻訳">笹野 洋子</Creator>
  <EAN>9784062638029</EAN><
  <ISBN>4062638029</ISBN>
  <Manufacturer>講談社</Manufacturer>
  <PublicationDate>1998-06</PublicationDate>
  <Publisher>講談社</Publisher>
  <Title>リスクを追いかけろ (講談社文庫)</Title>
</ItemAttributes>

エラー

昨日、いきなりエラーをはき出した。

リモートサーバーエラー(400)不適切な要求です

いろいろ調べたあげく………
時計が狂ってた。orz

1)
Amazon アソシエイトの Web サービス (AWS) の名称は現在 Amazon Product Advertising API です。
2)
AmazonでAWSAccessKeyIdと一緒に交付されているはずです
3)
実際にはもっと大量のデータですが、大幅に略しています
development/language/net/csharp/aws.txt · 最終更新: 2017/04/14 05:21 by 127.0.0.1