Yahoo ショッピング の 商品検索 API で XML のパースに xpath を使った時のメモ。
ちなみに、同APIには 取得形式として「PHP seriallize」があり、PHPのシリアライズ化されたデータでの取得も可能ですが、今回はどうしても xpath を使ってみたかったので、XML で取得します。
API をたたくと、以下のような XML データが取得できます。
$url = 'http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch?appid=<APPID>&query='.urlencode('パソコン'); $xml = file_get_contents($url); var_dump($xml);
↓ 取得結果
<?xml version="1.0" encoding="UTF-8"?> <ResultSet xsi:schemaLocation="urn:yahoo:jp:itemSearch http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch.xsd" xmlns="urn:yahoo:jp:itemSearch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" totalResultsAvailable="168044" totalResultsReturned="20" firstResultPosition="1"> <Result> <Request> <Query>パソコン</Query> </Request> <Modules /> <Hit index="1"> <Name>TOSHIBA 東芝 PST422FCWZR1U dynabook Satellite T42 216C/5W A4 ノートパソコン</Name> <Description>★在庫有り!即日発送可! CPU Intel Celeron プロセッサー 585 2.16GHz …(snip) …</Description> <Headline>延長保証受付中!在庫有り!</Headline> : (snip) :
$url = 'http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch?appid=<APPID>&query='.urlencode('パソコン'); $xml = file_get_contents($url); // SimpleXMLElement オブジェクト $sxe = new SimpleXMLElement($xml); // 名前空間の登録 // 今回はプレフィクス「y」を登録 $sxe->registerXPathNamespace('y', 'urn:yahoo:jp:itemSearch'); // HIT数 の取得 $res = $sxe->xpath('//y:ResultSet/@totalResultsAvailable'); echo "HIT数: {$res[0]}".PHP_EOL; // 最初にHITした商品名 の取得 $res = $sxe->xpath('//y:Result/y:Hit/y:Name'); echo "最初にHITした商品名: {$res[0]}".PHP_EOL; exit;
↓ 結果
HIT数: 168044 最初にHITした商品名: TOSHIBA 東芝 PST422FCWZR1U dynabook Satellite T42 216C/5W A4 ノートパソコン