[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 メーリングリストの案内