[PHP-users 27177] AmazonECSで金額が取得できない
TABATA , Hitoshi
hitoshi @ koyotrading.com
2005年 10月 11日 (火) 10:04:00 JST
タバタ@KOYOです。
AmazonのECSと格闘中です。itmedia(http://www.itmedia.co.jp/
enterprise/articles/0502/28/news003_2.html)のコードを参考に
フォーム画面と結果を表示する画面を作成しました。
商品名/画像へのリンクURLは取得/表示できるので
すが、なぜか金額だけが表示されません。おわかりになる方、アドバイ
ス願います。
以下、コードです。
1.フォーム画面
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>PHPでECS 4.0!</title>
</head><body>
ECS 4.0を検索<br />
<form method="GET" action="./show.php">
<input type="text" name="Keywords">
<input type="radio" name="index" value="Blended" checked>全て
<input type="radio" name="index" value="Books">和書
<input type="radio" name="index" value="ForeignBooks">洋書
<input type="radio" name="index" value="Music">音楽
<input type="radio" name="index" value="MusicTracks">曲名から
調べる
<input type="radio" name="index" value="Classical">クラシック
<br />
<input type="radio" name="index" value="Video">映画 DVD&VHS
<input type="radio" name="index" value="DVD">DVD
<input type="radio" name="index" value="VHS">VHS
<input type="radio" name="index" value="VideoGames">ゲーム
(PS2, 任天堂, XBox)
<input type="radio" name="index" value="Electronics">家
電 エレクトロニクス
<input type="radio" name="index" value="Kitchen">ホーム&キッ
チン
<input type="radio" name="index" value="Toys">おもちゃ&ホビー
<input type="radio" name="index" value="Software">PCソフトウェア
<input type="submit" value="検索">
</form><br />
2.表示画面
<?php
include_once ("ecs.php");
// 検索に必要なパラメータを取得、設定
$Keywords = !empty($_GET['Keywords']) ? $_GET['Keywords'] : "ブ
ログ";
$index = !empty($_GET['index']) ? $_GET['index'] : "Blended";
if( !$_GET[ItemPage] ) {
$ItemPage = 2 ;
} else {
$ItemPage = $_GET[ItemPage]+1 ;
}
// ECS 4.0に接続するためのクラスをインスタンス化
$ecs = new Ecs();
// キーワード検索のパラメーターをセット
$result = $ecs->set_keyword(urlencode($Keywords),$index,$ItemPage);
// ECS 4.0への問い合わせを実行
$result = $ecs->loadXML();
// ページのHTMLを出力
@header('Content-Type: text/html; charset=UTF-8');
@header('Content-Language: ja');
// ECSの検索が成功したら、内容を表示
if ($result) {
// Itemの数だけ、商品を表示
foreach ($ecs->xml->Items->Item as $item) {
$title[] = $item->ItemAttributes->Title ;
$link[] = $item->DetailPageURL ;
$price[] = $item->OfferSummary->LowestNewPrice-
>FormattedPrice ;
$smallImageURL[] = $item->SmallImage->URL ;
}
echo "<table border=1>";
echo "<tr>";
for( $i = 0 ; $i < count($price); $i++ ) {
echo "<tr><td rowspan=2><img src=".$smallImageURL[$i]."></
td><td><a href=".$link[$i].">".$title[$i]."</a></td></tr>" ;
echo "<tr><td>".$price[$i]."</td></tr>";
}
echo "</tr>";
echo "</table>";
echo "<a href=show.php?&Keywords=" . $Keywords. "&index=" .
$index. "&ItemPage=" . $ItemPage.">次の10件</a>";
} else {
print "Error : ECSへの接続に失敗しました";
}
echo "</body></html>";
?>
3.読み込みクラスecs.php
<?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 = "非公開";
var $aid = "非公開";
var $version = "2004-10-04";
var $contentType= "text/xml";
var $sort= "titlerank";
// RESTパラメータを指定するPath部分
var $path = "";
// キーワードと商品種別、ページを指定して検索
function set_keyword($Keywords,$index,$ItemPage)
{
$this->path = $this->base_path
. "&SubscriptionId=" . $this->sub_id
. "&AssociateTag=" . $this->aid
. "&Version=" . $this->version
. "&ContentType=" . $this->contentType
. "&Sort=" . $this->sort;
$this->path .= "&Operation=ItemSearch"
. "&ResponseGroup=Small,Images,BrowseNodes"
. "&Keywords=" . $Keywords
. "&SearchIndex=" . $index
. "&ItemPage=" . $ItemPage;
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.koyo.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;
}
}
}
?>
PHP-users メーリングリストの案内