前回では楽天商品検索APIから商品情報を取得し、
返ってきたXMLのデータを配列にいれるところまでを行いました。
いよいよ最後の仕上げ、商品情報を取り出して、HTMLに表示させます。
[サンプルコード全文は
こちら]
[楽天商品検索APIの仕様は
こちら]
■配列から商品情報の取り出しと表示
94// 連想配列から値を取得
95if($values){
96 $item_temp = null;
97 foreach ($values as $data) {
98 if(isset($data['tag'])){
99 // タグ名のよって分岐
100 switch ($data['tag']) {
101 case 'STATUS'://共通パラメータ:Status
102 if(isset($data['value'])){
103 $status = $data['value'];
104 }
105 break;
106 case 'STATUSMSG': //共通パラメータ:Statusに特化したメッセージ
107 if(isset($data['value'])){
108 $statusmsg = $data['value'];
109 }
110 break;
111 case 'COUNT'://全体情報:検索数
112 if(isset($data['value'])){
113 $count = $data['value'];
114 }
115 break;
116 case 'ITEM': //商品情報:ITEMタグ開始
117 if($data['type'] == 'open'){
118 $item_temp = array();
119 }else if($data['type'] == 'close'){ //商品情報:ITEMタグ終
120 array_push($item_array,$item_temp);
121 $item_temp = null;
122 }
123 break;
124 default:
125 if(is_array($item_temp)){ //商品情報:ITEMタグ終了
126 if(isset($data['value'])){
127 $item_temp['tag']ata['value'];
128 }
129 }
130 break;
131 }
132 }
133 }
134}
135 }
136// 以下からHTML表示部分
|
|
前回でXMLから生成した配列構造体の各要素についてみていきます。
(配列構造体の中にはXMLの要素名'tag'、値'value'、タイプ'type'が含まれています。)
97行目でタグ名をまずみます。
100行目のswitch文で、必要なタグ要素の値を取り出しています。
101行目、106行目の判定で共通パラメタとなるStatus,StatusMsgの値取得を行います。
商品情報に関しては、<Item></Item>の中にはいっていますので
117行目、ITEMタグの開始(タグのtypeがopen)と同時に配列を宣言し、
119行目、ITEMタグの終了(タグのtypeがclose)までは
127行目でそれぞれのタグ毎に商品情報を連想配列$item_tempに格納しています。
連想配列$item_tempには各商品情報(<Item></Item>)毎に、
それぞれの商品がItemの中の要素名'tag'をキーとしてその値が格納されます。
120行目では、ITEMタグの終了(close)となりますので、
商品情報の連想配列を通常の配列(item_array)に1商品として追加しています。
これ以降は検索結果のHTML表示となります。
138 header("Content-type:text/html;charset=UTF-8");
|
|
138行目ですが、ブラウザに返す、ヘッダ情報にコンテンツタイプの指定(text/html)と
文字エンコーディングの指定(UTF-8)を入れます。
172行目以降は楽天商品検索APIにリクエストを投げた結果をHTMLのテーブルタグで
1件ずつ一覧表示をする部分になります。
172 <!-- API検索結果表示 -->
173 <font style="font-size:14px;">
174 <?php if($status != ""){ ?>取得結果: <?=$status?><br><? } ?>
175 <?php if($statusmsg != ""){ ?>取得内容: <?=$statusmsg?><br><? } ?>
176 <?php if($count > 0){ ?>取得件数: <?=$count?><br>
177 <table width="80%" border="0" cellspacing="0" cellpadding="0" style="margin: 5px 0pt 0pt 0px;">
|
|
174行目,175行目,176行目で共通パラメタ(Status,StatusMsg)からの情報を表示します。
取得件数も0以上であれば表示します。
178 <tr><td bgcolor="#afafaf">
179 <table width="100%" border=0 cellspacing=1 cellpadding=5 style="font-size:12px;">
180 <tr align="center" style="background-color: #eeeeee;">
181 <td width="8%" >写真</td>
182 <td width="47%">商品名</td>
183 <td width="15%">価格</td>
184 <td width="30%">ショップ名</td>
185 </tr>
186 <?php foreach ($item_array as $item){ ?>
187 <tr style="background-color: #ffffff;">
188 <td width="8%" align="center"><a href="<?=$item['ITEMURL']?>" target="_top"><img src="<?=$item[IMAGEURL']?>" border=0></a></td>
189 <td width="47%" align="left"><a href="<?=$item['AFFILIATEURL']?>" target="_top"><font size="-1"><?['ITEMNAME']?></a></td>
190 <td width="15%" align="right" nowrap> <?=$item['ITEMPRICE']?> 円</td>
191 <td width="47%" align="left"><a href="<?=$item['SHOPURL']?>" target="_top"><font size="-1"><?=$itePNAME']?></a></td>
192 </tr>
193 <?php } ?>
194 </table>
195 </td></tr></table>
196 <?php } ?>
197 </font>
198 <!-- /API検索結果表示 -->
|
|
178行目~185行目はHTMLのテーブルの見出し部分になります。
商品情報は、「写真画像」「商品名」「価格」「ショップ名」を表示させます。
186行目では、商品配列(item_array)にはいっている商品情報の連想配列を1つずつ取り出しています。
XMLをパースした時、すべての商品情報(<ITEM>タグの中の要素と値)が含まれていますから、
商品検索結果のHTMLを表示させるのに必要な情報(itemUrl,itemPrice,shopUrl,shopName,itemName)
を連想配列から取り出して表示させています。
以上でPHPのサンプルソースの解説は終了です。
サンプルソースということでエラー処理や複雑なXMLのパース処理はなるべく簡略化していますが
200行そこそこのソースで、楽天商品検索APIを使ったマッシュアップサイトが
簡単に作成できます。
今すぐ作成してみましょう!