【プログラミング】アマゾン API を利用して PHP で商品情報を取得する方法 その1【ソースコード付き】

アマゾンのAPIを利用して商品情報を取得したいけど、どうやったらいいんだろう?
PHPで作れないかな?

この記事はこんな疑問にお答えします。

本記事の内容
・アマゾンのAPIを利用するには?
・リクエスト電文の作成方法
・ソースコードの公開

■ アマゾンのAPIを利用するには?

「アマゾンのAPIを利用して商品情報を取得したいけど、やり方がわからないよ」
「プログラミングを学んで作れるようになってきたら、API を使ってみたくなるよね」
「API はそれぞれ決まり事があるから、それを理解しないとできないね」
「使い方を理解しながら、実際にやってみよう」

プログラミングを学んで、少しできるようになってくると自分でツールとか作りたくなってきますよね。

世の中には API というものがものすごく広まっていて、いろいろな情報を取得することができるようになっています。

ちなみに API ですが・・・
API : Application Programmin Interface
といいます。

詳細は、APIでググってもらえればたくさん出てくると思いますので、検索してみてください。

一言でいうと、プログラム間のやり取りをルール化して公開してあるもの、です。

あるシステムを持っている企業が、そのシステムの機能をAPIとして公開すると、そのシステムの機能を外部から使うことができるようになります(データとして受け取ることができるようになります)。

今回で言えば、アマゾンの商品を検索して商品情報をデータとして受け取る、ということができます。

さっそく、アマゾンのAPI の使い方を紹介します。

■リクエスト電文の作成方法

アマゾンのAPIを利用するには、APIキーが必要になります。

これも発行方法はググってもらえればたくさん出てきますので、検索してみてください。

アマゾンのAPI利用で一番わからない部分だけ解説していきます。

アマゾンに商品情報をくださいとお願いするのに、リクエストをしなければなりません。
それをここではリクエスト電文と呼びます。

このリクエスト電文の作り方が難しく、理解するのにかなり苦労します。

僕はかなり苦しみました。

いくつかのサイトの解説を何度も読んで、ロジックに組み込んでは失敗し、組み込んでは失敗し・・・を繰り返しました。

なんとか、うまく行き、実際に商品情報を取得できた時は、ものすごく嬉しかったです。

そのリクエスト電文ですが、以下のような流れで作ります。
1.元になるリクエストを用意します。
2.タイムスタンプを付けます。
3.RFC 3986」形式でエンコーディングします。
4.文言とつないでいる「&」などを消して改行します。
5.パラメーター名で昇順にソートします。
6.もう一度「&」でつなぎます。
7.3行を頭に追加します。
8.ハッシュ関数により暗号化します。
9.「Signature」として最後に追加します。

いやこれ理解できないでしょ・・・って感じです。

■ソースコードの公開

というわけで、よく理解できていないながらも、API でなんとか取得できるようになったソースコードを公開します。
アソシエイトタグ、アクセスキー、シークレットキーはご自分のものを指定してください。

HTML

 $v ) {
  $base_request .= "&" . $k . "=" . $v;
}
$base_request = $baseurl . "?" . substr( $base_request, 1 );
//echo "【0.元となるリクエスト】
" . $base_request . "

"; // 1.タイムスタンプを付ける $params["Timestamp"] = gmdate( "Y-m-d\TH:i:s\Z" ); $base_request .= "&Timestamp=" . $params["Timestamp"]; //echo "【1.タイムスタンプを付ける】
" . $base_request . "

"; // 2.「RFC 3986」形式でエンコーディング $base_request = ""; foreach ( $params as $k => $v ) { $base_request .= "&" . $k . "=" . rawurlencode( $v ); $params[$k] = rawurlencode( $v ); } $base_request = $baseurl . "?" . substr( $base_request, 1 ); //echo "【2.「RFC 3986」形式でエンコーディング】
" . $base_request . "

"; // 3.「&」とか消して改行 $base_request = preg_replace( "/.*\?/", "", $base_request ); $base_request = str_replace( "&", "\n", $base_request ); //echo "【3.「&」とか消して改行】
" . $base_request . "

"; // 4.パラメーター名で昇順ソート ksort( $params ); $base_request = ""; foreach ( $params as $k => $v ) { $base_request .= "&" . $k . "=" . $v; } $base_request = substr( $base_request, 1 ); $base_request = str_replace( "&", "\n", $base_request ); //echo "【4.パラメーター名で昇順ソート】
" . $base_request . "

"; // 5.もう一度「&」でつなぐ $base_request = str_replace( "\n", "&", $base_request ); //echo "【5.もう一度「&」でつなぐ】
" . $base_request . "

"; // 6.3行を頭に追加 $parsed_url = parse_url( $baseurl ); $base_request = "GET\n" . $parsed_url["host"] . "\n" . $parsed_url["path"] . "\n" . $base_request; //echo "【6.3行を頭に追加】
" . $base_request . "

"; // 7.ハッシュ関数による暗号化 $signature = base64_encode( hash_hmac( "sha256", $base_request, Secret_Access_Key, true ) ); $signature = rawurlencode( $signature ); //echo "【7.ハッシュ関数による暗号化】
" . $signature . "

"; // 8.「Signature」として最後に追加 $base_request = ""; foreach ( $params as $k => $v ) { $base_request .= "&" . $k . "=" . $v; } $base_request = $baseurl . "?" . substr( $base_request, 1 ) . "&Signature=" . $signature; //echo "【8.「Signature」として最後に追加】
" . $base_request . "

"; //echo "XML結果
"; ?>

ご参考にしていただき、何らかの手助けになったら、幸いです。

ちなみに参考にしたサイトです。

マナブさんのブログから参考にしました。
Amazon APIを使って商品検索するPHPコード【配布・コピペOK】

はにわまんさんのブログから参考にしました。
「Amazon API」の使い方を紹介します!最安値やランキング取得できるよ①-アソシエイトID(タグ)登録編-

大変助かりました、感謝です。

次回は、このリクエスト電文を使って、商品情報を取得するソースコードを公開します。

スポンサードサーチ

Amazon Web Servicesプログラミング ―APIの基礎からElastic Beanstalkの利用まで

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です