ぱんぶろ

パンジーの「いいね!」ブログ

「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ③-リクエストURL作成の概要-

      2016/03/30  

amazon_api_22

前回までで、

  • アソシエイトタグ
  • アクセスキー
  • シークレットキー

を取得することができました。

第1回:アソシエイトタグの取得
第2回:アクセスキーとシークレットキーの取得

この3つの値があれば、Amazonへリクエストを送り、
結果を受け取ることができるようになります。

ただ、ここが結構面倒なんですよね。
今回は、まずは概要だけを紹介していきます。

スポンサード リンク

Amazonへ送るリクエストって?

Amazon APIを利用したプログラムの仕組みはシンプルで、

「○○の情報の結果が欲しい」とAmazonにお願いすると、
AmazonからXML形式で結果を返してくれるといったものです。

雑な図ですが、イメージとしてはこんな感じです。
amazon_api_21

リクエストは、GET形式のURLで色々なパラメーターを付けて送ります。

例えば、以下のような感じです。(Amazonのサンプル)

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes,Offers,Images,Reviews&Version=2009-01-06

  • サービス名とか、
  • アクセスキーとか、
  • 検索の方法とか、
  • どうな情報を取得するかとか、
  • APIのバージョンとか、

色々あります。
(今回はこの辺の詳細は説明しませんが。)

とりあえず、Amazonへリクエストを送るには、
こういった何かしらのURLを作る必要があると覚えておいてください。

リクエストURL作成の概要

なんとなくでいいですが、
Amazonへリクエストを送るには、
URLを作らないといけないことが分かったかと思います。

AmazonはそのURLの作り方がかなり複雑なんですよね。
かなり面倒いです。

なので、今回はその概要だけ説明します。
(実際のプログラミングについては、次回説明しますので、
概要が必要でない方は飛ばしていただいてもかまいません。)

以下の手順をプログラムで行うって思っておいてください。

0.元となるリクエスト

リクエストは、上で例にも挙げたように、
何かしらのURLがあって、
「?」でつなぎ、パラメーターが続くといった形です。

[URL]?[パラメーター1]=値&[パラメーター2]=値&[パラメーター3]=値・・・(いくつでも)

のような感じです。
パラメーターは「&」でつなぎます。

今回は、上にも挙げたのと同じ

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes,Offers,Images,Reviews&Version=2009-01-06

このリクエストをもとにしていきます。
Amazonから結果を返してもらうには、こいつを変形していかなくてはいけないんですね。

以下からがAmazon公式に載っている手順です。

1.タイムスタンプを付ける

パラメーターとしてタイムスタンプを追加します。
UTC(協定世界時)で、形式は「2014-09-09T12:35:00Z」

のような形です。

【変更後】

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes,Offers,Images,Reviews&Version=2009-01-06&Timestamp=2009-01-01T12:00:00Z

2.「RFC 3986」形式でパラメーターの値をエンコーディング

わたしなんかは、この辺で「なんのこっちゃ」って感じでした。
なんか日本語や一部の記号を16進数にしてくれてるみたいですね。
アルファベットはそのままです。

「RFC 3986」を知らなくても、PHPにはちゃんと関数が用意されているので、変換することは可能です!
(ビバ!PHP)

【変更後】

http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Operation=ItemLookup&ItemId=0679722769&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Version=2009-01-06&Timestamp=2009-01-01T12%3A00%3A00Z

3.「&」とか消して改行

「http」から「?」までを消して、

「&」のところで、改行していきます。(「&」も消しますよ。)

【変更後】

Service=AWSECommerceService
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE
Operation=ItemLookup
ItemId=0679722769
ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews
Version=2009-01-06
Timestamp=2009-01-01T12%3A00%3A00Z

4.パラメーター名で昇順ソート

パラメーターでソートします。
昇順なので、Aから順番ですね。

【変更後】

AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE
ItemId=0679722769
Operation=ItemLookup
ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews
Service=AWSECommerceService
Timestamp=2009-01-01T12%3A00%3A00Z
Version=2009-01-06

5.もう一度「&」でつなぐ

ソートした後、また「&」でつないでいきます。

【変更後】

AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06

6.3行を頭に追加

GET
webservices.amazon.com
/onca/xml

の3行を頭に追加します。
下はそのままです。

【変更後】

GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06

7.よく分からんエンコーディング

シークレットキーを使って「HMAC-SHA256」でハッシュ値を算出するみたいです。
(日本語が正しいかも怪しい・・・。)

この辺もPHPの関数があるので、理解してなくても作ることはできます。
理解しといた方がいいとは思いますが、わたしは分かってません!

【変更後】

M%2Fy0%2BEAFFGaUAp4bWv%2FWEuXYah99pVsxvqtAuC8YN7I%3D

8.「Signature」として最後に追加

先ほど「HMAC-SHA256」で作られた値を、パラメーター「Signature」としてリクエストURLの最後に追加します。

[URL]?[パラメーター1]=値&[パラメーター2]=値&[パラメーター3]=値・・・&Signature=[7で作られた値]

のような感じです。

【変更後】

http://webservices.amazon.com/onca/xml?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06&Signature=M%2Fy0%2BEAFFGaUAp4bWv%2FWEuXYah99pVsxvqtAuC8YN7I%3D

この手順え作られたURLがリクエストURL

この面倒な手順を踏んで作られたURLがAmazonへ送るURLです。
元となるURLを作成したら、
プログラムで変形に次ぐ変形をさせてリクエストURLを作っていく感じですね。

手順はザーッと見るくらいで、
実際にプログラムで動かした方が理解が早いと思うので、
次はPHPで動くプログラムを作っていきましょう!

まとめ

リクエストURL作成の概要の紹介でした!
次は実際に動くプログラムを作っていきます。

第1回:アソシエイトタグの取得
第2回:アクセスキーとシークレットキーの取得
第3回:リクエストURL作成の概要
第4回:リクエストURLの作成(PHP)と結果(XML)の確認-
第5回:リクエスト結果(XML)の表示
第6回:パラメーターの種類とか
最終回:実際に作ってみよう