商品を検索する(モジュール作成用)
商品検索APIを利用し、キーワードやカテゴリIDによる商品検索を行うモジュールを作成するためのサンプル。
使用API | |
---|---|
構成環境 | Apache-2.2.10 + PHP-5.2.5 |
ダウンロード
サンプルご利用の際は、利用規約をご覧ください。利用規約は、ダウンロードパッケージ内のLICENSE.txtファイルに記載されています。
コード解説
ダウンロードしたアーカイブファイルを展開すると下記のようになります。
`-- sample5
|-- ItemSearchFormModule
| |-- ItemSearchFormModule.php
| `-- ItemSearchFormModulePage.php
|-- LICENSE.txt
|-- README.txt
|-- common
| `-- common.php
`-- css
|-- default.css
`-- prototype.css
common.php
<?php
/** @mainpage
* Yahoo!ショッピングWeb APISDK共通関数
*/
/**
* @file
* @brief Yahoo!ショッピングWeb APISDK共通関数
*
* Yahoo!ショッピングWeb APISDKで、共通で使用する関数を集めたファイルです。
*
* PHP version 5
*
*/
/**
* @brief 特殊文字を HTML エンティティに変換する
*
* これは、htmlspecialchars()を使いやすくするための関数です。
* htmlspecialchars() http://jp.php.net/htmlspecialcharsより
* 文字の中には HTML において特殊な意味を持つものがあり、
* それらの本来の値を表示したければ HTML の表現形式に変換してやらなければなりません。
* この関数は、これらの変換を行った結果の文字列を返します。
*
* '&' (アンパサンド) は '&' になります。
* ENT_QUOTES が設定されている場合のみ、 ''' (シングルクオート) は '''になります。
* '<' (小なり) は '<' になります。
* '>' (大なり) は '>' になります。
* ''' (シングルクオート) は '''になります。
*
* echo h("<>&'\""); //<>&'"と出力します。
*
* @param string $str 変換したい文字列
*
* @return string html用に変換した文字列
*
*/
function h($str)
{
return htmlspecialchars($str, ENT_QUOTES);
}
/**
* 引数$paramからurlパラメータを生成します。
*
* 引数$paramからurlパラメータを生成します。
* キーを引数$param値をurlエンコードします。
* 値が""である場合はクエリに含めず、処理を飛ばします。
*
* @param array $param urlパラメータに含める文字列 キーにリクエストパラメータを、値にパラメータの値を入れます。
* $param = array(
* リクエストパラメータ=>パラメータの値
* );
*
* $urlparameter = buildQuery(array(
* "appid" => "<あなたのClient ID(アプリケーションID)>",
* "query" => "スニーカー",
* "category_id" => "",
* "hit" => 5
* ));
*
* echo $urlparameter; //appid=<あなたのClient ID(アプリケーションID)>&query=%A5%B9%A5%CB%A1%BC%A5%AB%A1%BC&category_id=&hit=5
*
* 上記の例では、category_idは値が「""」のためurlパラメータに含まれません。
*
* @return string URLエンコードされた文字列を返します。
*/
function buildQuery($param)
{
$tmp = array();
foreach($param as $key => $value){
$tmp [] = $key . "=" . rawurlencode($value);
}
return join("&", $tmp);
}
?>
ItemSearchFormModule.php
<?php
/** @mainpage
* 商品検索フォームモジュール
*/
/**
* @file
* @brief 商品検索フォームモジュール
*
* フォームから入力された値を条件して商品検索APIを、検索した結果を表示するクラス
* 検索結果に対して、カテゴリーによる絞り込みと、並び順の変更ができます。
*
* PHP version 5
*/
require_once("../common/common.php");
/**
* @class
* @brief 商品検索フォームモジュール
*
* 検索APIを利用して、フォームから入力された値を利用して検索した結果を表示するクラス
* 検索結果に対して、カテゴリーによる絞り込みと、並び順の変更ができます。
* phpのページに、数行のphpコードを書くことでブログパーツのように
* 商品の検索フォームを表示させることができます。
*
*
*/
class ItemSearchFormModule
{
/**
* @brief カテゴリーID一覧
*
* 商品カテゴリの一覧です。
* キーにカテゴリID、値にカテゴリ名が入っています。
* @access private
* @var array
*/
private $_categories = array(
"1" => "すべてのカテゴリから",
"13457" => "ファッション",
"2498" => "食品",
"2500" => "ダイエット、健康",
"2501" => "コスメ、香水",
"2502" => "パソコン、周辺機器",
"2504" => "AV機器、カメラ",
"2505" => "家電",
"2506" => "家具、インテリア",
"2507" => "花、ガーデニング",
"2508" => "キッチン、生活雑貨、日用品",
"2503" => "DIY、工具、文具",
"2509" => "ペット用品、生き物",
"2510" => "楽器、趣味、学習",
"2511" => "ゲーム、おもちゃ",
"2497" => "ベビー、キッズ、マタニティ",
"2512" => "スポーツ",
"2513" => "レジャー、アウトドア",
"2514" => "自転車、車、バイク用品",
"2516" => "CD、音楽ソフト",
"2517" => "DVD、映像ソフト",
"10002" => "本、雑誌、コミック"
);
/**
* @brief ソート方法一覧
*
* 検索結果のソート方法の一覧です。
* キーに検索用パラメータ、値にソート方法が入っています。
* @access private
* @var array
*
*/
private $_sortOrder = array(
"-score" => "おすすめ順",
"+price" => "商品価格が安い順",
"-price" => "商品価格が高い順",
"+name" => "ストア名昇順",
"-name" => "ストア名降順",
"-sold" => "売れ筋順"
);
/**
* @brief 引数を元に商品検索APIにアクセスし、結果を表示
*
* 引数を元に商品検索APIにアクセスし、その結果をhtmlに整形して表示します。
* 引数$paramにリクエストパラメータ名=>値と書くことで検索条件を追加することができます。
* 指定できるパラメータの一覧は
* http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
* を参照してください。
*
* @param array $param apiにアクセスする際の検索条件を指定します。
*
* $param = array(
* "appid" => string Client ID(アプリケーションID) //必須,
* "query" => string 検索キーワード //必須,
* "category_id" => int カテゴリID //カテゴリIDによる商品の絞り込み検索,
* "affiliate_type"=> string アフィリエイトタイプ yid or vc,
* "affiliate_id" => string アリフィリエイトIDを指定します,
* "sort" => string ソート順を指定します
* );
*
* Yahoo! JAPANアフィリエイトサンプル
* new ItemSearchListModule(array(
* "appid" => "<あなたのClient ID(アプリケーションID)>",
* "query" => "スニーカー",
* "affiliate_type" => "yid",
* "affiliate_id" => "EOipIudsX6dXJlfi8JXmsCA-",
* "hits" => 3
* ));
* バリューコマースアフィリエイトサンプル
* new ItemSearchListModule(array(
* "appid" => "<あなたのClient ID(アプリケーションID)>",
* "query" => "スニーカー",
* "affiliate_type" => "vc",
* "affiliate_id" => "http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=2219441&pid=874350257&vc_url=",
* "hits" => 3
* ));
*/
function __construct($param = array())
{
$results = array();
$param["query"] = !empty($_GET["query"]) ? $_GET["query"]: $param["query"];
$param["query"] = !empty($param["query"]) ? $param["query"] : "";
$param["sort"] = !empty($_GET["sort"]) ? $_GET["sort"] : $param["sort"];
$param["sort"] = !empty($param["sort"]) && array_key_exists($param["sort"], $this->_sortOrder)? $param["sort"] : "-score";
$param["category_id"] = ctype_digit($_GET["category_id"]) ? $_GET["category_id"]:$param["category_id"];
$param["category_id"] = !empty($param["category_id"]) && array_key_exists($param["category_id"], $this->_categories) ? $param["category_id"] : 1;
if ($param["query"] != "") {
$url = "http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch?". buildQuery($param);
try {
$xml = simplexml_load_file($url);
if ($xml["totalResultsReturned"] != 0) {
$results = $xml->Result->Hit;
}
} catch (Exception $e) {
}
}
$result = array();
$result["sort"] = $param["sort"];
$result["query"] = $param["query"];
$result["category_id"] = $param['category_id'];
$result["results"] = $results;
ItemSearchFormModule::display($result);
}
/**
* @brief htmlを組み立てて表示
*
* 引数に指定された値からhtmlに整形して出力します。
*
* @param array $param html内で表示する値
*
* $param = array(
* "sort" => string //ソート方法,
* "query" => string //検索キーワード,
* "category_id" => int //カテゴリーID,
* "results" => object //検索結果
* );
*/
function display($param=array())
{
$html = array();
$html []= "<div class=\"YahooShoppingAPISDK\">";
$html []= "<div class=\"ItemSearchFormModule\">";
$html []= "<h1>商品検索</h1>";
$html []= "<form action=\"". h($_SERVER['REQUEST_URI']). "\" class=\"Search\">";
$html []= "<input type=\"text\" name=\"query\" value=\"". h($param["query"]) . "\" />";
$html []= "<br />";
$html []= "<select name=\"category_id\">";
foreach ($this->_categories as $id => $name) {
$select = "";
$select = ($param["category_id"] == $id)?"selected=\"selected\"":"";
$html [] = "<option value=\"". h($id) . "\" ". $select .">". h($name) ."</option>";
}
$html []= "</select>";
$html []= "<select name=\"sort\">";
foreach ($this->_sortOrder as $key => $value) {
$select = "";
$select = ($param["sort"] == $key)?"selected=\"selected\"":"";
$html [] = "<option value=\"" . h($key) . "\" ". $select .">". h($value) ."</option>";
}
$html []= "</select>";
$html []= "<br />";
$html []= "<input type=\"submit\" value=\"Yahooショッピングで検索\"/>";
$html []= "</form>";
foreach ($param["results"] as $result) {
$html []= "<div class=\"Item\">";
$html []= "<p><a href=\"". h($result->Image->Small) . "\"><img src=\"" . h($result->Image->Small) . "\" /></a></p>";
$html []= "<h2><a href=\"" . h($result->Url) . "\">". h($result->Name) ."</a></h2>";
if (!is_null($result->PriceLabel->SalePrice)) {
$html []= "<p class=\"Price\">". h($result->Price). "円</p>";
}
$html []= "</div>";
}
$html [] = "</div>";
$html [] = "</div>";
echo join("\n", $html);
}
}
?>
ItemSearchFormModulePage.php
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
<title>ショッピングデモサイト - 商品を検索する(モジュール作成用)</title>
<link rel="stylesheet" type="text/css" href="../css/prototype.css"/>
</head>
<body>
<h1><a href="./ItemSearchFormModulePage.php">ショッピングデモサイト - 商品を検索する(モジュール作成用)</a></h1>
<?php
/** @mainpage
* 商品検索フォームモジュールを表示
*/
/**
* @file
* @brief 商品検索フォームモジュールを表示
*
* ItemSearchFormModule.phpを利用して、
* 商品検索フォームモジュールを表示し、
* フォームから入力された値を条件に、
* 検索APIを利用して、検索した結果を表示します。
* また、検索結果に対して、カテゴリーによる絞り込みと、並び順の変更ができます。
* phpのページに、数行のphpコードを書くことでブログパーツのように
* 商品検索フォームを表示させることができます。
*/
//ItemSearchFormModule.phpを読み込み
include_once("./ItemSearchFormModule.php");
/**
* ItemSearchFormModule呼び出し
*
* 設定例
* $obj = new ItemSearchFormModule(array(
* "appid" => Client ID(アプリケーションID) //必須,
* "query" => 検索キーワード //必須,
* "category_id" => カテゴリIDによる商品の絞り込み検索, //任意
* "affiliate_type"=>"アフィリエイトタイプ yid or vc",
* "affiliate_id" =>"アリフィリエイトIDを指定します",
* "sort" => "ソート順を指定します"
* ));
*
* 指定できるパラメータの一覧は
* http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
* を参照してください。
*
* パラメータを追加する場合は
* "リクエストパラメータ名" => "値"
* としてください。
*
* Yahoo! JAPANアフィリエイトサンプル
* new ItemSearchFormModule(array(
* "appid" => "<あなたのClient ID(アプリケーションID)>",
* "query" => "スニーカー",
* "affiliate_type"=>"yid",
* "affiliate_id" =>"EOipIudsX6dXJlfi8JXmsCA-",
* "hits" => 3
* ));
* バリューコマースアフィリエイトサンプル
* new ItemSearchFormModule(array(
* "appid" => "<あなたのClient ID(アプリケーションID)>",
* "query" => "スニーカー",
* "affiliate_type"=>"vc",
* "affiliate_id" =>"http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=2219441&pid=874350257&vc_url=",
* "hits" => 3
* ));
*/
new ItemSearchFormModule(array(
"appid" => "<あなたのClient ID(アプリケーションID)>",
"hits" => 5
));
?>
</body>
<!-- Begin Yahoo! JAPAN Web Services Attribution Snippet -->
<a href="http://developer.yahoo.co.jp/about">
<img src="http://i.yimg.jp/images/yjdn/yjdn_attbtn2_105_17.gif" width="105" height="17" title="Webサービス by Yahoo! JAPAN" alt="Webサービス by Yahoo! JAPAN" border="0" style="margin:15px 15px 15px 15px"></a>
<!-- End Yahoo! JAPAN Web Services Attribution Snippet -->
</html>