PEAR

こちらもご利用ください
日本版アマゾン amazon.co.jp 対応 PEAR::Services_Amazon_Jp

お米の国対応だけじゃ・・・ねぇ。

(ノ・・)ン。。。。。。(((●コロコロッ

PEAR::Services_Amazonを使って前回あれこれ遊んでみた。
http://dozo.rgr.jp/log/eid194.html
簡単にアマゾンに検索を掛けられるのでけっこう楽しい。
&いろんなことが出来る。

ただ、日本のアマゾンサイト(amazon.co.jp)を使って検索するには、
ちょっと適応がややこしそう。


一番簡単なソースコードはこんな感じ。
<?
require_once("Services/Amazon.php");

$amazonObj = & new Services_Amazon();
$itemlist = $amazonObj->searchKeyword( "amazon" );

print_r( $itemlist );
?>



これだと、アメリカのamazon.comのリンクとかが張られた結果が返ってきます。
それだと・・・ね・・・。
アフィリエイトもらえないし・・・ね。


ということで拡張したクラスを作ってみた。

↓ ソースコードはこちら
 
まずは使い方から
<?
$amazonObj = & new Services_Amazon_Jp();
$amazonObj->setToken( "XXXXXXXXX" ); // developer tokenは別途入手が必要
$amazonObj->setAssociateID( "alloftheworld-22" ); // アソシエイトID
$amazonObj->setLocale( "jp" );
$amazonObj->setBaseUrl( "http://xml-jp.amznxslt.com/onca/xml3" );
$amazonObj->setType( "heavy" ); // heavyモードも使えます。

$modeArray = $amazonObj->getMode(); // 日本語モードリスト取得
$mode = $modeArray["videogames"]

$itemlist = $amazonObj->searchKeyword( "AceCombat5", $mode );

print_r( $itemlist );
?>

これで日本語サイトにジャンル絞り込みをした検索が可能になります。
heavyタイプの方が面白い検索が出来るし。
(^▽^ケケケ








ちょっと長いけどごめんね。
<?php
require_once("Services/Amazon.php");
/*
* Services_Amazonを拡張
*/
class Services_Amazon_Jp extends Services_Amazon
{
/*
* type
*/
var $_type = "lite";

function setType( $type = "heavy" )
{
$this->_type = ($type!="heavy")?"lite":"heavy";
}

/**
* Sends the request to Amazons Web Services.
*
* @access private
* @param array $params An array of url parameters to pass. With the key being the variable for the value.
* @param integer $page Which page of products to retrieve. Defaults to the first.
* @return mixed Returns a PEAR_Error on error and an array of products on success.
*/
function &_sendRequest($params = array(), $page = 1) {
if (is_null($this->_token) || is_null($this->_affid)) {
return PEAR::raiseError('Developers token or Affiliate ID have not been set.');
}

// Get base url and append all params after url encoding them
$url = $this->_baseurl . '?locale=' . $this->_locale . '&type=' .$this->_type. '&f=xml&t=' . $this->_affid . '&dev-t=' . $this->_token . '&page=' . $page;
foreach ($params as $key => $value) {
if(!is_null($value)) {
$url .= '&' . $key . '=' . urlencode($value);
}
}

// Open up our HTTP_Client and set our User-Agent field then send the
// request for the URL.
$http = &new HTTP_Client;
$http->setDefaultHeader('User-Agent', 'Services_Amazon/' . $this->getApiVersion());
$http->get($url);

// Retrieve the result and check that its HTTP 200 Ok. Otherwise raise
// an error.
$result = $http->currentResponse();
if ($result['code'] != 200) {
return PEAR::raiseError('Amazon return HTTP ' . $result['code']);
}

// Start up the XML_Unserializer and feed it the data received from
// Amazon.com
$xml = &new XML_Unserializer(array('complexType' => 'object', 'keyAttribute' => 'url'));
$xml->unserialize($result['body'], false);
$data = $xml->getUnserializedData();

// Check to make sure Amazon didn't give us an error. If so raise it.
if (isset($data->ErrorMsg)) {
return PEAR::raiseError($data->ErrorMsg);
}

// Prepare the data to be sent to _processPage
$data = get_object_vars($data);
$pages = isset($data['TotalPages']) ? (int) $data['TotalPages'] : 1;
unset($data['TotalResults']);
unset($data['TotalPages']);

$products = $this->_processPage($data);
$products['page'] = $page;
$products['pages'] = $pages;

return $products;
}

/**
* Retrieves an array of modes supported by Amazon.
*
* The array is arranged with the shorthand version as the key and the human
* readable version as its value. Below are the current modes in the list.
* <pre>
* books - Japanese Books
* books-us - English Books
* music - Popular Music
* classical - Classical Music
* dvd - DVD
* vhs - VHS
* electronics - Electronics
* software - Software
* videogames - Computer & Video Games
* toys - Toys & Games
* </pre>
*
* @access public
* @static
* @return array An array of modes with the short hand modename to pass to
* Amazon as the key and the longer human readable form as the
* key's value.
*/
function getModes() {
return array(
"books" => "books-jp",
"books-us" => "books-us",
"music" => "music-jp",
"classical" => "classical-jp",
"dvd" => "dvd-jp",
"vhs" => "vhs-jp",
"electronics" => "electronics-jp",
"software" => "software-jp",
"videogames" => "videogames-jp",
"kitchen" => "kitchen-jp",
"toys" => "toys-jp",
);
}
}

?>


コメント








トラックバック
http://dozo.rgr.jp/sb.cgi/222
この記事のトラックバックURL
BlogRanking
オススメしたいグッズ
我の創りし物
カテゴリアーカイブ
banners
loglog
banners
Valid XHTML 1.1!
記事一覧
月別アーカイブ
最近のコメント
最近のトラックバック
リンク
リンク
関連用語
Powered by