解説(5)商品情報をXMLから取り出す
商品検索PHPプログラムのサンプルコード(serch.php)解説。
ヤフーショッピングのAPIサーバーにリクエストを投げると、
レスポンスはXML形式で戻ってきますので、それを
simplexml_load_string関数で配列化して変数$xml に格納します。
//検索件数が0件でない場合,変数$hitsに検索結果を格納します。
if ($xml["totalResultsReturned"] != 0) {
$hits = $xml->Result->Hit;
XMLのヘッダーは不要なので商品情報のディレクトリ($Hit)まで配列をカットします。
これを変数$hitsに格納し、print_r($hits);
で中身を表示させるとこんな感じになります。
★レスポンスの商品情報配列の一例
この配列から利用する情報だけ取り出して、商品情報配列$list_yを作ります
このファイルをテンプレート・エンジンのスマーティに後で渡します。
// 分解したデータを順番に配列($list_y)に格納
unset($list_y);
$i = 0;
ここは変数の中身をリセットしている記述です。
あまり意味はありません。
foreach($hits as $hit){
配列$hits から1要素ずつ取り出して、変数$hitに代入していきます。
$list_y[$i]['title'] = mb_strimwidth ($hit->Name,0,50, "", "UTF-8");
商品タイトルを取得してUTF-8にエンコードして、さらに文字数を調整しています。
商品タイトルはこのレスポンスでは、2番目の階層の
「Name」というキーに対応しているのでて、$hit->Nameとすれば値が取り出せます。
mb_strimwidth関数は、文字数を丸めるための関数で、ここでは50文字に丸めています。
$list_y[$i]['Description'] = mb_strimwidth ($hit->Description, 0,300, "", "UTF-8")."・・";
これは商品の説明を300字で取り出している記述です。
$hit->Descriptionで取り出せます。
文字数は表示するページのスペースに合わせて変えます。
$list_y[$i]['url'] = $hit->Url;
$list_y[$i]['img'] = $hit->Image->Medium;
$list_y[$i]['price'] = $hit->Price;
商品サイトのURLや商品画像、価格情報などを取り出しています。
$list_y[$i]['reviewAverage'] = $hit->Review->Rate;
$list_y[$i]['reviewCount'] = $hit->Review->Count;
$list_y[$i]['reviewURL'] = $hit->Review->Url;
レビュー情報などを取り出しています。
$i++;
}
次の商品情報の処理に進んで、最後まで言ったらこの処理が終わります。
//print_r($list_y);
}else{//検索結果が0のとき
print("検索条件に合う結果は、見つかりませんでした。
");
}
ここでは、検索結果が0だったときに表示する文言を設定しています。