MB-Support

パソコン初心者のサポートページ

バリューコマースウェブサービス+PHP+SimpleXML

 PHP と SimpleXML を用いて、バリューコマースウェブサービスを使ってみました。残念ながら、管理人には説明する能力はありません。このページは管理人のメモです。


SimpleXML で各アイテムを取り出す方法。メールで TOKEN を発行してもらい、送られてきた英数字を埋め込んだ URL(UTF-8)で RSS を受信した結果が以下。


RSS

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:vc="http://valuecommerce.com/pdb/rss/">
<channel>
<title>ValueCommerce Product Database Search Results</title>
<link>http://www.valuecommerce.com</link>
<description>Processingtime: 545 ms</description>
<language>ja</language>
<copyright>Copyright 2008, ValueCommerce Co. Ltd.</copyright>
<vc:keyword>HP Pavilion Notebook PC</vc:keyword>
<vc:adult>n</vc:adult>
<vc:rateMin>2</vc:rateMin>
<vc:resultPerPage>10</vc:resultPerPage>

<vc:sortBy>fee</vc:sortBy>
<vc:sortOrder>desc</vc:sortOrder>
<vc:page>1</vc:page>
<vc:resultcount>26</vc:resultcount>
<vc:pagecount>3</vc:pagecount>
<vc:mediaType>Web</vc:mediaType>
<vc:status>OK</vc:status>

各ラベルの説明は、「Webservice_API_reference.rdf」に掲載されています。Itemより上の基本情報を取り出すには、

PHP

$copyright= $xml->channel->item->copyright;

例えば、<copyright>Copyright 2008, ValueCommerce Co. Ltd.</copyright> の情報を上では変数 $copyright に代入しています。表示するには、

print("$copyright");

vc:status に出力される内容は、サーバーエラーや問い合わせたキーワードなどの問題となり、「OK」を受け取ってから Item 情報を展開するのが望ましいと思います。この <vc:status> vc: と付いた status を取り出すには、RSS 先頭付近にある

xmlns:vc="http://valuecommerce.com/pdb/rss/"

を参照します。上の例では

PHP

// エラーを取得
$vc = $xml->channel->children('http://valuecommerce.com/pdb/rss/');
$Status = $vc->status;

こんな感じになります。現在、変数 $Status に <vc:status> の「OK」が代入されました。分岐するには、

PHP

if ($Status == "INTERNAL_SERVER_ERROR") {
 $erorr = "サーバーに内部エラーが発生しており、表示する事ができません。";
}
elseif ($Status == "INVALID_SEARCH_PARAMETERS") {
 $erorr = "検索パラメータが無効です。検索ワードを変更します。";
}
elseif ($Status == "SERVICE_UNAVAILABLE") {
 $erorr = "何らかの理由(メンテナンス等)によりサービスが停止しています。";
}
elseif ($Status == "OK") {
 //正しく商品データを取得できたので、ここから独自の何かを実行する
}
else {
 //不明 exit; でも良し。
}
if (isset($erorr)) {
 //エラーを取得した場合。
 //別のウェブサービスに切り替えたり、エラー内容を出力、または、exit;でも良し。
}

各商品データが格納されたitem

各ラベルの説明は、「Webservice_API_reference.rdf」に掲載されてるので、ここでは省きます。

RSS

<item>
<title>商品名</title>
<link>リンクアドレス</link>
<description>カテゴリ名</description>
<guid>固定アドレス</guid>
<vc:pvImg>
<![CDATA[
リンク毎に必須となる画像
]]
</vc:pvImg>
<vc:merchantName>会社名</vc:merchantName>
<vc:subStoreId>ショップを表す英数字</vc:subStoreId>
<vc:subStoreName>ショップ名</vc:subStoreName>
<vc:adult>n</vc:adult>
<vc:startdate>20080229</vc:startdate>
<vc:category>computers</vc:category>
<vc:image class="small" url="" height="" width="" />
<vc:image class="large" url="" height="" width="" />
<vc:image class="free" url="画像アドレス.jpg" height="190" width="175" />
<vc:price>139860</vc:price>
<vc:commissionValue>3986</vc:commissionValue>
<vc:commissionPercent>3</vc:commissionPercent>
<vc:commissionFixed>0</vc:commissionFixed>
<vc:latitude></vc:latitude>
<vc:longitude></vc:longitude>
</item>

上が一つのアイテムで、検索結果と取得するデータ数により数が異なりますが、内容は同じです。ここでもやはり vc; が付きます。OK を取得した場合、各 item のデータを取り出すには

PHP

foreach ($xml->channel->item as $Item) {

$vc = $Item->children('http://valuecommerce.com/pdb/rss/');
//VC:無し 例としてタイトルを取得
$itemName = $Item->title;
//SJISに変換
$itemName = mb_convert_encoding("$itemName", "SJIS","auto");
//出力
print ("$itemName");

//VC:有り 例として金額を取得
$vc_price = $vc->price;
//SJISに変換
$vc_price = mb_convert_encoding("$vc_price", "SJIS","auto");
//3桁毎にカンマを挿入
$vc_price = number_format((int)$vc_price);
//出力
print ("$vc_price");

}

取得した RSS の画像に関する記述が以下。

RSS

<vc:image class="small" url="" height="" width="" />
<vc:image class="large" url="" height="" width="" />
<vc:image class="free" url="画像アドレス.jpg" height="190" width="175" />

種類は3つで、小さい画像、大きい画像、フリー画像。変数に代入するには以下。

PHP

//小さい画像の情報を取得
foreach ($vc->image[0]->attributes() as $vc_image[]) {
//画像の種類(smallなど)
$pic_small_class = $vc_image[0];
//画像のアドレス
$pic_small_url = $vc_image[1];
//画像の高さ
$pic_small_height = $vc_image[2];
//画像の幅
$pic_small_width = $vc_image[3];
}
//大きい画像の情報を取得
foreach ($vc->image[1]->attributes() as $vc_image[]) {
//画像の種類(largeなど)
$pic_large_class = $vc_image[4];
//画像のアドレス
$pic_large_url = $vc_image[5];
//画像の高さ
$pic_large_height = $vc_image[6];
//画像の幅
$pic_large_width = $vc_image[7];
}
//フリー画像の情報を取得
foreach ($vc->image[2]->attributes() as $vc_image[]) {
//画像の種類(freeなど)
$pic_free_class = $vc_image[8];
//画像のアドレス
$pic_free_url = $vc_image[9];
//画像の高さ
$pic_free_height = $vc_image[10];
//画像の幅
$pic_free_width = $vc_image[11];
}

もちろん、個別に取得する必要はありませんが、画像が存在しない場合に空か共通の文字が取得できれば良いのですが、ショップによってはノーイメージ画像(画像が無い事を表す画像)が埋め込まれていて、その画像ファイル名がショップにより異なるため、確実に自前で用意したノーイメージ画像に変更するのは至難と思われます。管理人が作ってみたのが以下。



検索フォームは制作していないので、検索ワードはこちらで指定しています。ワードは「Phenom X4」。初期状態では、画像 1 枚と 5 件のタイトルだけ表示して、「全て展開する」をクリックすると、説明や金額などの詳細情報が表示されます。

バリューコマース





BTOパソコン・ゲームPC・自作パソコンなら【TSUKUMO】 - 自作PCに必要なパーツ、豊富な品揃え

Copyright © 2013 MB-Support パソコン初心者のサポートページ All Rights Reserved.

管理人サイト閲覧方法プライバシーポリシー著作権/免責事項