「1. RESTリクエストのパラメータ設定」は、検索したい条件によって、複数のfunctionを用意するとよいでしょう。
今回は、ECS 4.0をキーワード検索するために、$keyword(検索キーワード:RESTのKeywordsパラメータ)、$index(商品種別:RESTのSearchIndexパラメータ)、$page(表示するページ:RESTのPageパラメータ)の3つを引数にとるfunctionを作成します。
引数以外のfunction内のRESTパラメータに関しては、前編の解説を読めば、それぞれどのような意味を持っているのかが分かるはずです。
「2. ECSサーバへの接続」は、PHPの持つfsockopen()という関数を利用して、ECSサーバにPHPスクリプトから接続します。HTTP RequestでRESTパラメータを指定して、Amazonの商品情報をHTTP Responseとして受け取ります。
「3. 商品情報XMLの保持」では、取得したXMLを、PHPスクリプトから利用しやすいようにSimpleXMLの機能を利用して$xml変数に格納します。
以下がサンプルソースコードです。ソースコードを利用する際には、いくつかのパラメータを自分の環境にあわせて変更する必要があります。
<?php class Ecs { // ECSから取得した商品情報XMLを格納 var $xml; // ECS 4.0を利用するのに必要な情報 var $host = "webservices.amazon.co.jp"; var $base_path = "/onca/xml?Service=AWSECommerceService"; var $sub_id = "自分のSubscription ID"; var $aid = "自分のアソシエイトID"; var $version = "2004-10-04"; var $contentType= "text/xml"; // RESTパラメータを指定するPath部分 var $path = ""; // キーワードと商品種別、ページを指定して検索 function set_keyword($keyword,$index,$page) { $this->path = $this->base_path . "&SubscriptionId=" . $this->sub_id . "&AssociateTag=" . $this->aid . "&Version=" . $this->version . "&ContentType=" . $this->contentType; $this->path .= "&Operation=ItemSearch" . "&ResponseGroup=Small,Offers,Images,BrowseNodes,SalesRank" . "&Keywords=" . $keyword . "&SearchIndex=" . $index . "&Page=" . $page; return TRUE; } // ECS 4.0にRESTリクエストを発行して、XMLを取得 function loadXML() { $doc = $this->connect(); if(!$doc) return FALSE; if (substr($doc,0,5) != "<?xml") return FALSE; // Simple XMLに商品情報XMLを格納 $this->xml = @simplexml_load_string($doc); return TRUE; } // PHPのSocket機能を利用して、ECS 4.0サーバに接続 function connect () { $sockPointer = @fsockopen($this->host, 80, $errno, $errstr,6); if( !$sockPointer ) { return FALSE; } else { stream_set_timeout($sockPointer, 6, 0); fputs ($sockPointer, "GET $this->path HTTP/1.0\r\nHost: $this->host\r\n\r\n"); fputs ($sockPointer, "User-Agent: ECS-Sample/1.0\n\n"); fputs ($sockPointer, "Keep-Alive: 300\n\n"); fputs ($sockPointer, "Connection: Keep-Alive\n\n"); fputs ($sockPointer, "Referer: http://www.itmedia.co.jp/\n\n"); $buf = ""; $response = fgets($sockPointer); if (substr_count($response, "200 OK") > 0) { while (!feof($sockPointer)) { $buf = $buf . fread($sockPointer,4096); } } else { $result = FALSE; } $result = TRUE; } fclose($sockPointer); if ($result) { $doc = substr($buf,strpos($buf,"\r\n\r\n")+4); return $doc; } else { return FALSE; } } } ?>
$sub_id = ECS登録時に取得したSubscription ID
$aid = アソシエイト・プログラム登録時のアソシエイトID
fputs()で指定する、HTTP Header。
"User-Agent: ECS-Sample/1.0\n\n" = 任意のUser-Agent
"Referer: http://www.itmedia.co.jp/\n\n" = 自分のサイトのURL
Copyright © ITmedia, Inc. All Rights Reserved.