後編 WebサービスをAmazonで知る――PHPでECS 4.0を使うテクニック(2/5 ページ)

» 2005年02月25日 12時40分 公開
[金子 順,ITmedia]

 「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変数に格納します。

 以下がサンプルソースコードです。ソースコードを利用する際には、いくつかのパラメータを自分の環境にあわせて変更する必要があります。

リスト1■ECSアクセスクラスサンプルソースコード
<?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.

注目のテーマ