AmazonのZend ServiceはBrowseNodesを提供していないので、私はそれを拡張することにしました。 Zendコードはhttp://framework.zend.com/manual/de/zend.service.amazon.htmlにあります。Amazon BrowseNodesのZend_Serviceを拡張して、祖先は処理されません。
以下のコードはほとんど動作しますが、Just Ancestorsは処理されません。私はwsdlまたはxpathにエラーがあるのだろうかと思います。デバッグしようとしていますが、祖先を処理するだけです。 BrowseNodeId、Name、IsCategoryRoot、子は処理されますが、祖先配列は常に空です。 xpathクエリーは子を見つけることができますが、先祖は見つけることができません。
下記のコードをご覧ください。そして、ここでは、XML
の一部は、ItemLookupでは のXMLエキスのWSDLの解剖学であるhttp://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AnatomyofaWSDL.html
XML応答私はどのように
<BrowseNodes>
<BrowseNode>
<BrowseNodeId>10605</BrowseNodeId>
<Name>Education</Name>
<Children>...</Children>
<Ancestors>
<BrowseNode>
<BrowseNodeId>21</BrowseNodeId>
<Name>Education & Reference</Name>
<Ancestors>
<BrowseNode>
<BrowseNodeId>1000</BrowseNodeId>
<Name>Subjects</Name>
<IsCategoryRoot>1</IsCategoryRoot>
<Ancestors>
<BrowseNode>
<BrowseNodeId>283155</BrowseNodeId>
<Name>Books</Name>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</Ancestors>
</BrowseNode>
</BrowseNodes>
の部分Zend_Service_Amazon_ 商品番号BrowseNodes
class Zend_Service_Amazon_Item
{
/**
* @var array
*/
public $BrowseNodes = array();
public function __construct($dom) {
// .... the code for the other items
// .... for browsenode
$result = $xpath->query('./az:BrowseNodes/*', $dom);
if ($result->length > 1) {
/**
* @see Zend_Service_Amazon_BrowseNode
*/
require_once 'Zend/Service/Amazon/BrowseNode.php';
foreach ($result as $r) {
$this->BrowseNodes[] = new Zend_Service_Amazon_BrowseNode($r);
}
}
}
}
私は、私は答えを見つけたBrowseNodes
class Zend_Service_Amazon_BrowseNode
{
/**
* @var integer
*/
public $BrowseNodeId;
/**
* @var string
*/
public $Name;
/**
* @var boolean
*/
public $IsCategoryRoot;
/**
* @var array BrwoserNodes
*/
public $Ancestors = array();
/**
* @var string
*/
public $Children = array();
/**
* Assigns values to properties relevant to BrowseNode
*
* @param DOMElement $dom
* @return void
*/
public function __construct(DOMElement $dom)
{
$xpath = new DOMXPath($dom->ownerDocument);
$xpath->registerNamespace('az', 'http://webservices.amazon.com/AWSECommerceService/2011-08-01');
foreach (array('BrowseNodeId', 'Name') as $el) {
$result = $xpath->query("./az:$el/text()", $dom);
if ($result->length == 1) {
$this->$el = (string) $result->item(0)->data;
}
}
$result = $xpath->query('./az:IsCategoryRoot/text()', $dom);
if ($result->length == 1) {
$this->IsCategoryRoot = (bool) $result->item(0)->data ;
}
foreach (array('Children','Ancestors') as $el) {
$result = $xpath->query("./$el/*", $dom);
if ($result->length > 1) {
foreach ($result as $r) {
array_push($this->$el, new Zend_Service_Amazon_BrowseNode($r));
}
}
}
}
}